Как создать свой предмет в майнкрафт

Обновлено: 05.07.2024



И так. О чем я буду говорить, я уже писал в шапке. Для начала скажу, что в том коде, что мы будем писать, очень легко запутаться, так что будьте осторожны. Теперь о самом механизме. Существует два типа его постройки: С подобием верстака и при помощи выкидывания предметов на землю. Вы скажете, но ведь проще просто кидать предметы, чем их крафтить. Да, это действительно проще со стороны юзера, но со стороны создателя механизм с "Верстаком" выйдет в два, а то и в три раза компактнее, чем механизм с выбрасыванием. Ну, пожалуй, это все, о чем хотел сказать в начале. Приступим к самому механизму.

Начнем, пожалуй, с первого способа
Если вы начинающий редстоунер, то советую пользоваться им, так-как в нем сложно запутаться, в отличии от второго.
Сейчас расскажу о способе, работающем на принципе выбрасывания предметов в одно место.
Я буду делать так, чтобы при крафте появлялись частички. Вы можете делать без этого.
Приступим.

1. Расставляем командные блоки как на скриншоте:

[Guide][1.9] Как делать свои крафты

2. Вписываем команды:

/scoreboard players set @e[type=Item] A 1 ,OnGround:1b>

Разберем тэги:

type - Тип сущности @e
id - ID предмета, которому будет выдано одно очко A
Count - Количество проверяемого предмета
OnGround - Проверяет, лежит ли предмет на земле. (0 - нет, 1 - да)

execute @e[score_A=1]

/scoreboard players set @e[dx=0,dy=0,dz=0] A 2 ,OnGround:1b>
Разберем тэги:

score_A - Тег, проверяющий наличие у предмета @e одного очка A.
dx,dz,dy - Смещение координат по блокам (Более точный параметр, по сравнению с r - radius)

/execute @e[score_A=2]

Эта команда отвечает за то, что мы получим в итоге

Damage - На сколько будет поломан предмет (так-же обозначает доп.id)
tag - Дополнительные тэги
ench - Зачарование
id:6 - Зачарованние на Шипы
lvl:5 - Уровень зачароваия

В итоге мы получим почти сломанный меч, зачарованный на шипы 5

Для красивого спавна перед Item можно добавить: Motion:[0.0,0.3,0.0] - Предмет подпрыгнет на 0.3 блока вверх

/particle happyVillager

Просто спавним зеленые частички возле предмета с двумя очками A (т.е. возле палочки)

/execute @e[score_A=2]

Ну, тут думаю все понятно. Тем более, все тэги я объяснил выше.

/scoreboard players reset @e[score_A_min=1] A

Обнуляет задачу A для ее предметов.

[Guide][1.9] Как делать свои крафты

Все. Теперь нам останется просто запитать нашу конструкцию и готово!

И так. Приступим ко второму, более сложному способу создания своего крафта. Но! Его сложность себя окупает. Он занимает всего два командных блока.
Для начала нам понадобится сделать сам верстак. Он основан на раздатчике в котором стоит армор стенд.

Для его создания можно использовать и команды в чате, но я покажу пример на командных блоках. Также покажу, как сделать так, чтобы его смогли сделать игроки.

[Guide][1.9] Как делать свои крафты

1. Расставляем командные блоки как на скриншоте:

2. Заполняем блоки командами:

Устанавливаем верстаку критерий A на 1. Все тэги объяснял выше.

execute @e[score_A=1]

minecraft:dispenser -1 /setblock

CustomName - Имя верстака

Тут мы проверяем, стоит-ли под верстаком раздатчик, если да, то заменяем его на "Верстак"

/execute @e[score_Craft=1]

minecraft:dispenser -1 /summon ArmorStand

Чтобы создать стенд я использовал генератор.

CustomName - Имя стенда
Invisible - Видим ли стенд (1 - нет, 0 - да)
NoBasePlate - Отключить ли плиту под стендом
NoGravity - Отключить ли гравитацию стенду
DisbledSlots - Отключенные слоты

/kill @e[score_A=1]

Убиваем наш верстак

Все. создание верстака готово. Перейдем к самим крафтам.

Расставляем блоки и записываем в них команды:

[Guide][1.9] Как делать свои крафты

execute @e[name=Craft]

Итого у нас вышло: Если мы положим в верхний центральный слот слезу гаста а в центральный слот порошок блейза, то командный блок выдаст сигнал.

Чтобы добавить предмет добавляете следующий код:

1 - Порядковый номер предмета.
Slot - Слот, в котором лежит предмет. Расположение слотов:

0 1 2
3 4 5
6 7 8

Count - Кол-во предмета

execute @e[name=Craft]

Что получилось: Если сигнал поступит на блок ,то в 4 слоте (то есть в центре) появится два снежка. Чтобы добавить зачарование предмету используйте: tag:]>

Примечания: Синий командный блок - Цикличный, Зеленый - Цепной. Командный блок с выгнутой стрелочкой сбоку - Условный, С ровной - Безусловный. Чтобы активировать механизм - Поставьте над всеми командными блоками редстоун блоки.

Если механизм не работает, попробуйте ре-активировать его. Если и это не поможет, пишите мне.

Всё! Вот так быстро и просто мы создали основной класс для регистрации предметов. Чтобы использовать наш предмет, где-то в моде, достаточно написать ItemsRegistry.KEY . Больше никаких манипуляций с классом не требуется, его не нужно прописывать в стадии загрузки игры. Хотелось бы ещё отметить то, что блоки всегда будут регистрироваться раньше, чем предметы!

Теперь можете запустить Minecraft и посмотреть свой предмет в живую. Чтобы получить предмет пропишите /give @p tut:key . Вместо tut у вас должен быть modId мода! Вместо key у вас должно быть регистрируемое имя вашего предмета.

Предмет от первого лица

Предмет от третьего лица

После последних обновлений Forge для 1.12.2, произошли некоторые изменения в регистрации моделей для блоков и предметов. Для удобства напишем метод registryModel в нашем классе ItemsRegistry .

Создадим файл key.json и перенесём его в папку по данному пути src/main/resources/assets/tut/models/item .

Пропишем такой код для плоской модели:

tut - modId мода. key - регистрируемое имя нашего предмета.

Если ваша текстура к модели берётся из самого Minecraft, то tut: (modId) прописывать не надо! Текстуру необходимо добавить по пути:

Предмет с моделью от первого лица

Запускаем игру и видим, что у нас получилось(на скриншотах объёмная модель):

Добавление моделей блокам и предметам

- Подробное описание интерфейсов для создания моделей.

