こんばんは。Nakanishiです。
Discordサーバーを運営中です。
一緒にゆるく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_post.json例)
{
"parent": "minecraft:block/fence_post",
"textures": {
"texture": "nakanishi_mod:block/pale_oak_planks"
}
}

pale_oak_fence_side.json例)
{
"parent": "minecraft:block/fence_side",
"textures": {
"texture": "nakanishi_mod:block/pale_oak_planks"
}
}

これで【models/block】は完成です。次に【models/item】を作っていきます。
pale_oak_fence.json例)
{
"parent": "nakanishi_mod:block/pale_oak_fence_inventory"
}

これで【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));

それではレジストリ登録をしていきます。
ブロックの登録例)
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"

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

次にサバイバルモードで破壊した際にドロップするように、【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"
}

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

このように、今の状態ではフェンスを隣同士で置いてもくっつきません。
というのも、フェンスがくっつくようにするにはタグ登録というのが必要になるからです。
フェンスのタグは
・fences
・wooden_fences
の2種類あります。
今回は木材のフェンスなので【wooden_fences】に追加していこうと思います。
場所は
【resources/data/minecraft/tags/blocks/wooden_fences.json】
になります。

ここに以下のように書きます。
例)
{
"values": [
"nakanishi_mod:pale_oak_fence"
]
}

【wooden_fences】は斧の適正ツールに入っているので【mineable】の追記は不要です。
それではもう一度、動作確認をしてみましょう。

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

適正ツールも斧になっています。
これでフェンスは完成です。
ここまでお疲れ様でした☆
次回はフェンスゲートの作り方を書かせてもらおうと思います。
もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。
【次回記事】
JavaでMinecraftのModを作ろう☆ 木材編⑥ 〜フェンスゲートを作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座