User Tools

Site Tools


ru:tutorial:tools

Добавление инструментов

Создание ToolMaterial

Для инструментов требуется ToolMaterial, который определяет следующее поведение:

  • прочность
  • скорость копания
  • урон
  • уровень копания
  • зачаровываемость
  • предмет для починки

Другими словами, Tool Materials определяет базовую функциональность base для инструментов этого типа, и инструменты могут использовать значения, предоставляемые материалом, или использовать свои собственные.

Материалы для ванильных инструментов можно найти в разделе ToolMaterials. Мы создадим отдельный класс для нашего материала:

  1. public class PotatoToolMaterial implements ToolMaterial {
  2.  
  3. [...]
  4. }

ToolMaterial содержит ряд методов, которые вам необходимо будет реализовать:

Прочность

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

  1. @Override
  2. public int getDurability() {
  3. return 500;
  4. }

Скорость копания

getMiningSpeedMultiplier определяет, насколько быстры инструменты при добыче блоков. Для общего понимания масштаба скорость предметов из дерева составляет 2,0 F, а скорость предметов из алмазов - 8,0 F.

  1. @Override
  2. public float getMiningSpeedMultiplier() {
  3. return 5.0F;
  4. }

Урон

getAttackDamage возвращает базовый урон инструмента. Обратите внимание, что большинство инструментов запрашивают в своем конструкторе целочисленную сумму ущерба, что означает, что результирующий ущерб равен (float) materialDamage + (int) toolDamage + 1. Если вы хотите, чтобы ваш инструмент полностью контролировал величину урона в своем конструкторе, вы можете заставить свой материал возвращать урон от атаки 0F.

  1. @Override
  2. public float getAttackDamage() {
  3. return 3.0F;
  4. }

Уровень копания

getMiningLevel задает уровень копания инструмента. Алмаз имеет уровень копания 3, а для добычи обсидиана требуется значение 3+.

  1. @Override
  2. public int getMiningLevel() {
  3. return 2;
  4. }

Зачаровываемость

getEnchantability определяет, насколько зачаровываемым является инструмент. Золотой инструмент имеет 22-ую зачаровываемость, в то время как Алмазный инструмент имеет 10-ую. Более высокая зачаровываемость означает лучшие (и более высокоуровневые) чары.

  1. @Override
  2. public int getEnchantability() {
  3. return 15;
  4. }

Предмет для починки

getRepairIngredient возращает Ingredient, необходимый для ремонта инструмента на наковальне.

  1. @Override
  2. public Ingredient getRepairIngredient() {
  3. return Ingredient.ofItems(Items.POTATO);
  4. }

ToolMaterial не должен быть зарегистрирован. Хороший способ передать их инструментам, которые в них нуждаются, - это сохранить где-нибудь экземпляр (а затем ссылаться на него, когда он вам понадобится). В этом случае мы поместим наш экземпляр в начало класса ToolMaterial:

  1. public class PotatoToolMaterial implements ToolMaterial {
  2.  
  3. public static final PotatoToolMaterial INSTANCE = new PotatoToolMaterial();
  4.  
  5. [...]
  6. }

На PotatoToolMaterial теперь можно ссылаться с помощью PotatoToolMaterial.INSTANCE.

Создание инструмента

Для всех базовых классов инструментов (PickaxeItem, ShovelItem, HoeItem, AxeItem, SwordItem) требуется ToolMaterial, скорость атаки (float), дополнительная сумма урона от атаки (float для AxeItem; int для остальных), и экземпляр Item.Settings.

  1. public static ToolItem POTATO_SHOVEL = new ShovelItem(PotatoToolMaterial.INSTANCE, 1.5F, -3.0F, new Item.Settings().group(ItemGroup.TOOLS));
  2. public static ToolItem POTATO_SWORD = new SwordItem(PotatoToolMaterial.INSTANCE, 3, -2.4F, new Item.Settings().group(ItemGroup.COMBAT));

`PickaxeItem` , `HoeItem` и `AxeItem` имеют защищенные конструкторы, что означает, что вам нужно будет создавать свои собственные классы с общедоступными конструкторами:

  1. public class CustomPickaxeItem extends PickaxeItem {
  2. public CustomPickaxeItem(ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
  3. super(material, attackDamage, attackSpeed, settings);
  4. }
  5. }

Использование общедоступных классов:

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));

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

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

Для краткого ознакомления с регистрацией предметов ознакомьтесь с руководством по предметам здесь.

Заставить ваш инструмент работать с не-ванильными блоками

Посетите последний раздел этой страницы

ru/tutorial/tools.txt · Last modified: 2022/03/23 18:02 by 127.0.0.1