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

Minecraft 1.12.2 Forge Modの作成 その3 【剣の追加とレシピ登録,クラフト後に返ってくるアイテムの設定】

More than 1 year has passed since last update.

はじめに

今回はツールの追加第一弾として剣を追加してみたいと思います。

MODの作成において主に以下のサイトを参考にさせていただきます。
チュートリアル一覧

また、今回は以下のYoutube動画が大変参考になりました。
【マインクラフト】MODの作り方 part2 アイテム&ツール作成編

💻開発環境

  • Windows 10
  • JDK 8u211
  • Minecraft 1.12.2
  • Minecraft Forge 1.12.2 (14.23.5.2838)
  • IntelliJ IDEA 2019.1.3

ツールを作るための素材をアイテムとして登録

琵琶湖の水をアイテムとして登録します。

メンバーの追加

Biwako_mod.java
    @GameRegistry.ObjectHolder(MOD_ID)
    public static class Items {
        public static final Item biwakoBurger = null;       /** 琵琶湖バーガー */
        public static final Item biwakoWater = null;        /** 琵琶湖の水 */
    }

アイテムとモデルの登録

アイテムの登録は、コンマ(,)をつけて同じように書く。
モデルの登録はメンバー名変更するだけ。

Biwako_mod.java
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void addItems(RegistryEvent.Register<Item> event) {
            event.getRegistry().registerAll(
                new Item()
                        .setRegistryName(MOD_ID, "biwakoburger")
                        .setCreativeTab(CreativeTabs.FOOD)
                        .setTranslationKey("biwakoburger"),
                new Item()
                        .setRegistryName(MOD_ID,"biwakowater")
                        .setCreativeTab(CreativeTabs.MATERIALS)
                        .setTranslationKey("biwakowater")
            );
        }

        @SubscribeEvent
        public static void addBlocks(RegistryEvent.Register<Block> event) {

        }

        @SubscribeEvent
        public static void registerModels(ModelRegistryEvent event) {
            ModelLoader.setCustomModelResourceLocation(Items.biwakoBurger, 0, new ModelResourceLocation(Items.biwakoBurger.getRegistryName(), "inventory"));
            ModelLoader.setCustomModelResourceLocation(Items.biwakoWater, 0, new ModelResourceLocation(Items.biwakoWater.getRegistryName(), "inventory"));
        }
    }

jsonファイル

琵琶湖の水には、バニラに用意されている水バケツのテクスチャを利用しようと思う。
そこで、バニラのアイテムのjsonファイルを見てみる。

右側のプロジェクトウィンドウの一番下に外部ライブラリ-があり、
これのforgeSrc-1.12.2-14.23.5.2838.jar/assets/minecraft/models/itemにjsonが入っている。

ちなみに、水バケツはwater_bucket.jsonという名前で置かれていた。
biwakowater.jsonファイルを作成し、water_bucket.jsonの中身をコピペする。

image.png

biwakowater.json
{
  "parent": "item/generated",
  "textures": {
    "layer0": "items/bucket_water"
  }
}

langファイル

こんな感じ。

ja_JP.lang
# 日本語言語ファイル
item.biwakoburger.name=琵琶湖バーガー
item.biwakowater.name=琵琶湖の水
en_US.lang
# English Language File
item.biwakoburger.name=Biwako Burger
item.biwakowater.name=Water of Biwako

minecraftの起動

2019-07-17_21.06.57.png

ここまでは前回と同じ手順。

琵琶湖ソードを追加

まずはソードを追加してみます。

メンバーの追加

ソードのメンバを新しく追加します。ソードも変数をItemとするようです。

Biwako_mod.java
@GameRegistry.ObjectHolder(MOD_ID)
    public static class Items {
        public static final Item biwakoBurger = null;       /** 琵琶湖バーガー */
        public static final Item biwakoWater = null;        /** 琵琶湖の水 */
        public static final Item biwakoSword = null;        /** 琵琶湖ソード , 滋賀剣*/
    }

ソード追加クラス

src/main/java/jp/yuyu/biwako_modにソード追加用のクラスを作成します。
ファイル名はAddSword.javaとしました。

ItemSwordクラスを継承させ、以下のように記述しておきます。

AddSword.java
package jp.yuyu.biwako_mod;

import net.minecraft.item.ItemSword;

public class AddSword extends ItemSword {
    public AddSword(ToolMaterial material){
        super(material);
    }
}

アイテムの登録

少し長くなってきましたので、次回からは一部のみ記載することにします。
無機能アイテムを登録したときと同じように、addItemsメソッド内でアイテムの登録を行います。

先程作ったAddSwordクラスのインスタンスを作成し、
引数には、EnumHelper.addToolMaterialメソッドを用いてツールのパラメータを設定します。

パラメータは以下の通りに設定してみました。

また、CreativeTabの設定はせずとも、ItemSwordクラスがやってくれるようです。

