アイテムの追加 (1.14.4)

概要

特殊な機能を持たないアイテムを追加します。

動作確認

2020年4月1日

  • Minecraft 1.14.4
  • Forge 28.2.0

解説

TitaniumMod

TitaniumMod/src/main/java/com/tntmodders/titaniummod/TitaniumMod.java

package com.tntmodders.titaniummod;

import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;

@Mod(TitaniumMod.MOD_ID)
public class TitaniumMod {
    public static final String MOD_ID = "titaniummod";

    @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
    public static class RegistryEventSubscriber {
        @SubscribeEvent
        public static void registerItems(final RegistryEvent.Register<Item> event) {
            event.getRegistry().registerAll(Items.TITANIUM_INGOT);
        }
    }

    public static class Items {
        public static final Item TITANIUM_INGOT = new Item(new Item.Properties()
                .group(ItemGroup.MATERIALS))
                .setRegistryName("titanium_ingot");
    }
}

MODのプログラムをJavaで記述します。

package com.tntmodders.titaniummodには、実際に自分のMODを作る際は自分が保有するドメインを使います。ない場合は自分の名前など、他のプログラムと被らないものを使ってください1com.tntmoddersをあなたのMODのパッケージとして使わないでください。

MOD_IDmods.tomlに記載したものと一致する必要があります。すべて小文字にしてください。

ItemクラスのインスタンスはMinecraftのアイテムの種類を表します。耐久上限や最大スタック数など、アイテムの種類によって変わる性質を保持しています。バニラのアイテムはnet.minecraft.item.Itemsにすべて記述されています。

group(ItemGroup.MATERIALS)でクリエイティブタブ「その他」に表示されるよう指定します。この指定を行わなかった場合、検索タブにのみ表示されます。

ItemGroup内にあるバニラのクリエイティブタブの一覧
BUILDING_BLOCKS:建築ブロック
DECORATIONS:装飾ブロック
REDSTONE:レッドストーン
TRANSPORTATION:運送
MATERIALS:その他
MISC:その他(MATERIALSと同一)
FOOD:食料
TOOLS:道具
COMBAT:戦闘
BREWING:醸造

setRegistryName("titanium_ingot")でアイテムの登録名を指定します。アイテムIDはtitaniummod:titanium_ingotとなります。

モデル

TitaniumMod/src/main/resources/assets/titaniummod/models/item/titanium_ingot.json

{
  "parent": "item/generated",
  "textures": {
    "layer0": "titaniummod:item/titanium_ingot"
  }
}

アイテムモデルをリソースパックと同様の形式のJSONで記述します。

テクスチャ

TitaniumMod/src/main/resources/assets/titaniummod/textures/item/titanium_ingot.png

titanium_ingot.png

アイテムのアイコンになる16×16ピクセルのpng画像ファイルです。

英語翻訳

TitaniumMod/src/main/resources/assets/titaniummod/lang/en_us.json

{
  "item.titaniummod.titanium_ingot": "Titanium Ingot"
}

英語の翻訳をリソースパックと同様の形式のJSONで記述します。翻訳が設定されていない言語の代わりとしても表示されます。

日本語翻訳

TitaniumMod/src/main/resources/assets/titaniummod/lang/ja_jp.json

{
  "item.titaniummod.titanium_ingot": "チタンインゴット"
}

日本語の翻訳をリソースパックと同様の形式のJSONで記述します。文字コードはUTF-8で保存します。

過去の質問

アイテムIDを指定する方法はありますか?

MOD側から数値でアイテムIDやブロックIDを指定することはできません。

テクスチャが反映されません。

src/main/resources/assetsの下にあるtitaniummodフォルダは、MODのIDをすべて小文字にして入れてください。また、テクスチャが見つからなかったという内容のログが表示されるので、ファイル名が正しいか確認してください。

リンク


前:環境構築
次:ブロックの追加


  1. オファレンMODはtntmodders.comを取得する前に開発を始めたので、nahama.ofalenmodをパッケージ名にしています。 

