前回に引き続き、MinecraftのNeoForge向けMod作成についてのブログ記事となります。
今回は原石追加編として、アイテムとして「謎の原石」を追加します。原石ですので、ワールド配置はできず、手に持ったり投げたり、チェストに入れたりができます。また、前回追加した謎のブロックを破壊した際に、ドロップするよう設定します。
今回の対象バージョンは前回に引き続きMinecraft:1.21.4、NeoForge:21.1.114-betaです。なお、ブログ記事中に出てくるパスに「mod_id」などが含まれている場合がありますので必要に応じて適宜読み替えてください。
例:src/main/java/com/hashibiro/kamomod → src/main/java/com/test/samplemod
前回のブログ記事は「MinecraftのNeoForge向けMod作成:ブロック追加編」です。
ソースの編集
「謎の原石」を追加するためソースコードを追加します。また、前回追加した「謎のブロック」に破壊されるまでの時間を追加設定し、ゲーム中の動きをそれっぽくします。
@Mod(KamoMod.MODID)
public class KamoMod
{
// 参照用MOD ID
public static final String MODID = "kamomod";
// 登録用
public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID);
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID);
// ブロック追加と、追加ブロックをもとにしたアイテムの追加
public static final DeferredBlock<Block> MYSTERY_BLOCK = BLOCKS.registerSimpleBlock("mystery_block",
BlockBehaviour.Properties.of().
destroyTime(1). // 破壊されるまでの時間を追加設定 ★
mapColor(MapColor.COLOR_GRAY));
public static final DeferredItem<BlockItem> MYSTERY_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("mystery_block", MYSTERY_BLOCK);
// 謎の原石追加 ★
public static final DeferredItem<Item> MYSTERY_RAW = ITEMS.registerSimpleItem("mystery_raw");
// クリエイティブモードのタブ登録用
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);
// 設定と、タブに追加アイテムを登録
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> EXAMPLE_TAB = CREATIVE_MODE_TABS.register("kamomod_tab",
() -> CreativeModeTab.builder()
.title(Component.translatable("itemGroup.kamomod"))
.withTabsBefore(CreativeModeTabs.COMBAT)
.icon(() -> MYSTERY_BLOCK_ITEM.get().getDefaultInstance())
.displayItems((parameters, output) -> {
output.accept(MYSTERY_BLOCK_ITEM.get());
output.accept(MYSTERY_RAW.get()); // タブに謎の原石を追加 ★
}).build());
// コンストラクタ
public KamoMod(IEventBus modEventBus, ModContainer modContainer) {
// IEventBusに登録
BLOCKS.register(modEventBus);
ITEMS.register(modEventBus);
CREATIVE_MODE_TABS.register(modEventBus);
}
}
ファイルの追加ではなく、前回追加したファイルを編集する形です。前回のソースコードと変更がある部分に「★」マークを入れていますので、その部分だけコピー&ペーストすることをおすすめします。まとめてコピー&ペーストする場合には必要に応じてMod IDやクラス名を修正してください。
画像の追加
謎の原石用の画像(テクスチャ)を追加します。透過部分が含まれますので、対応した画像編集ソフトで作成してください。
私はMinecraftのバニラにある「鉄の原石」(raw_iron.png)の画像をコピーし、Windows11のペイントで色だけ変更しました。
探し方はIntelliJ IDEAの右上の虫眼鏡マークを押下後、「ファイル」を選択して「すべての場所」となっていることを確認して「raw_iron.png」を入力、です。
用意した画像を「src/main/resources/assets/kamomod/textures/item」配下にソース上の名称と同じファイル名で格納します。今回は「mystery_raw.png」です。
モデルなどの追加
謎の原石のモデルなどを追加します。
「src/main/resources/assets/kamomod/models/item」配下に「mystery_raw.json」というファイルを新規作成し、中身を下記の通りとします。
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "kamomod:item/mystery_raw"
}
}
続けて「src/main/resources/assets/kamomod/items」配下に「mystery_raw.json」というファイルを新規作成し、中身を下記の通りとします。
{
"model": {
"type": "minecraft:model",
"model": "kamomod:item/mystery_raw"
}
}
以上です。各ファイルの詳細は「Minecraft Wiki:モデル」を参照ください。例えば「items」配下に格納したJsonファイルは「アイテムモデル」に該当します。「アイテムモデル」の章に飛ぶと、Jsonファイルの基本フォーマットの説明がありますので確認してみてください。
言語ファイルの編集
謎の原石のアイテム名を登録します。
「src/main/resources/assets/kamomod/lang」配下にある「ja_jp.json」を編集します。
{
"itemGroup.kamomod": "KamoModタブ",
"block.kamomod.mystery_block": "謎のブロック",
"item.kamomod.mystery_raw": "謎の原石"
}
4行目が追加行となります。3行目の最後に「,」を追加し4行目を追加しましょう。
ルートテーブルの追加
本ブログで初めて取り上げます。ルートテーブルは、ブロックを破壊したときなどのドロップ設定を行うものとなります。
「src/main/resources/data/kamomod/loot_table/blocks」配下に「mystery_block.json」というファイルを新規作成し、中身を下記の通りとします。
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"predicates": {
"minecraft:enchantments": [
{
"enchantments": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"name": "kamomod:mystery_block"
},
{
"type": "minecraft:item",
"functions": [
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops",
"function": "minecraft:apply_bonus"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "kamomod:mystery_raw"
}
]
}
],
"rolls": 1.0
}
],
"random_sequence": "kamomod:blocks/mystery_raw"
}
今回はバニラの「鉄の原石」のファイルを参考にしました。設定などは特に変更せず、ドロップするアイテム名などを変更しました。ファイルの詳細は「Minecraft Wiki:ルートテーブル」を参照ください。少し見てみると「silk_touch」という文字列があり、シルクタッチで破壊された場合の設定を行っているのかと・・・と想像できたりします。
最後にファイルの配置例を載せておきます。似たようなパスやファイル名で作業しますので間違えないように注意してください。
動作確認
前回同様クリエイティブモードのワールドで動作確認をしてみましょう。
まずタブに謎の原石が追加されているか確認しましょう。

続いて、謎のブロックから、謎の原石がドロップするのか確認してみましょう。
謎のブロックをワールドにいくつか配置したあと、クリエイティブモードのままではブロックを破壊しても何もドロップしないため、「/gamemode survival」と入力してサバイバルモードに変更します。サバイバルモードに変更できたら謎のブロックを破壊してみてください。謎の原石がドロップするはずです!
ほかにもシルクタッチのツルハシで謎のブロックを破壊してみましょう。シルクタッチが効き謎のブロックがドロップするはずです。
最後に
今回はMinecraftのNeoForge向けMod作成の原石追加編として「謎の原石」を追加しました。またルートテーブルを設定することで、謎のブロックを破壊した際に、状況に応じて謎の原石や謎のブロックがドロップするようにしました。少しはゲームらしい動きが感じられるのではないでしょうか。
今後は「謎のインゴット」を追加し、謎の原石をかまどなどで製錬した際に謎のインゴットになるようにしたいと思っています。もちろんその後はツルハシなどのツールの材料にするつもりですので、楽しみにしていてください。
以上、少しでも参考になれば幸いです。





0件のコメント: