Table of Contents

防具の追加

導入

防具は通常のブロックやアイテムより実装が少し複雑ですが、一度理解すれば簡単に実装できます。防具を追加するには、まず CustomArmorMaterial 〔カスタム防具材料〕クラスを作成してから、アイテムを登録します。また、それらをテクスチャリングする方法も見ていきます。このドキュメントの最後に、防具にノックバックを追加する方法を説明する特別な章があります。これは、メソッドがミックスイン(現在 1.16.3)を介してのみアクセスできるためです。

このドキュメントの例は、 この Mod (GitHub リポジトリ) にあります。

防具材料クラスの作成

新しい防具には新しい名前(および防御点や耐久度などの追加要素)を設定する必要があるため、 CustomArmorMaterial の新しいクラスを作成する必要があります。

このクラスは ArmorMaterial を実装し、防御点(PROTECTION_VALUES と呼ばれる)に値を割り当てることから始めます。以降の引数はすべて @Override を使用します。

  1. public class CustomArmorMaterial implements ArmorMaterial {
  2. private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
  3. private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
  4.  
  5. // A がブーツ、 B がレギンス、 C がチェストプレート、 D がヘルメットです。
  6. // 参考までに、革の防具は {1, 2, 3, 1}、 ダイヤモンドとネザライトの防具は {3, 6, 8, 3} を使用しています
  7. }

次の引数は次のように定義されます(名前は気にしないでください。以下にどのように実装するかが表示されます):

  1. method_7696: 防具が壊れるまでに何回ヒットできるか。 'BASE_DURABILITY' に書いた int 〔32 ビット整数型〕を使って計算します。革は 5、ダイヤモンドは 33、ネザライトは 37 です。
  2. method_7697: すでに上で書いた 'PROTECTION_VALUES' を呼び出します。
  3. getEnchantability: 防具がエンチャントの本で高レベルまたは複数のエンチャントを取得できる可能性です。
  4. SoundEvent getEquipSound: バニラの防具で使用される標準は SoundEvents.ITEM_ARMOR_EQUIP_X で、X は防具の種類です。
  5. Ingredient getRepairIngredient: 金床で防具を修理するために使用するアイテムが返されます。バニラのアイテムまたは独自のアイテムのいずれかです。
  6. String getName: 防具の親アイテムが返されます。ダイヤモンドの防具なら “ダイヤモンド” ですね。
  7. getToughness: これは、価値の高い攻撃に対して鎧がより耐久性を持つ 2 番目の保護値です。 値は 'X.0F' になります

そして、1.16 で導入された新しい値があります

  1. getKnockbackResistance: この値は 0 のままにしておきます。実装したい場合は、「0.XF」と書きます(X は、必要なノックバック保護の量です)。後でそれを機能させる方法を教えます。

すべての変数を X または A、 B、 C、 D として記述したままにします。これらの引数を使用すると、次のようになります:

  1. public class CustomArmorMaterial implements ArmorMaterial {
  2. private static final int[] BASE_DURABILITY = new int[] {13, 15, 16, 11};
  3. private static final int[] PROTECTION_VALUES = new int[] {A, B, C, D};
  4.  
  5. @Override
  6. public int method_7696(EquipmentSlot slot) {
  7. return BASE_DURABILITY[slot.getEntitySlotId()] * X;
  8. }
  9.  
  10. @Override
  11. public int method_7697(EquipmentSlot slot) {
  12. return PROTECTION_VALUES[slot.getEntitySlotId()];
  13. }
  14.  
  15. @Override
  16. public int getEnchantability() {
  17. return X;
  18. }
  19.  
  20. @Override
  21. public SoundEvent getEquipSound() {
  22. return SoundEvents.ITEM_ARMOR_EQUIP_X;
  23. }
  24.  
  25. @Override
  26. public Ingredient getRepairIngredient() {
  27. return Ingredient.ofItems(RegisterItems.X);
  28. }
  29.  
  30. @Override
  31. public String getName() {
  32. // すべて小文字にする必要があります
  33. return "name";
  34. }
  35.  
  36. @Override
  37. public float getToughness() {
  38. return X.0F;
  39. }
  40.  
  41. @Override
  42. public float getKnockbackResistance() {
  43. return 0.XF;
  44. }
  45. }

