====== 道具の追加 ====== ==== 道具材料の作成 ==== ツールには、次の動作を定義する '''' が必要です: * 耐久度 * 採掘速度 * 攻撃力 * 採掘レベル * エンチャント適性 * 修繕の材料 つまり、道具材料はその種類の道具の//基本//機能を定義し、道具は材料によって提供される値を使用するか、独自の値を使用するかを選択できます。 バニラの道具材料は '''' にあります。材料用に別のクラスを作成します: public class PotatoToolMaterial implements class_1832 { [...] } '''' には、実装する必要があるいくつかのメソッドがあります: === 耐久度 === '''' は、ツールがこの道具を使用するときの基本的な耐久度を定義します。バニラでは、同じ種類の道具はすべて同じ耐久度を持っています。 @Override public int method_8025() { return 500; } === 採掘速度 === '''' は、道具でブロックを採掘するときの速度を定義します。一般的なスケール感としては、木 は 2.0F、ダイヤモンド は 8.0F の速度です。 @Override public float method_8027() { return 5.0F; } === 攻撃力 === '''' は、道具の基本ダメージを返します。 //ほとんどの//道具は、コンストラクターで整数のダメージ量を要求することに注意してください。これは、結果として生じるダメージが ''(float) materialDamage + (int) toolDamage + 1'' であることを意味します。コンストラクターで道具のダメージ量を完全に制御したい場合は、素材に 0F の攻撃ダメージを返させることができます。 @Override public float method_8028() { return 3.0F; } === 採掘レベル === '''' は、道具の採掘レベルを設定します。ダイヤモンドの採掘レベルは 3 で、黒曜石を採掘するにはレベル 3 以上の値が必要です。 @Override public int method_8024() { return 2; } === エンチャント適性 === '''' は、道具がどの程度エンチャント可能かを定義します。金のエンチャント適性は 22 で、ダイヤモンドは 10 です。エンチャント適性が高いほど、エンチャントのレベルが高くなります。 @Override public int method_8026() { return 15; } === 修繕の材料 === '''' は、金床で道具を修繕するために必要な '''' を返します。 @Override public class_1856 method_8023() { return class_1856.method_8091(class_1802.field_8567); } '''' は登録する必要は//ありません//。それらを必要とする道具にそれらを渡す良い方法は、インスタンスをどこかに保持することです(そして、必要なときにそれを参照します)。この場合、インスタンスを道具材料クラスの先頭に配置します。 public class PotatoToolMaterial implements class_1832 { public static final PotatoToolMaterial INSTANCE = new PotatoToolMaterial(); [...] } ''PotatoToolMaterial'' は ''PotatoToolMaterial.INSTANCE'' で参照できるようになりました。 ==== 道具の作成 ==== すべての基本道具クラス(''''、''''、''''、''''、'''')には ''''、攻撃速度(float)、追加の攻撃力( は float、残りは int)、および '''' インスタンスが必要です。 public static class_1831 POTATO_SHOVEL = new class_1821(PotatoToolMaterial.INSTANCE, 1.5F, -3.0F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_SWORD = new class_1829(PotatoToolMaterial.INSTANCE, 3, -2.4F, new class_1792.class_1793().method_7892(class_1761.field_7916)); '''' 、 '''' および '''' には保護されたコンストラクターがあります。つまり、 public コンストラクターを使用して独自のクラスを作成する必要があります: public class CustomPickaxeItem extends class_1810 { public CustomPickaxeItem(class_1832 material, int attackDamage, float attackSpeed, class_1793 settings) { super(material, attackDamage, attackSpeed, settings); } } public クラスの使用: public static class_1831 POTATO_PICKAXE = new CustomPickaxeItem(PotatoToolMaterial.INSTANCE, 1, -2.8F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_AXE = new CustomAxeItem(PotatoToolMaterial.INSTANCE, 7.0F, -3.2F, new class_1792.class_1793().method_7892(class_1761.field_7930)); public static class_1831 POTATO_HOE = new CustomHoeItem(PotatoToolMaterial.INSTANCE, 7, -3.2F, new class_1792.class_1793().method_7892(class_1761.field_7930)); 道具に特別な属性または動作を追加する場合は、基本道具クラスの 1 つを拡張するサブクラスを作成し、必要なメソッドをオーバーライドします。 ==== 道具の登録 ==== アイテム登録のまとめについては、 [[tutorial:items|アイテムのチュートリアル]] をお読みください。 ==== 道具を一般的ではないブロックで動作 ==== https://fabricmc.net/wiki/tutorial:mining_levels の最後のセクションにアクセスしてください。