2件のコメント

  1. pichipichi

    剣の場合どのような引数使えばいいのでしょうか

    • 赤砂蛇 凪浜

      TitaniumMod.java

      package com.tntmodders.titaniummod;
      
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemGroup;
      import net.minecraft.item.SwordItem;
      import net.minecraftforge.event.RegistryEvent;
      import net.minecraftforge.eventbus.api.SubscribeEvent;
      import net.minecraftforge.fml.common.Mod;
      
      @Mod(TitaniumMod.MOD_ID)
      public class TitaniumMod {
          public static final String MOD_ID = "titaniummod";
      
          @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
          public static class RegistryEventSubscriber {
              @SubscribeEvent
              public static void registerItems(final RegistryEvent.Register<Item> event) {
                  event.getRegistry().registerAll(Items.TITANIUM_INGOT, Items.TITANIUM_SWORD);
              }
          }
      
          public static class Items {
              public static final Item TITANIUM_INGOT = new Item(new Item.Properties()
                      .group(ItemGroup.MATERIALS))
                      .setRegistryName("titanium_ingot");
      
              public static final Item TITANIUM_SWORD = new SwordItem(
                      TitaniumModItemTier.TITANIUM,
                      3,
                      -2.4F,
                      new Item.Properties().group(ItemGroup.COMBAT)
              ).setRegistryName("titanium_sword");
          }
      }
      

      TitaniumModItemTier.java

      package com.tntmodders.titaniummod;
      
      import net.minecraft.item.IItemTier;
      import net.minecraft.item.crafting.Ingredient;
      import net.minecraft.util.LazyLoadBase;
      
      import java.util.function.Supplier;
      
      public enum TitaniumModItemTier implements IItemTier {
          TITANIUM(2, 250, 6.0F, 2.0F, 14, () -> {
              return Ingredient.fromItems(TitaniumMod.Items.TITANIUM_INGOT);
          });
      
          private final int harvestLevel;
          private final int maxUses;
          private final float efficiency;
          private final float attackDamage;
          private final int enchantability;
          private final LazyLoadBase<Ingredient> repairMaterial;
      
          TitaniumModItemTier(int harvestLevelIn, int maxUsesIn, float efficiencyIn, float attackDamageIn, int enchantabilityIn, Supplier<Ingredient> repairMaterialIn) {
              this.harvestLevel = harvestLevelIn;
              this.maxUses = maxUsesIn;
              this.efficiency = efficiencyIn;
              this.attackDamage = attackDamageIn;
              this.enchantability = enchantabilityIn;
              this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
          }
      
          public int getMaxUses() {
              return this.maxUses;
          }
      
          public float getEfficiency() {
              return this.efficiency;
          }
      
          public float getAttackDamage() {
              return this.attackDamage;
          }
      
          public int getHarvestLevel() {
              return this.harvestLevel;
          }
      
          public int getEnchantability() {
              return this.enchantability;
          }
      
          public Ingredient getRepairMaterial() {
              return this.repairMaterial.getValue();
          }
      }
      

      models/item/titanium_sword.json

      {
          "parent": "item/handheld",
          "textures": {
              "layer0": "titaniummod:item/titanium_sword"
          }
      }
      

      独自の素材による新しい剣をMODで追加したい場合、Itemの代わりにSwordItemのインスタンスを作り、登録する必要があります。

      バニラのコードではItems.IRON_SWORDなどが参考になると思います。アイテムの登録方法などが異なりますが、「ツール類の追加 (1.7.10)」の剣を追加する部分もご覧ください。

      詳しい解説は初級編で記事を書く予定です。

      (2020年4月23日更新:TitaniumModItemTier.TITANIUMのrepairMaterialを鉄インゴットからチタンインゴットに修正)

コメントはこちらです。(スパム対策の為コメントは手動承認になっています。未承認のコメントは表示されないので連投はお控え下さい。)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください