クリエイティブタブの追加 (1.16.5)

概要

MODのアイテムを表示するためのクリエイティブタブを追加します。

GitHubでこの記事の時点の状態を確認できます。

前提

動作確認

2021年3月22日

  • Minecraft 1.16.5
  • Forge 36.1.0

解説

TitaniumMod

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

package com.tntmodders.titaniummod;

import net.minecraft.block.AbstractBlock;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialColor;
import net.minecraft.data.DataGenerator;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.ToolType;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.GatherDataEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

import java.util.Collection;

@Mod(TitaniumMod.MOD_ID)
public class TitaniumMod {
    public static final String MOD_ID = "titaniummod";
    public static final ItemGroup TAB = new ItemGroup("titaniummod") {
        @Override
        public ItemStack makeIcon() {
            return new ItemStack(Items.TITANIUM_INGOT.get());
        }
    };

// 省略

    public static class Items {
        private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
        public static final RegistryObject<Item> TITANIUM_BLOCK = ITEMS.register("titanium_block", () -> new BlockItem(Blocks.TITANIUM_BLOCK.get(), new Item.Properties()
                .tab(TitaniumMod.TAB)));
        public static final RegistryObject<Item> TITANIUM_INGOT = ITEMS.register("titanium_ingot", () -> new Item(new Item.Properties()
                .tab(TitaniumMod.TAB)));

        public static void register(IEventBus eventBus) {
            ITEMS.register(eventBus);
        }
    }
}

ItemGroupを継承したクラスのインスタンスを生成すると、クリエイティブタブが追加されます。コンストラクタに渡した文字列は翻訳の指定に使うので、他のMODとかぶらないようにしましょう。

makeIconにより、タブのアイコンとなるアイテムを指定します。

バニラのものと同様、Item.Properties.tabに渡せば、アイテムをクリエイティブタブに登録できます。

英語翻訳

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

{
  "itemGroup.titaniummod": "Titanium Mod",
  "block.titaniummod.titanium_block": "Block of Titanium",
  "item.titaniummod.titanium_ingot": "Titanium Ingot"
}

itemGroup.に、ItemGroupのコンストラクタに渡した文字列をつなげると翻訳を指定できます。日本語でも同様なのでja_jp.jsonは省略します。

TitaniumModEnUsLanguageProvider

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

package com.tntmodders.titaniummod;

import net.minecraft.data.DataGenerator;
import net.minecraftforge.common.data.LanguageProvider;

public class TitaniumModEnUsLanguageProvider extends LanguageProvider {
    public TitaniumModEnUsLanguageProvider(DataGenerator gen, String modId) {
        super(gen, modId, "en_us");
    }

    @Override
    protected void addTranslations() {
        add("itemGroup.titaniummod", "Titanium Mod");
        add(TitaniumMod.Blocks.TITANIUM_BLOCK.get(), "Block of Titanium");
        add(TitaniumMod.Items.TITANIUM_INGOT.get(), "Titanium Ingot");
    }
}

翻訳ファイルを自動生成する場合は、add("itemGroup.titaniummod", "Titanium Mod")のように、翻訳対象を文字列で指定します。日本語でも同様です。

レシピの進捗

レシピの進捗は、完成品のクリエイティブタブによってディレクトリが分けられています。例えば、チタンブロックのレシピの進捗はresources/data/titaniummod/advancements/recipes/titaniummod/titanium_block.jsonに移動します。自動生成の場合は、「runData」を実行すれば移動されます。

Data Packのディレクトリ名をすべて小文字にするため、ItemGroupのコンストラクタに大文字が入った文字列を渡す場合は、setRecipeFolderNameで上書きしましょう。バニラの「建築ブロック」タブであるItemGroup.TAB_BUILDING_BLOCKSを確認してください。

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

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