Разберем методы интерфейса IBakedModel :
isAmbientOcclusion - возвращает boolean , определяет можно ли к данной модельке применить AmbientOcclusion.
isGui3d - возвращает boolean , определяет, будет ли данная модель рендерится плоской в слоте инвентаря или в виде выброшенного предмета ( EntityItem ).
isBuiltInRenderer - возвращает boolean , при true, текущая модель отрисовываться не будет, вместо неё будет рендерится TileEntityItemStackRenderer . Этот метод используют такие ванильные блоки как сундук или флаг(баннер).
getOverrides - возвращает ItemOverrideList , с помощью него можно удобно создавать отдельно модельку предмету, отдельно блоку(см ниже).
getParticleTexture - возвращает текстуру частиц( TextureAtlasSprite ), используется при создании частиц данной модельки. Например для предмета такие частицы появляются при съедании, для блока при ходьбе по нему.
handlePerspective - возвращает готовую модельку матрицу перспективы 4x4( Pair<? extends IBakedModel, Matrix4f> , очень мощный метод для трансформации модельки, напрямую лучше не реализовывать. Параметр cameraTransformType - тип текущей трансформации(см net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType )
getItemCameraTransforms - возвращает трансформацию модели предмета( ItemCameraTransforms ). Вызывается каждый кадр, когда рендерится предмет.
getQuads - основной метод данного интерфейса IBakedModel , возвращает список 'запеченных' квадратов( List<BakedQuad> ), которые впоследствии передаются на графический процессор, где они уже будут отрисованы opengl'ем. Примечание: У блоков этот метод вызывается не каждый кадр, а только при обновлении рендера блока. Обновление рендера блока происходит либо когда блок впервые попал в поле зрения камеры, или когда рядом с ним обновился какой-либо blockstate. У предметов данный метод вызывается каждый кадр.

- Создание предмета с плоской моделью.

Теперь немного практики. (УРА!)
Первым делом создадим свой ICustomModelLoader

Minecraft PE: Как создать свой предмет

С версии Minecraft Bedrock Edition Beta 1.12.0.2 в игре появился новая возможность, которая позволяет создавать свои собственные предметы при помощи наборов ресурсов и параметров. В этом гайде мы кратко расскажем вам об этой возможности.

В конце руководства мы оставили ссылку на скачивание архива с готовым набором параметров и ресурсов. Со временем мы можем обновить это руководство, добавив или изменив информацию.

Шаг 1. Создаем набор ресурсов.

С помощью ресурсов сначала мы должны зарегистрировать наш предмет в игре и при желании назначить ему собственную иконку.

  • Windows 10: C:\Users\ИмяПользователя\AppData\Local\Packages\
    Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\
    com.mojang\resource_packs
  • Android: \games\com.mojang\resource_packs

Minecraft PE: Как создать свой предмет

Переходим в созданную папку и создаем в ней файл с названием manifest.json.


Откройте этот файл через текстовый редактор и вставьте следующий код:

<
"format_version": 1,
"header": <
"description": "Tutorial Resource Pack",
"name": "Tutorial Resource Pack",
"uuid": "УНИКАЛЬНЫЙ ID",
"version": [0, 0, 1]
>,
"modules": [
<
"description": "Tutorial Resource Pack",
"type": "resources",
"uuid": "УНИКАЛЬНЫЙ ID",
"version": [0, 0, 1]
>
]
>

Мы не будем вдаваться в подробности всех настроек, но самое важное здесь — строки "uuid": "УНИКАЛЬНЫЙ ID".

Ввод этих значений обязателен, иначе система игры не сможет распознавать наборы.

Получить их достаточно легко. Нужно перейти на сайт https://www.uuidgenerator.net/version4. Введите в поле "How Many?" количество идентификаторов и нажмите кнопку "Generate".


Полученные значения вставьте вместо "УНИКАЛЬНЫЙ ID" (они не должны повторяться!) в файле manifest.json. В итоге должно получиться что-то вроде этого:


В папке набора создаем еще одну папку с именем items, в которой, собственно, и будут лежать наши предметы.


Переходим в созданную папку и создаем в ней файл названиеПредмета.json.

Обратите внимание на то, что названия принято писать на латинице и использовать camelCase-стиль (либо разделять слова знаком нижнего подчеркивания '_'). Это означает, что несколько слов пишутся без пробелов, а каждое новое слово начинается с прописной буквы.

В итоге должно получиться что-то вроде следующего:


Открываем созданный файл и заполняем его следующим кодом:

"format_version": "1.10",
"minecraft:item": "description": "identifier": "minecraft:названиеПредмета",
"category": "Nature"
>,

"components": "minecraft:icon": "apple",
"minecraft:use_animation": "eat",
"minecraft:render_offsets": "apple"
>
>
>

Не забудьте изменить строку "minecraft:названиеПредмета" на то название, которым вы назвали файл.

В официальной документации на Wiki сказано, что указывать "minecraft" перед идентификатором нельзя и делать это нужно только при переопределении стандартных существ и предметов.

Таким образом правильный идентификатор будет выглядеть следующим образом: "identifier": "названиеМода:названиеПредмета"

В этом руководстве мы не будем упираться в эти стандарты, но в реальных проектах делайте именно так, иначе возможна путаница с другими сторонними дополнениями ;)

  • identifier - идентификатор предмета
  • category - категория предмета
    • Может принимать следующие значения: Equipment, Nature, Items
    • eat - поедания
    • camera - камера
    • crossbow - арбалет
    • bow - лук
    • seeds - семена
    • flesh - плоть
    • fishes - рыба
    • melon - арбуз



    Шаг 2. Создаем набор параметров.

    Отлично! Мы создали свой предмет, но чтобы он окончательно заработал, необходимо задать ему "логику" с помощью набора параметров.

    Теперь уже в папке \games\com.mojang\behavior_packs\ создаем новую папку набора поведений.


    В созданной папке снова создаем файл manifest.json и папку items.


    Открываем новый созданный файл manifest.json и вставляем в него следующее:


    "format_version": 1,
    "header": "uuid": "УНИКАЛЬНЫЙ ID",
    "name": "Tutorial Data Pack",
    "version": [ 1, 8, 0 ],
    "description": "Tutorial resource pack 5"
    >,
    "modules": [
    "description": "Not Used",
    "version": [ 1, 8, 0 ],
    "uuid": "УНИКАЛЬНЫЙ ID",
    "type": "data"
    >
    ],
    "dependencies": [
    "uuid": "ID набора ресурсов",
    "version": [0, 0, 1]
    >
    ]
    >

    В разделе "dependencies" нужно указать "uuid" нашего набора ресурсов. Благодаря этому можно будет активировать только набор параметров, а набор ресурсов подключится автоматически.

    В итоге должно получится следующее:


    Теперь идем в папку items и создаем в ней снова файл с именем названиеПредмета.json.


    В созданный файл с помощью текстового редактора вставляем следующее:

    "format_version": "1.10",
    "minecraft:item": "description": "identifier": "minecraft:названиеПредмета"
    >,

    "components": "minecraft:hand_equipped": false,
    "minecraft:stacked_by_data": true,
    "minecraft:use_duration": 32,
    "minecraft:foil": true,
    "minecraft:food": "nutrition": 4,
    "saturation_modifier": "supernatural",
    "can_always_eat": true,
    "effects": [
    "name": "regeneration",
    "chance": 1.0,
    "duration": 30,
    "amplifier": 4
    >,
    "name": "absorption",
    "chance": 1.0,
    "duration": 120,
    "amplifier": 3
    >,
    "name": "resistance",
    "chance": 1.0,
    "duration": 300,
    "amplifier": 0
    >,
    "name": "fire_resistance",
    "chance": 1.0,
    "duration": 300,
    "amplifier": 0
    >
    ]
    >
    >
    >
    >

    • identifier - идентификатор предмета
    • minecraft:hand_equipped - может находиться в любой руке (true/false)
    • minecraft:stacked_by_data - может стакаться (true/false)
    • minecraft:use_duration - продолжительность использования (целое число)
    • minecraft:foil - можно использовать в качестве топлива (true/false)
    • minecraft:food
      • nutrition - сытость (число)
      • saturation_modifier
      • can_always_eat - можно всегда есть
      • effects - получаемый эффект (массив)
        • name - название эффекта
        • chance - шанс получения (1.0 = 100%)
        • duration - продолжительность (в секундах)
        • amplifier - уровень эффекта
        • crop_result - блок, который будет размещен на грядке

        Получить предмет можно командой /give @s идентификаторПредмета (ниже есть информация о создании рецепта для предмета).



        А поскольку мы назначили ему компонент minecraft:food и перечислили список получаемых эффектов, то теперь предмет можно есть и получать эффекты!


        В папке набора ресурсов создаем папку textures, переходим в нее и создаем в ней папку items и файл item_texture.json.

        Переходим в созданную папку items и в нее помещаем иконку предмета в формате .jpg.

        Открываем файл item_texture.json и помещаем в него следующее:


        "resource_pack_name": "vanilla",
        "texture_name": "atlas.items",
        "texture_data": "названиеПредмета": "textures": "textures/items/названиеТекстурыИконки"
        >
        >
        >

        Если нужно добавить больше иконок, то просто разделяйте запятыми, как показано под спойлером ниже:


        "resource_pack_name": "vanilla",
        "texture_name": "atlas.items",
        "texture_data": "названиеПредмета": "textures": "textures/items/названиеТекстурыИконки"
        >,
        "myCustomItem": "textures": "textures/items/myCustomItem"
        >,
        "megaSword": "textures": "textures/items/megaSword"
        >
        >
        >

        Примерно должно получится следующее:


        Теперь у предмета есть своя иконка! Очень просто, не так ли?

        Переходим в папку набора параметров и создаем в нем папку recipes, открываем эту папку и создаем в ней файл "названиеПредмета.json".


        Открываем этот файл и вставляем следующий код из под спойлера ниже.

        "format_version": "1.12",
        "minecraft:recipe_shaped": "description": "identifier": "идентификаторРецепта"
        >,

        "tags": [ "crafting_table" ],
        "pattern": [
        "III",
        "III",
        "III"
        ],
        "key": "I": "item": "идентификаторПредмета"
        >
        >,
        "result": "item": "идентификаторПолучаемогоПредмета"
        >
        >
        >

        Обратите внимание, что таблица крафта в верстаке состоит из девяти ячеек. Каждой ячейке в рецепте можно назначать ключ с помощью латинской буквы (например, I) и каждому ключу назначать предмет, который необходим для крафта предмета.

        Вот, что вышло у меня для этого руководства:


        В итоге активирован аддон вы сможете проверить работоспособность нового крафта в верстаке!


        Переходим в папку набора ресурсов и создаем в ней папку texts. Переходим в эту папку и создаем файлы для локализации:


        Вводим строку перевода в следующем формате: item.идентификаторПредмета.name=Название предмета на конкретном языке




        Ссылки:
        Ссылка на скачивание архива с готовым примером:

        Читайте также: