User Tools

Site Tools


ru:tutorial:items

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

Введение

Добавление простого предмета - один из первых шагов в создании модов. Вы собираетесь создать объект Item, зарегистрировать его и дать ему текстуру. Чтобы добавить дополнительное поведение предмету, вам необходимо сделать ваш собственный класс предмета. В этом и следующих туториалах имена “tutorial” используются как образец, Если у Вас есть отдельное modid - не стесняйтесь использовать его вместо “tutorial”.

Регистрация предмета

Для начала создайте экземпляр предмета. Мы поместим его на верх нашего класса инициализатора. Конструктор принимает в себя образец Item.Settings (или FabricItemSettings), который используется для задания свойств предмета, таких как категория (в творческом меню), прочность и размер стака.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // экземпляр нашего нового предмета
  4. public static final Item FABRIC_ITEM = new Item(new FabricItemSettings().group(ItemGroup.MISC));
  5. [...]
  6. }

Вы будете использовать классическую систему регистрации нового контента. Вот базовый синтаксис Registry#register(Registry Type, Identifier, Content). Типы регистрации хранятся как статические типы в классе Registry, и идентификатор обозначает ваш контент. Контент - это экземпляр всего, что вы добавляете. Он может быть вызван в любой момент во время инициализации.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // экземпляр нашего нового предмета
  4. public static final Item FABRIC_ITEM = new Item(new FabricItemSettings().group(ItemGroup.MISC));
  5.  
  6. @Override
  7. public void onInitialize() {
  8. Registry.register(Registry.ITEM, new Identifier("tutorial", "fabric_item"), FABRIC_ITEM);
  9. }
  10. }

Теперь Ваш предмет добавлен в Minecraft. Нажмите задачу Gradle runClient, чтобы увидеть его в действии

Добавление предмету текстуры

Для регистрации текстуры необходимы .json файл модели и изображение с самой текстурой. Вам нужно поместить их в папку с ресурсами тут:

  Модель предмета: .../resources/assets/tutorial/models/item/fabric_item.json
  Текстура предмета: .../resources/assets/tutorial/textures/item/fabric_item.png

Примеры наших текстур находятся здесь.

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

  [Server-Worker-1/WARN]: Unable to load model: 'tutorial:fabric_item#inventory' referenced from: tutorial:fabric_item#inventory: java.io.FileNotFoundException: tutorial:models/item/fabric_item.json

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

Базовым шаблоном модели предмета является:

{
  "parent": "item/generated",
  "textures": {
    "layer0": "tutorial:item/fabric_item"
  }
}

Parent указывает, как предмет должен отображаться в руке, это полезно для таких вещей, как предметы блоков в инвентаре. item/handheld используется для инструментов, которые держатся за нижний левый угол текстуры. textures/layer0 это расположение файла с картинкой.

Конечный текстурированный результат:

Создание класса предмета

Чтобы добавить дополнительное поведение к предмету, вам нужно будет создать класс предмета. Конструктору по умолчанию требуется объект Item.Settings.

  1. public class FabricItem extends Item {
  2.  
  3. public FabricItem(Settings settings) {
  4. super(settings);
  5. }
  6. }

Практическим вариантом использования класса предмета было бы заставить предмет воспроизводить звук, когда вы его используете:

  1. public class FabricItem extends Item {
  2.  
  3. public FabricItem(Settings settings) {
  4. super(settings);
  5. }
  6.  
  7. @Override
  8. public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
  9. playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
  10. return TypedActionResult.success(playerEntity.getStackInHand(hand));
  11. }
  12. }

Замените старый объект Item экземпляром вашего нового класса предмета:

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // экземпляр нашего нового предмета
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC));
  5. [...]
  6. }

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

Что делать, если я хочу изменить размер стака моего предмета?

Для этого вы должны использовать maxCount(int size) внутри FabricItemSettings, чтобы указать максимальный размер стека. Обратите внимание, что если ваш предмет может быть поврежден, вы не можете указать максимальный размер стека, иначе игра выдаст исключение RuntimeException.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // Экземпляр нашего нового предмета, где стак предметов это 16
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC).maxCount(16));
  5. [...]
  6. }

Следующие шаги

ru/tutorial/items.txt · Last modified: 2022/02/27 09:43 by 127.0.0.1