Table of Contents

道具の追加

道具材料の作成

ツールには、次の動作を定義する ToolMaterial が必要です:

つまり、道具材料はその種類の道具の基本機能を定義し、道具は材料によって提供される値を使用するか、独自の値を使用するかを選択できます。

バニラの道具材料は ToolMaterials にあります。材料用に別のクラスを作成します:

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

ToolMaterial には、実装する必要があるいくつかのメソッドがあります:

耐久度

getDurability は、ツールがこの道具を使用するときの基本的な耐久度を定義します。バニラでは、同じ種類の道具はすべて同じ耐久度を持っています。

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

採掘速度

getMiningSpeedMultiplier は、道具でブロックを採掘するときの速度を定義します。一般的なスケール感としては、木 は 2.0F、ダイヤモンド は 8.0F の速度です。

  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 は登録する必要はありません。それらを必要とする道具にそれらを渡す良い方法は、インスタンスをどこかに保持することです(そして、必要なときにそれを参照します)。この場合、インスタンスを道具材料クラスの先頭に配置します。

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

PotatoToolMaterialPotatoToolMaterial.INSTANCE で参照できるようになりました。

道具の作成

すべての基本道具クラス(PickaxeItemShovelItemHoeItemAxeItemSwordItem)には ToolMaterial、攻撃速度(float)、追加の攻撃力(AxeItem は float、残りは int)、および Item.Settings インスタンスが必要です。

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

PickaxeItemHoeItem および AxeItem には保護されたコンストラクターがあります。つまり、 public コンストラクターを使用して独自のクラスを作成する必要があります:

  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 クラスの使用:

public static ToolItem POTATO_PICKAXE = new CustomPickaxeItem(PotatoToolMaterial.INSTANCE, 1, -2.8F, new Item.Settings().method_7892(ItemGroup.field_7930));
public static ToolItem POTATO_AXE = new CustomAxeItem(PotatoToolMaterial.INSTANCE, 7.0F, -3.2F, new Item.Settings().method_7892(ItemGroup.field_7930));
public static ToolItem POTATO_HOE = new CustomHoeItem(PotatoToolMaterial.INSTANCE, 7, -3.2F, new Item.Settings().method_7892(ItemGroup.field_7930));

道具に特別な属性または動作を追加する場合は、基本道具クラスの 1 つを拡張するサブクラスを作成し、必要なメソッドをオーバーライドします。

道具の登録

アイテム登録のまとめについては、 アイテムのチュートリアル をお読みください。

道具を一般的ではないブロックで動作

https://fabricmc.net/wiki/tutorial:mining_levels の最後のセクションにアクセスしてください。