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

Minecraft 1.12.2 Forge Modの作成 その4 【ブロックの追加】

More than 1 year has passed since last update.

はじめに

琵琶湖ツールを完成させる予定でしたが、予定を変更して、
今回は、ブロックの追加をしてみたいと思います。

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

💻開発環境

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

メンバーの追加

今までの無機能アイテム、ツールは、どちらもアイテムという扱いでした。
今回のブロックについては、アイテムとしても存在し、ブロックとしても存在します。

ということで、2つ追加します。

Biwako_mod.java
    @GameRegistry.ObjectHolder(MOD_ID)
    public static class Blocks {
        public static final Block biwakoBlock = null;      /** 琵琶湖ブロック */
    }

    @GameRegistry.ObjectHolder(MOD_ID)
    public static class Items {
        public static final Item biwakoBlock = null;        /** 琵琶湖ブロック */
    }

アイテムの登録

ブロックのアイテムの登録をします。
ブロックの場合、ItemBlockのインスタンスを引数として渡します。
ItemBlockの引数には、Blocksのメンバーを渡し、
setRegistryNameメソッドで、登録名だけ設定しておきます。

Biwako_mod.java
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void addItems(RegistryEvent.Register<Item> event) {
            event.getRegistry().registerAll(
                new ItemBlock(Blocks.biwakoBlock).setRegistryName("biwakoblock")
            );
        }
    }

ブロックの登録

ブロックとしてのパラメータをここで追加します。
基本的な記述方法はアイテムの時と同じ。
Blockの引数にはMaterialを渡すのですが、どうやらいろんなパラメータがあるそうです。
透明とか、破壊にツールを必要とするとか。ここでは無難にMaterial.ROCKを設定しています。
(オリジナルのMaterialも追加できるのかな)
情報はver 1.6.4のものですが、参考に。
Minecraft 1.6.4 Material

Biwako_mod.java
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void addBlocks(RegistryEvent.Register<Block> event) {
            event.getRegistry().registerAll(
                    new Block(Material.ROCK)
                            .setRegistryName(MOD_ID, "biwakoblock")/*登録名の設定*/
                            .setCreativeTab(CreativeTabs.BUILDING_BLOCKS)/*クリエイティブタブの選択*/
                            .setTranslationKey("biwakoblock")/*システム名の設定*/
                            .setHardness(1.5F) /*硬さ*/
                            .setResistance(1.0F) /*爆破耐性*/

             );
         }
    }   

モデルの登録

いつも通り。

Biwako_mod.java
    @Mod.EventBusSubscriber
    public static class ObjectRegistryHandler {
        @SubscribeEvent
        public static void registerModels(ModelRegistryEvent event) {
            ModelLoader.setCustomModelResourceLocation(Items.biwakoBlock, 0, new ModelResourceLocation(Items.biwakoBlock.getRegistryName(), "inventory"));
        }
    }

リソース

アイテムとは異なり、いくつか設定する項目があります。
ver 1.8のブロック追加の解説を参考に。

blockmodel

ブロックのモデルをここで設定する。
適用したいテクスチャの配置場所は、
/src/main/resources/assets/biwako_mod/textures/blocks/biwakoblock.png
です。

今回は、全面同じテクスチャのブロックにしますが、
ビーコンみたいな、複雑なテクスチャも(jsonファイル覗いてみた感じおそらく)ここで設定するっぽい。

jsonファイルは
/src/main/resources/assets/biwako_mod/models/block/biwakoblock_model.json
に配置します。

biwakoblock_model.json
{
    "parent":"block/cube_all",
    "textures":{"all":"biwako_mod:blocks/biwakoblock"}
}

blockstates

ブロックの状態。
作物の成長過程別にリソースを設定したい場合など。
今回は状態が1つしかないので、normalを指定する。
指定するmodelは上のblockmodelで作成したjsonファイルの名前です。

jsonファイルは
/src/main/resources/assets/biwako_mod/blockstates/biwakoblock.json
に配置します。

biwakoblock.json
{
    "variants": {
        "normal": { "model": "biwako_mod:biwakoblock_model" }
    }
}

item model

最後にアイテムのモデルを設定します。
ブロックのモデルと同じなので、それ(jsonファイル名)を指定します。

jsonファイルは
/src/main/resources/assets/biwako_mod/models/item/biwakoblock.json
に配置します。

biwakoblock.json
{
    "parent":"biwako_mod:block/biwakoblock_model"
}

レシピの追加

砂を琵琶湖の水で固めるイメージ。

biwakoblock_recipe.json
{
    "type": "minecraft:crafting_shaped",
    "pattern": [
        "BBB",
        "BSB",
        "BBB"
    ],
    "key": {
        "B": [
            {
                "item": "biwako_mod:biwakowater",
                "data": 0
            }
        ],
        "S": [
            {
                "item": "minecraft:sand",
                "data": 0
            }
        ]
    },
    "result": {
        "item": "biwako_mod:biwakoblock",
        "data": 0,
        "count": 1
    }
}

lang

en_US.lang
tile.biwakoblock.name=Biwako Block
ja_JP.lang
tile.biwakoblock.name=琵琶湖ブロック

minecraftの起動

2019-08-27_22.24.54.png
2019-08-27_22.25.37.png

真っ青なブロック...。テクスチャ、まじでどうしよう...。
このテクスチャは、毎度のことながらバニラの水ブロックのものをお借りしたのですが、
手持ちしか半透明になってないですね...。
うーん。とりあえず、目標は達成です。

おわりに

ブロックの追加ができました。
単にアイテムやブロックの追加をしてきただけで、パラメータの設定を適当にしてきてしまっている感じ。
テクスチャも適当なので、そこら辺をなんとかしたいな、と思いつつもプログラミングが楽しくって...。

MODのネタもいくつか新しく増えたので、書き方の情報集めて勉強しないと...!
頑張ります!!

現在開発中の琵琶湖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/27 初版

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