Table of Contents

アイテムの追加

導入

基本アイテムの追加は、 Mod 製作の最初のステップの 1 つです。 Item オブジェクトを作成して登録し、テクスチャを与える必要があります。アイテムに追加の動作を追加するには、カスタムの Item クラスが必要です。 このチュートリアルと今後のすべてのチュートリアルでは、 “tutorial” 名前空間がプレースホルダーとして使用されます。 別の modid がある場合は、代わりに自由に使用してください。

アイテムの登録

まず、Item のインスタンスを作成します。これを初期化クラスの先頭に格納します。 コンストラクターは、Item.Settings (または FabricItemSettings) インスタンスを受け取ります。これは、インベントリカテゴリ、耐久度、スタック数などのアイテムのプロパティを設定するために使用されます。

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // 新しいアイテムのインスタンス
  4. public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings());
  5. [...]
  6. }
新しいコンテンツを登録するには、バニラのレジストリシステムを使用します。基本的な構文は Registry#register(Registry Type, Identifier, Content) です。レジストリタイプは Registry クラスに静的フィールドとして格納され、識別子はコンテンツにラベルを付けるものです。コンテンツは、追加するもののインスタンスです。これは、初期化中に発生する限り、どこでも呼び出すことができます。
  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // 新しいアイテムのインスタンス
  4. public static final Item CUSTOM_ITEM = new Item(new FabricItemSettings());
  5.  
  6. @Override
  7. public void onInitialize() {
  8. Registry.register(Registries.ITEM, new Identifier("tutorial", "custom_item"), CUSTOM_ITEM);
  9. }
  10. }
新しいアイテムが Minecraft に追加されました。 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 オブジェクトが必要です。

  1. public class CustomItem extends Item {
  2.  
  3. public CustomItem(Settings settings) {
  4. super(settings);
  5. }
  6. }

カスタムアイテムクラスの実用的な使用例は、アイテムを使用するときに音を鳴らすことです:

  1. public class CustomItem extends Item {
  2.  
  3. public CustomItem(Settings settings) {
  4. super(settings);
  5. }
  6.  
  7. @Override
  8. public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
  9. playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
  10. return TypedActionResult.success(playerEntity.getStackInHand(hand));
  11. }
  12. }

古い Item オブジェクトを新しいアイテムクラスのインスタンスに置き換えます:

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // an instance of our new item
  4. public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings());
  5. [...]
  6. }
すべてを正しく行った場合、アイテムを使用するとサウンドが再生されるはずです。

アイテムのスタック数を変更したい場合はどうすればよいですか?

このためには、FabricItemSettings 内で maxCount(int size) を使用して最大スタック数を指定します。アイテムが破損する可能性がある場合、最大スタック数を指定できないことに注意してください。そうしないと、ゲームが RuntimeException をスローします。

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // 最大スタック数が 16 の新しいアイテムのインスタンス
  4. public static final CustomItem CUSTOM_ITEM = new CustomItem(new FabricItemSettings().maxCount(16));
  5. [...]
  6. }

あなたのアイテムを燃料または堆肥化可能にする

かまどで使用できるように燃料にしたい場合は、FuelRegistry を使用できます。たとえば、次のようになります:

public class ExampleMod implements ModInitializer {
    [...]
 
    @Override
    public void onInitialize() {
        [...]
        FuelRegistry.INSTANCE.add(CUSTOM_ITEM, 300)
    }
}

同様に、CompostingChanceRegistry を使用して、コンポスターで堆肥化可能にすることができます。

次のステップ

アイテムを独自の ItemGroup に追加する