Table of Contents
アイテムの追加
導入
基本アイテムの追加は、 Mod 製作の最初のステップの 1 つです。 Item
オブジェクトを作成して登録し、テクスチャを与える必要があります。アイテムに追加の動作を追加するには、カスタムの Item
クラスが必要です。 このチュートリアルと今後のすべてのチュートリアルでは、 “tutorial” 名前空間がプレースホルダーとして使用されます。 別の modid がある場合は、代わりに自由に使用してください。
アイテムの登録
まず、Item のインスタンスを作成します。これを初期化クラスの先頭に格納します。 コンストラクターは、Item.Settings
(または FabricItemSettings
) インスタンスを受け取ります。これは、インベントリカテゴリ、耐久度、スタック数などのアイテムのプロパティを設定するために使用されます。
新しいコンテンツを登録するには、バニラのレジストリシステムを使用します。基本的な構文は
public class ExampleMod implements ModInitializer { // 新しいアイテムのインスタンス public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings()); [...] }
Registry#register(Registry Type, Identifier, Content)
です。レジストリタイプは Registry
クラスに静的フィールドとして格納され、識別子はコンテンツにラベルを付けるものです。コンテンツは、追加するもののインスタンスです。これは、初期化中に発生する限り、どこでも呼び出すことができます。
新しいアイテムが Minecraft に追加されました。
public class ExampleMod implements ModInitializer { // 新しいアイテムのインスタンス public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings()); @Override public void onInitialize() { } }
runClient
Gradle タスクを実行して、動作を確認します。
アイテムテクスチャの追加
アイテムのテクスチャを登録するには、アイテムモデルの .json ファイルとテクスチャイメージが必要です。これらをリソースディレクトリに追加する必要があります。それぞれの直接パスは次のとおりです:
アイテムモデル: .../resources/assets/tutorial/models/item/custom_item.json アイテムテクスチャ: .../resources/assets/tutorial/textures/item/custom_item.png
サンプルテクスチャは こちら にあります。
最初のステップでアイテムを適切に登録した場合、ゲームはテクスチャファイルが見つからないというメッセージを次のように表示します:
[Server-Worker-1/WARN]: Unable to load model: 'tutorial:custom_item#inventory' referenced from: tutorial:custom_item#inventory: java.io.FileNotFoundException: tutorial:models/item/custom_item.json
便利なことに、アセットが見つかると予想される場所を正確に教えてくれます。……疑わしい場合は、ログを確認してください。
基本的なアイテムモデルテンプレートは次のとおりです:
{ "parent": "item/generated", "textures": { "layer0": "tutorial:item/custom_item" } }
アイテムの親は、ハンドでのレンダリング方法を変更し、インベントリ内のブロックアイテムなどに役立ちます。 “item/handheld” は、テクスチャの左下から保持されるツールに使用されます。 textures/layer0 は画像ファイルの場所です。
最終的なテクスチャの結果:
アイテムクラスの作成
アイテムに追加の動作を追加するには、Item クラスを作成する必要があります。デフォルトのコンストラクタには、Item.Settings オブジェクトが必要です。
public class CustomItem extends Item { public CustomItem(Settings settings) { super(settings); } }
カスタムアイテムクラスの実用的な使用例は、アイテムを使用するときに音を鳴らすことです:
public class CustomItem extends Item { public CustomItem(Settings settings) { super(settings); } @Override public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) { playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F); return TypedActionResult.success(playerEntity.getStackInHand(hand)); } }
古い Item オブジェクトを新しいアイテムクラスのインスタンスに置き換えます:
すべてを正しく行った場合、アイテムを使用するとサウンドが再生されるはずです。
public class ExampleMod implements ModInitializer { // an instance of our new item public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings()); [...] }
アイテムのスタック数を変更したい場合はどうすればよいですか?
このためには、FabricItemSettings
内で maxCount(int size)
を使用して最大スタック数を指定します。アイテムが破損する可能性がある場合、最大スタック数を指定できないことに注意してください。そうしないと、ゲームが RuntimeException をスローします。
public class ExampleMod implements ModInitializer { // 最大スタック数が 16 の新しいアイテムのインスタンス public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().maxCount(16)); [...] }
あなたのアイテムを燃料または堆肥化可能にする
かまどで使用できるように燃料にしたい場合は、FuelRegistry
を使用できます。たとえば、次のようになります:
public class ExampleMod implements ModInitializer { [...] @Override public void onInitialize() { [...] FuelRegistry.INSTANCE.add(CUSTOM_ITEM, 300) } }
同様に、CompostingChanceRegistry
を使用して、コンポスターで堆肥化可能にすることができます。