Table of Contents
Добавление инструментов
Создание ToolMaterial
Для инструментов требуется ToolMaterial
, который определяет следующее поведение:
- прочность
- скорость копания
- урон
- уровень копания
- зачаровываемость
- предмет для починки
Другими словами, Tool Materials определяет базовую функциональность base для инструментов этого типа, и инструменты могут использовать значения, предоставляемые материалом, или использовать свои собственные.
Материалы для ванильных инструментов можно найти в разделе ToolMaterials
. Мы создадим отдельный класс для нашего материала:
public class PotatoToolMaterial implements ToolMaterial { [...] }
ToolMaterial
содержит ряд методов, которые вам необходимо будет реализовать:
Прочность
getDurability
определяет базовую прочность инструментов при использовании этого материала. В ваниле все инструменты одного и того же типа обладают одинаковой прочностью.
@Override public int getDurability() { return 500; }
Скорость копания
getMiningSpeedMultiplier
определяет, насколько быстры инструменты при добыче блоков. Для общего понимания масштаба скорость предметов из дерева составляет 2,0 F, а скорость предметов из алмазов - 8,0 F.
@Override public float getMiningSpeedMultiplier() { return 5.0F; }
Урон
getAttackDamage
возвращает базовый урон инструмента. Обратите внимание, что большинство инструментов запрашивают в своем конструкторе целочисленную сумму ущерба, что означает, что результирующий ущерб равен (float) materialDamage + (int) toolDamage + 1
. Если вы хотите, чтобы ваш инструмент полностью контролировал величину урона в своем конструкторе, вы можете заставить свой материал возвращать урон от атаки 0F.
@Override public float getAttackDamage() { return 3.0F; }
Уровень копания
getMiningLevel
задает уровень копания инструмента. Алмаз имеет уровень копания 3, а для добычи обсидиана требуется значение 3+.
@Override public int getMiningLevel() { return 2; }
Зачаровываемость
getEnchantability
определяет, насколько зачаровываемым является инструмент. Золотой инструмент имеет 22-ую зачаровываемость, в то время как Алмазный инструмент имеет 10-ую. Более высокая зачаровываемость означает лучшие (и более высокоуровневые) чары.
@Override public int getEnchantability() { return 15; }
Предмет для починки
getRepairIngredient
возращает Ingredient
, необходимый для ремонта инструмента на наковальне.
@Override public Ingredient getRepairIngredient() { return Ingredient.ofItems(Items.POTATO); }
ToolMaterial
не должен быть зарегистрирован. Хороший способ передать их инструментам, которые в них нуждаются, - это сохранить где-нибудь экземпляр (а затем ссылаться на него, когда он вам понадобится). В этом случае мы поместим наш экземпляр в начало класса ToolMaterial:
public class PotatoToolMaterial implements ToolMaterial { public static final PotatoToolMaterial INSTANCE = new PotatoToolMaterial(); [...] }
На PotatoToolMaterial
теперь можно ссылаться с помощью PotatoToolMaterial.INSTANCE
.
Создание инструмента
Для всех базовых классов инструментов (PickaxeItem
, ShovelItem
, HoeItem
, AxeItem
, SwordItem
) требуется ToolMaterial
, скорость атаки (float), дополнительная сумма урона от атаки (float для AxeItem; int для остальных), и экземпляр Item.Settings
.
public static ToolItem POTATO_SHOVEL = new ShovelItem(PotatoToolMaterial.INSTANCE, 1.5F, -3.0F, new Item.Settings().group(ItemGroup.TOOLS)); public static ToolItem POTATO_SWORD = new SwordItem(PotatoToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));
`PickaxeItem` , `HoeItem` и `AxeItem` имеют защищенные конструкторы, что означает, что вам нужно будет создавать свои собственные классы с общедоступными конструкторами:
public class CustomPickaxeItem extends PickaxeItem { public CustomPickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) { super(material, attackDamage, attackSpeed, settings); } }
Использование общедоступных классов:
public static ToolItem POTATO_PICKAXE = new CustomPickaxeItem(PotatoToolMaterial.INSTANCE, 1, -2.8F, new Item.Settings().group(ItemGroup.TOOLS)); public static ToolItem POTATO_AXE = new CustomAxeItem(PotatoToolMaterial.INSTANCE, 7.0F, -3.2F, new Item.Settings().group(ItemGroup.TOOLS)); public static ToolItem POTATO_HOE = new CustomHoeItem(PotatoToolMaterial.INSTANCE, 7, -3.2F, new Item.Settings().group(ItemGroup.TOOLS));
Если вы хотите добавить какие-либо специальные атрибуты или поведение к своему инструменту, создайте подкласс, который расширяет один из базовых классов инструментов, и переопределите все необходимые методы.
Регистрация предметов
Для краткого ознакомления с регистрацией предметов ознакомьтесь с руководством по предметам здесь.
Заставить ваш инструмент работать с не-ванильными блоками
Посетите последний раздел этой страницы