Help us understand the problem. What is going on with this article?

[Java]MinecraftのModを作成しよう 1.14.4【3. クリエイティブタブの追加】

(この記事は一連の解説記事の一つになります)

先頭記事:入門編
前の記事:2. ブロックの追加
次の記事:4. ツールの追加

クリエイティブタブの追加

ここまでアイテムとブロックを追加してきましたが、クリエイティブにおいてバニラ1 のアイテムとおなじタブに表示されるのは少し変な気がします。 それに、追加アイテムは独自のタブにまとまっていた方が何かと便利です。ここでは自分のMod用のクリエイティブタブを追加します。

\src\main\java\jp\koteko\example_mod\
   ├ ExampleItemGroup.java
   ├ ExampleMod.java
   └ lists
ExampleItemGroup.java
package jp.koteko.example_mod;

import jp.koteko.example_mod.lists.ItemList;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

public class ExampleItemGroup extends ItemGroup {
    public static final ExampleItemGroup DEFAULT = new ExampleItemGroup();

    public ExampleItemGroup() {
        super("example_mod");
    }

    @Override
    @OnlyIn(Dist.CLIENT)
    public ItemStack createIcon() {
        return new ItemStack(ItemList.ExampleIngot);
    }
}

ItemGroupを継承した独自のクラスを定義します。createIconでタブのアイコンを設定します(このメソッドは必須です)。なお、ここで指定した"example_mod"はModIDではなく、このItemGroupの内部IDです。

このタブを使うように、既存の追加アイテムの設定を変更します。

ItemList.java
// ...
import jp.koteko.example_mod.ExampleItemGroup; // 追加
//import net.minecraft.item.ItemGroup; // 削除
// ...
@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ItemList {
    // groupの引数を変更
    public static Item ExampleIngot = new Item(new Item.Properties().group(ExampleItemGroup.DEFAULT))
            .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_ingot"));
    // ...
}

BlockList.java
// ...
import jp.koteko.example_mod.ExampleItemGroup; // 追加
//import net.minecraft.item.ItemGroup; // 削除
// ...
@Mod.EventBusSubscriber(modid = ExampleMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class BlockList {
    // ...
    // groupの引数を変更
    @SubscribeEvent
    public static void registerBlockItems(RegistryEvent.Register<Item> event) {
        event.getRegistry().registerAll(
                new BlockItem(ExampleBlock, new Item.Properties().group(ExampleItemGroup.DEFAULT))
                        .setRegistryName(new ResourceLocation(ExampleMod.MOD_ID, "example_block"))
        );
    }
}

続いて、このままだと表示名が設定されていないので、langファイルに追加します。

en_us.json
{
  "itemGroup.example_mod": "Example Mod",
  "item.example_mod.example_ingot": "Example Ingot",
  "block.example_mod.example_block": "Example Block"
}
ja_jp.json
{
  "itemGroup.example_mod": "例Mod",
  "item.example_mod.example_ingot": "例インゴット",
  "block.example_mod.example_block": "例ブロック"
}

ゲームを起動します。
キャプチャ.PNG
自分のModだけの新しいタブが追加できました。

参考

Minecraft 1.14.4 Forge Modの作成 その5 【クリエイティブタブの追加】

次の記事

4. ツールの追加


  1. Modが入っていない素のマイクラのこと 

koteko
Rubyかわいい。twitter(@Number13_koteko)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away