概要
MODのアイテムを表示するためのクリエイティブタブを追加します。
前提
- 入門編すべて
- JSONファイルの自動生成(任意)
動作確認
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
を確認してください。