名前
name BIWAKOWATER_MATERIAL
harvestLevel 1
maxUses 1000
efficiency 5
damage 7
enchantabillity 1
Biwako_mod.java
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void addItems(RegistryEvent.Register<Item> event) {
            event.getRegistry().registerAll(
                new Item()
                        .setRegistryName(MOD_ID, "biwakoburger")
                        .setCreativeTab(CreativeTabs.FOOD)
                        .setTranslationKey("biwakoburger"),
                new Item()
                        .setRegistryName(MOD_ID,"biwakowater")
                        .setCreativeTab(CreativeTabs.MATERIALS)
                        .setTranslationKey("biwakowater"),
                new AddSword(EnumHelper.addToolMaterial("BIWAKOWATER_MATERIAL",1,1000,5,7,1))
                        .setRegistryName(MOD_ID,"biwakosword")
                        .setTranslationKey("biwakosword")
            );
        }

        @SubscribeEvent
        public static void addBlocks(RegistryEvent.Register<Block> event) {

        }

        /**
         * モデル登録用イベント
         */
        @SubscribeEvent
        public static void registerModels(ModelRegistryEvent event) {
            ModelLoader.setCustomModelResourceLocation(Items.biwakoBurger, 0, new ModelResourceLocation(Items.biwakoBurger.getRegistryName(), "inventory"));
            ModelLoader.setCustomModelResourceLocation(Items.biwakoWater, 0, new ModelResourceLocation(Items.biwakoWater.getRegistryName(), "inventory"));
            ModelLoader.setCustomModelResourceLocation(Items.biwakoSword, 0, new ModelResourceLocation(Items.biwakoSword.getRegistryName(), "inventory"));
        }
    }

ソードのテクスチャ

models/item/biwakosword.jsonを作成します。
テクスチャは用意できなかったので、代わりにバニラのダイヤモンドソードのテクスチャを使用します。

無機能アイテムと違い、ソードの場合はparentの値をitem/handheldにします。

biwakosword.json
{
    "parent": "item/handheld",
    "textures": {
        "layer0": "items/diamond_sword"
    }
}

langの設定

en_US.lang
# English Language File
item.biwakoburger.name=Biwako Burger
item.biwakowater.name=Water of Biwako
item.biwakosword.name=Biwako Sword
ja_JP.lang
# 日本語言語ファイル
item.biwakoburger.name=琵琶湖バーガー
item.biwakowater.name=琵琶湖の水
item.biwakosword.name=滋賀県

minecraftの起動

無事、滋賀県(?)が追加されました
2019-08-08_14.42.00.png

レシピの登録

レシピ登録のJsonファイル

Jsonファイルを使ってレシピ登録ができるようです。

resources/assets/biwako_mod/recipes/biwakosword_recipe.jsonを作成します。
ファイル名は何でも良いようですので、わかりやすい名前をつけておきます。

patternには、作業台にアイテムをどう配置するかを記述し、
アルファベットに対するアイテムが何なのかをkeyとして記述します。

biwakosword_recipe.json
{
    "type": "minecraft:crafting_shaped",
    "pattern": [
        "W",
        "W",
        "S"
    ],
    "key": {
        "W": [
            {
                "item": "biwako_mod:biwakowater",
                "data": 0
            }
        ],
        "S": [
            {
                "item": "minecraft:stick",
                "data": 0
            }
        ]
    },
    "result": {
        "item": "biwako_mod:biwakosword",
        "data": 0,
        "count": 1
    }
}

クラフト後に返ってくるアイテム

滋賀県(琵琶湖ソード)は琵琶湖の水を素材として使用します。
クラフト後にはバケツが返ってきてほしいのです。

これはレシピ用のJsonファイルに記述するのではなく、アイテムの登録時に設定します。

setContainerItemというメソッドの引数にバニラのバケツを渡せばOKです。

Biwako_mod.java
new Item()
    .setRegistryName(MOD_ID,"biwakowater")
    .setCreativeTab(CreativeTabs.MATERIALS)
    .setTranslationKey("biwakowater")
    .setContainerItem(Item.getByNameOrId("bucket")),

minecraftの起動

左側のレシピには、一度クラフトすると表示されるようになりました。

ケーキで試して挙動が同じか確かめた痕跡が残ってるSSですが、
ちゃんとクラフト後にはバケツが残りますね!

返ってくるアイテムはIDでも指定できるようで、適当にID指定したら砂利が返ってきたのも写ってますね...。

2019-08-08_15.31.16.png

2019-08-08_15.50.33.png

おわりに

ツール作成第一弾、ソードの追加ができました。
アイテムの登録に関しては、なんとなくわかってきた気がします(ほんとに気がするだけ)。

色合いを変えるだけでもいいから、専用テクスチャを用意しておきたいのと、
ツールのパラメータをいい感じに調整したいですね。

現在開発中の琵琶湖MODですが、Githubにてプロジェクトを公開しています。


次回は琵琶湖ツールを完成させます。
Minecraft 1.12.2 Forge Modの作成 その1 【開発環境の準備 IntelliJ IDEA】
Minecraft 1.12.2 Forge Modの作成 その2 【mcmod.infoの編集と無機能アイテムの追加】
Minecraft 1.12.2 Forge Modの作成 その3 【剣の追加とレシピ登録,クラフト後に返ってくるアイテムの設定】
Minecraft 1.12.2 Forge Modの作成 その4 【ブロックの追加】

2018/08/08 初版

Hiroya_W
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