NakanishiのForge1.20.1のJavaMod開発講座

MoreCropsDelightの作者、NakanishiがMod制作について書いていきます。

JavaでMinecraftのModを作ろう☆ 木材編⑤ 〜フェンスを作ろう〜

こんばんは。Nakanishiです。

Discordサーバーを運営中です。

Kazushi_Nakanishiのこっそりサーバー

一緒にゆるくMod制作を楽しみませんか?
※)日本語での会話ができる方のみ参加可能です。
  条件に合わない方は参加をご遠慮ください。

 

 

前回のおさらい

木材の階段を追加しました。

JavaでMinecraftのModを作ろう☆ 木材編④ 〜階段を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座

今回はフェンスを作っていこうと思います。

 

 

JSONファイルを用意しよう

テクスチャは木材編①で扱った【pale_oak_planks.png】を使います。

なので見た目で必要なものは【models/block】【models/item】【blockstates】になります。

 

まず【models/block】から作っていきます。

フェンスに必要な【models/block】は3種類です。

インベントリに使われる【inventory】、一本だけ立った状態の【post】、くっついた状態の【side】の3種類です。

 

pale_oak_fence_inventory.json例)

{
  "parent": "minecraft:block/fence_inventory",
  "textures": {
    "texture": "nakanishi_mod:block/pale_oak_planks"
  }
}

 

pale_oak_fence_inventory.json

 

pale_oak_fence_post.json例)

{
  "parent": "minecraft:block/fence_post",
  "textures": {
    "texture": "nakanishi_mod:block/pale_oak_planks"
  }
}

pale_oak_fence_post.json

 

pale_oak_fence_side.json例)

{
  "parent": "minecraft:block/fence_side",
  "textures": {
    "texture": "nakanishi_mod:block/pale_oak_planks"
  }
}

 

pale_oak_fence_side.json

 

これで【models/block】は完成です。次に【models/item】を作っていきます。

pale_oak_fence.json例)

{
  "parent": "nakanishi_mod:block/pale_oak_fence_inventory"
}

 

pale_oak_fence.json

 

これで【model】は完成です。次に【blockstate】を作っていきます。

pale_oak_fence.json例)

{
  "multipart": [
    {
      "apply": {
        "model": "nakanishi_mod:block/pale_oak_fence_post"
      }
    },
    {
      "apply": {
        "model": "nakanishi_mod:block/pale_oak_fence_side",
        "uvlock": true
      },
      "when": {
        "north": "true"
      }
    },
    {
      "apply": {
        "model": "nakanishi_mod:block/pale_oak_fence_side",
        "uvlock": true,
        "y": 90
      },
      "when": {
        "east": "true"
      }
    },
    {
      "apply": {
        "model": "nakanishi_mod:block/pale_oak_fence_side",
        "uvlock": true,
        "y": 180
      },
      "when": {
        "south": "true"
      }
    },
    {
      "apply": {
        "model": "nakanishi_mod:block/pale_oak_fence_side",
        "uvlock": true,
        "y": 270
      },
      "when": {
        "west": "true"
      }
    }
  ]
}

 

これで【blockstate】は完成です。続いてCLASSファイルを作っていきます。

 

 

②CLASSファイルを作ろう

今回は名前を【Block_Pale_Oak_Fence】にしました。

フェンスは【FenceBlock】というクラスを使います。

例)

extends FenceBlock

 

ここまで書けたら、いつものように仮のパラメータと引数を表示させてあげます。

 

仮のパラメータと引数を表示

そうしたら()内を消してもらって、引数を入力します。

例)

super(Properties.copy(Blocks.OAK_FENCE));

 

完成したBlock_Pale_Oak_FenceのCLASSファイル

それではレジストリ登録をしていきます。

ブロックの登録例)
public static final RegistryObject<Block> PALE_OAK_FENCE = BLOCKS.register("pale_oak_fence", Block_Pale_Oak_Fence::new);

ブロックの登録

アイテムの登録例)

public static final RegistryObject<Item> PALE_OAK_FENCE = BLOCK_ITEMS.register("pale_oak_fence"
                , () -> new BlockItem(Blocks.PALE_OAK_FENCE.get(), new Item.Properties()));

 

アイテムの登録

 

これで【Pale Oak Fence】がゲーム内に反映されました。

あとは前回同様、残りの登録と追記をしていきます。

 

 

③設定を追加しよう

まず翻訳から追記していきます。

追記例)

"item.nakanishi_mod.pale_oak_fence": "Pale Oak Fence",
"block.nakanishi_mod.pale_oak_fence": "Pale Oak Fence"

 

翻訳(en_us.json

次にクリエイティブタブのリストに追記します。

 

次にサバイバルモードで破壊した際にドロップするように、【loot_table】を追加します。

pale_oak_fence.json例)

{
  "type": "minecraft:block",
  "pools": [
    {
      "bonus_rolls": 0.0,
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ],
      "entries": [
        {
          "type": "minecraft:item",
          "name": "nakanishi_mod:pale_oak_fence"
        }
      ],
      "rolls": 1.0
    }
  ],
  "random_sequence": "nakanishi_mod:blocks/pale_oak_fence"
}

 

pale_oak_fence.json

いつもならここで【mineable】の追記を行うのですが、フェンスの登録は変わっているので、まず動作確認をしてみます。

 

動作確認

このように、今の状態ではフェンスを隣同士で置いてもくっつきません。

というのも、フェンスがくっつくようにするにはタグ登録というのが必要になるからです。

フェンスのタグは

・fences

・wooden_fences

の2種類あります。

今回は木材のフェンスなので【wooden_fences】に追加していこうと思います。

場所は

resources/data/minecraft/tags/blocks/wooden_fences.json

になります。

ここに以下のように書きます。

例)

{
  "values": [
    "nakanishi_mod:pale_oak_fence"
  ]
}

 

wooden_fences.json

wooden_fences】は斧の適正ツールに入っているので【mineable】の追記は不要です。

 

それではもう一度、動作確認をしてみましょう。

 

設置確認

タグ登録されたことでフェンス同士がくっつくようになりました。

 

サバイバルモード確認

適正ツールも斧になっています。

 

これでフェンスは完成です。

 

 

ここまでお疲れ様でした☆

次回はフェンスゲートの作り方を書かせてもらおうと思います。

 

もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。

 

次回記事

JavaでMinecraftのModを作ろう☆ 木材編⑥ 〜フェンスゲートを作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座