Власні інструменти та зброя 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 або 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 ви захочете використовувати модель item/handheld як батьківську модель замість звичайної item/generated.
Assets
Вам також потрібно буде додати текстуру, переклад, клієнтський переклад і модель предмета. Однак для моделі item ви захочете використовувати модель item/handheld як батьківську модель замість звичайної item/generated.
У цьому прикладі ми визначимо наступний клієнтський предмет, модель і текстуру для предмета «Guidite Sword»:
INFO
Моделі предметів можна згенерувати. Щоб отримати додаткові відомості, перегляньте документацію щодо створення моделей предметів.
java
itemModelGenerator.generateFlatItem(ModItems.GUIDITE_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);1
Подібна схема застосовується до предмета «Guidite Axe».
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
Це майже все! Якщо ви зайдете в гру, ви побачите свої інструменти на вкладці «Інструменти й прилади» в меню інвентарю творчости.