防具材料クラスの基本が理解できたので、防具アイテムを新しいクラスに登録しましょう。

防具アイテムの作成

新しい防具を実装するために、 RegisterItems という新しいクラスを作成します。これは、たとえば、インゴットのような新しいアイテムを作成する場合にツールを登録する場所にもなります(これを “Custom_Material” と呼びます)。この設定により、アイテムは新しいクリエイティブタブにも配置されますが、その部分は自由に削除できます。

グループの構文は .method_7892(YourModName.YOUR_MOD_NAME_BUT_IN_CAPS_GROUP) です。これを ExampleMod と呼びます:

  1. public class RegisterItems {
  2.  
  3. public static final ArmorMaterial CUSTOM_ARMOR_MATERIAL = new CustomArmorMaterial();
  4. public static final Item CUSTOM_MATERIAL = new CustomMaterialItem(new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  5. // 新しい素材を作成した場合は、ここに注意してください。
  6. public static final Item CUSTOM_MATERIAL_HELMET = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.HEAD, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  7. public static final Item CUSTOM_MATERIAL_CHESTPLATE = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.CHEST, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  8. public static final Item CUSTOM_MATERIAL_LEGGINGS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.LEGS, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  9. public static final Item CUSTOM_MATERIAL_BOOTS = new ArmorItem(CUSTOM_ARMOR_MATERIAL, EquipmentSlot.FEET, new Item.Settings().method_7892(ExampleMod.EXAMPLE_MOD_GROUP));
  10.  
  11. }

アイテムが適切に作成されたので、アイテムを登録して適切な名前を付けましょう。最初のパラメーターは名前空間であり、これは Mod ID であり、次にアイテムに付けたい名前です。

最後の ArmorItem のすぐ下にこれを書き込みます。

  1. public static void register() {
  2. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material"), CUSTOM_MATERIAL);
  3. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_helmet"), CUSTOM_MATERIAL_HELMET);
  4. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_chestplate"), CUSTOM_MATERIAL_CHESTPLATE);
  5. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_leggings"), CUSTOM_MATERIAL_LEGGINGS);
  6. Registry.register(Registry.field_11142, new Identifier("examplemod", "custom_material_boots"), CUSTOM_MATERIAL_BOOTS);
  7. }

防具アイテムが完成しました。次に、メインクラスでレジストリを呼び出します(そして、新しいグループに注釈を付けます)。

  1. public static final ItemGroup EXAMPLE_MOD_GROUP = FabricItemGroupBuilder.create(
  2. new Identifier("examplemod", "example_mod_group"))
  3. .icon(() -> new ItemStack(RegisterItems.CUSTOM_MATERIAL)) // これは作成した新素材のモデルをアイコンとして使っていますが、好きなように参照できます
  4. .build();
  5.  
  6. @Override
  7. public void onInitialize() {
  8. RegisterItems.register();
  9. }

それでおしまい!アーマーはゲーム内に存在し、まだテクスチャはありませんが、存在し、 /give コマンドで与えることができます。

次に、各ピースにテクスチャを割り当てます。

テクスチャの割り当て

以下のことを行っていると仮定します

そして、それらを各防具アイテムに割り当てます。

以下は、すべての防具アイテムで同じである必要があります。使用するパーツを変更するだけです。この例ではヘルメットを使用します。

resources/assets/examplemod/models/item/custom_material_helmet.json
{
	"parent": "item/generated",
	"textures": {
		"layer0": "examplemod:item/custom_material_helmet"
	}
}

すべての防具アイテムで繰り返します。

通常、 Mod のテクスチャは resources/assets/<modid> の下にありますが、防具のテクスチャは具体的には minecraft ディレクトリにあります: 装着している防具にテクスチャを与えるには、X_layer_1.png と X_layer_2.png (X は防具材料クラスで選択した引数 getName)を 'resources/assets/minecraft/textures/models/armor' に配置します。

すべてに従えば、完全な防具セットを手に入れることができるはずです!