【minecraft】マインクラフトのMod作ってみた Part3 ~剣の追加~【forge】
こんにちは!nomurabbitです。マインクラフトのMod作成Part3です。
今回は剣を追加しますよー!
プログラムは前回からの続きです。よろしければこちらの記事も参考にしてください。
ディレクトリ構成
まずはプロジェクトのディレクトリ構成を紹介します。今回新規追加・修正があるのは赤枠で囲ったファイルです。対象は、ItemInitクラス、lang系のファイル(en_us.json、ja_jp.json)、example_sword.json、example_sword_texture.pngです。
アイテム初期化クラス(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などのツールを使用するといいと思います。
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に今回のテクスチャ系のファイルを置きました。よかったら参考にしてください。