nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【minecraft】マインクラフトのMod作ってみた Part3 ~剣の追加~【forge】

こんにちは!nomurabbitです。マインクラフトのMod作成Part3です。

今回は剣を追加しますよー!

プログラムは前回からの続きです。よろしければこちらの記事も参考にしてください。

nomurabbit.hatenablog.jp

nomurabbit.hatenablog.jp

ディレクトリ構成

まずはプロジェクトのディレクトリ構成を紹介します。今回新規追加・修正があるのは赤枠で囲ったファイルです。対象は、ItemInitクラス、lang系のファイル(en_us.json、ja_jp.json)、example_sword.json、example_sword_texture.pngです。

f:id:nomurabbit:20211223051957p:plain

アイテム初期化クラス(ItemInitクラス)

今回はを追加します。マインクラフトの世界で、オブジェクトはアイテムブロックなど大きなカテゴリに分類できます。剣はアイテムとして追加しますので、ItemInitクラスを修正していきます。

ItemInitクラス

package com.nomurabbit.mymod.core.init;

import com.nomurabbit.mymod.MyMod;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tiers;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.fmllegacy.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraft.world.item.CreativeModeTab;

public final class ItemInit {

    public static final CreativeModeTab TUTORIAL_TAB = new CreativeModeTab(MyMod.MOD_ID) {
        @Override
        public ItemStack makeIcon() {
            return EXAMPLE_ITEM.get().getDefaultInstance();
        }
    };

    public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS,
            MyMod.MOD_ID);

    public static final RegistryObject<Item> EXAMPLE_ITEM = ITEMS.register("example_item",
            () -> new Item(new Item.Properties().tab(TUTORIAL_TAB).fireResistant()));

    public static final RegistryObject<Item> EXAMPLE_SWORD = ITEMS.register("example_sword",
            () -> new SwordItem(Tiers.NETHERITE, 5, -2.4F,
                    (new Item.Properties().tab(TUTORIAL_TAB).fireResistant())));

    private ItemInit() {
    }
}

SwordItemコンストラクタの第二引数は攻撃力第三引数は攻撃速度に関係します。素手ティーブの攻撃力が5、攻撃速度が4.0なのでそこからの増減を指定します。

アイテムの名称(lang系のファイル)

アイテムの名称を定義します。言語ごとにあるlang系のファイルを修正して、英語ではExample Sword、日本語では例の剣と表示されるようにします。

en_us.json

{
  "item.mymod.example_item": "Example Item",
  "item.mymod.example_sword": "Example Sword"
}

ja_jp.json

{
  "item.mymod.example_item": "例のアイテム",
  "item.mymod.example_sword": "例の剣"
}

テクスチャの追加

テクスチャの定義はjson画像はpngでそれぞれ作成します。これらのファイルの作成にあたっては手作業だとかなりの手間なので、blockbenchなどのツールを使用するといいと思います。

www.blockbench.net

example_sword.json

{
	"credit": "Made with Blockbench",
	"textures": {
		"0": "mymod:items/example_sword_texture",
		"particle": "mymod:items/example_sword_texture"
	},
	"elements": [
		{
			"from": [7, 0, 7],
			"to": [9, 16, 9],
			"faces": {
				"north": {"uv": [0, 0, 2, 16], "texture": "#0"},
				"east": {"uv": [2, 0, 4, 16], "texture": "#0"},
				"south": {"uv": [4, 0, 6, 16], "texture": "#0"},
				"west": {"uv": [6, 0, 8, 16], "texture": "#0"},
				"up": {"uv": [10, 10, 8, 8], "texture": "#0"},
				"down": {"uv": [10, 10, 8, 12], "texture": "#0"}
			}
		},
		{
			"from": [4, 4, 7],
			"to": [12, 6, 9],
			"faces": {
				"north": {"uv": [8, 0, 16, 2], "texture": "#0"},
				"east": {"uv": [10, 8, 12, 10], "texture": "#0"},
				"south": {"uv": [8, 2, 16, 4], "texture": "#0"},
				"west": {"uv": [10, 10, 12, 12], "texture": "#0"},
				"up": {"uv": [16, 6, 8, 4], "texture": "#0"},
				"down": {"uv": [16, 6, 8, 8], "texture": "#0"}
			}
		}
	],
	"display": {
		"thirdperson_righthand": {
			"rotation": [45, 90, -45],
			"translation": [0, 4, 2.5]
		},
		"thirdperson_lefthand": {
			"rotation": [45, 90, -45],
			"translation": [0, 4, 2.5]
		},
		"firstperson_righthand": {
			"rotation": [180, -90, 180],
			"translation": [0, 4.75, 0]
		},
		"firstperson_lefthand": {
			"rotation": [180, -90, 180],
			"translation": [0, 4.75, 0]
		},
		"ground": {
			"rotation": [45, 0, 45],
			"translation": [0, 5.75, 0]
		},
		"gui": {
			"rotation": [0, 0, -45]
		},
		"head": {
			"translation": [0, 14.25, 0]
		},
		"fixed": {
			"rotation": [0, 0, 45]
		}
	},
	"groups": [
		{
			"name": "group",
			"origin": [8, 8, 8],
			"color": 0,
			"children": [0, 1]
		}
	]
}

このjsonで重要なのがtexturesの指定です。json内ではmymod:items/example_sword_textureと指定しています。実際にpngを置くパスとリンクさせておきましょう。今回はresources > assets > mymod > textures > items > example_sword_texture.pngとして保存してあります。

GitHubに今回のテクスチャ系のファイルを置きました。よかったら参考にしてください。

github.com

実行

必要なファイルの追加や修正が済んだら実行です。

今作ったModを実際に動かしてみましょう!

https://cdn-ak.f.st-hatena.com/images/fotolife/n/nomurabbit/20211223/20211223054441.gif

このように剣が追加されていることが確認できると思います。

以上で剣の追加は完成です。

今回のマインクラフトのMod作成いかがでしたでしょうか?次回もぜひご覧ください。では!