Оружие и инструменты 26.1.2
Узнайте, как создавать собственные инструменты и настраивать их свойства.
WARNING
Эта страница написана для версии 26.1.2. Документация для более старых версий может быть неполной.
Инструменты необходимы для выживания и развития, позволяя игрокам собирать ресурсы, строить здания и защищаться.
Создание Материала Инструмента
Вы можете создать инструментальный материал, создав новый объект "ToolMaterial" и сохранив его в поле, которое позже можно будет использовать для создания предметов инструмента, использующих этот материал.
java
public static final ToolMaterial GUIDITE_TOOL_MATERIAL = new ToolMaterial(
INCORRECT_FOR_GUIDITE_TOOL, // incorrect blocks for drops
455, // durability
5.0F, // speed
1.5F, // attack damage bonus
22, // enchantment value
GuiditeArmorMaterial.REPAIRS_GUIDITE_ARMOR // repair items
);1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Конструктор ToolMaterial принимает следующие параметры в указанном порядке:
| Параметр | Описание |
|---|---|
incorrectBlocksForDrops | Если блок находится в теге incorrectBlocksForDrops, это означает, что при использовании инструмента из этого ToolMaterial на этом блоке, блок не выпадет в виде предмета. |
durability | Долговечность всех инструментов, изготовленных из этого ToolMaterial. |
speed | Скорость майнинга инструментов, изготовленных из этого ToolMaterial. |
attackDamageBonus | Инструменты, изготовленные из этого ToolMaterial, будут наносить дополнительный урон при атаке. |
enchantmentValue | "Зачарованность" инструментов, изготовленных из этого ToolMaterial. |
repairItems | Любые предметы, указанные в этом теге, могут быть использованы для ремонта инструментов из этого ToolMaterial на наковальне. |
В этом примере мы будем использовать тот же тег предметов для починки, который мы будем использовать для брони. Мы определяем ссылку на тег следующим образом:
java
public static final TagKey<Item> REPAIRS_GUIDITE_ARMOR = TagKey.create(BuiltInRegistries.ITEM.key(), Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "repairs_guidite_armor"));1
Если вам трудно определить сбалансированные значения для любого из числовых параметров, вам следует рассмотреть возможность использования стандартные константы материала инструмента, таких как ToolMaterial.STONE or ToolMaterial.DIAMOND.
Создание тега материала инструмента
Для нашего тега incorrectBlocksForDrops мы можем создать тег, аналогичный ванильным тегам minecraft:incorrect_for_*_drops, определяют блоки, которые не будут выпадать при добыче этим материалом. Давайте определим ссылку на тег следующим образом:
java
public static final TagKey<Block> INCORRECT_FOR_GUIDITE_TOOL = TagKey.create(BuiltInRegistries.BLOCK.key(),
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "incorrect_for_guidite_tool"));1
2
2
Затем мы определяем содержимое тега с помощью JSON-файла тега. Давайте сделаем так, чтобы инструменты из гуидита могли добывать те же блоки, что и деревянные инструменты, а также медную руду и глубокосланцевую медную руду:
json
{
"values": ["#minecraft:incorrect_for_wooden_tool"],
"fabric:remove": ["#minecraft:copper_ores"]
}1
2
3
4
2
3
4
Обратите внимание, что этот пример наследует от более слабого материала инструмента и удаляет записи, наш более сильный материал может добывать, наследуя все остальные блоки, которые дерево не может добыть.
TIP
Мы также можем сделать наоборот: унаследовать от более сильного инструмента и добавить дополнительные блоки, для которых инструменты из гуидита не подходят.
Например, если бы мы хотели создать инструмент, который работал бы как железный, но не мог добывать алмазную руду, values должен был бы содержать #minecraft:incorrect_for_iron_tool и #minecraft:diamond_ores.
Если вы хотите, чтобы ваш материал инструмента добывал те же блоки, что и существующий, вы можете включить соответствующий тег в определение вашего тега без каких-либо дополнений или удалений. Это рекомендуется вместо передачи существующего тега в качестве incorrectBlocksForDrops вашего материала, чтобы пользователи могли настраивать неподходящие блоки для каждого из материалов независимо.
Регистрация предметов-инструментов
Используя ту же вспомогательную функцию, что и в руководстве Создание вашего первого элемента, вы можете создавать свои инструменты:
java
public static final Item GUIDITE_SWORD = register(
"guidite_sword",
Item::new,
new Item.Properties().sword(GUIDITE_TOOL_MATERIAL, 1f, 1f)
);1
2
3
4
5
2
3
4
5
Два плавающих значений (1f, 1f) относятся к урону от атаки инструмента и скорости атаки инструмента соответственно.
Для лопат, топоров и мотыг вам следует создавать ShovelItem, AxeItem или HoeItem вместо обычного Item, поскольку они реализуют специфичные для инструментов действия по правому клику:
java
public static final Item GUIDITE_AXE = register(
"guidite_axe",
settings -> new AxeItem(GUIDITE_TOOL_MATERIAL, 5.0F, -3.0F, settings),
new Item.Properties());1
2
3
4
2
3
4
INFO
ShovelItem, AxeItem и HoeItem вызывают методы shovel, axe или hoe класса Item.Properties в своих конструкторах.
Не забудьте добавить их во вкладку предметов в творческом режиме, если вы хотите быстро получить к ним доступ!
java
CreativeModeTabEvents.modifyOutputEvent(CreativeModeTabs.TOOLS_AND_UTILITIES)
.register((creativeTab) -> creativeTab.accept(ModItems.GUIDITE_SWORD));1
2
2
Вам также придется добавить текстуру, перевод предмета и модель предмета. Однако для модели предмета вы захотите использовать модель item/handheld в качестве родительского вместо обычной модели item/generated.
Ресурсы
Вам также нужно будет добавить текстуру, перевод, клиентский предмет и модель предмета. Однако для модели предмета вы захотите использовать модель item/handheld в качестве родительского вместо обычной модели item/generated.
В этом примере мы определим следующие клиентский предмет, модель и текстуру для предмета «Меч из гуидита»:
INFO
Эта модель может быть сгенерирована с помощью данных. Для получения дополнительной информации см. документацию по генерации моделей предметов.
java
itemModelGenerator.generateFlatItem(ModItems.GUIDITE_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);1
Аналогичный принцип применяется и к предмету "Топор из гуидита".
java
itemModelGenerator.generateFlatItem(ModItems.GUIDITE_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);1
Тегирование предметов-инструментов
ПРЕДВАРИТЕЛЬНЫЕ ТРЕБОВАНИЯ
Для получения дополнительной информации см. документацию по генерации тегов предметов.
Также рекомендуется поместить ваш инструмент в соответствующие теги предметов. Инструменты имеют свои собственные отдельные теги, такие как ItemTags.SWORDS, которые используются для зачаровываемости и другой специфической логики, например, для применения урона по области (свип-атаки).
В вашем провайдере тегов предметов добавьте следующие строки в addTags:
java
valueLookupBuilder(ItemTags.SWORDS)
.add(ModItems.GUIDITE_SWORD);
valueLookupBuilder(ItemTags.AXES)
.add(ModItems.GUIDITE_AXE);1
2
3
4
2
3
4
Вот и все! Если вы зайдёте в игру, вы должны увидеть свои инструменты на вкладке «Инструменты и полезности» в меню творческого инвентаря.






