こんばんは。Nakanishiです。
Discordサーバーを運営中です。
一緒にゆるくMod制作を楽しみませんか?
※)日本語での会話ができる方のみ参加可能です。
条件に合わない方は参加をご遠慮ください。
前回のおさらい
木材の原木ブロックと木ブロック(Wood)を追加しました。
JavaでMinecraftのModを作ろう☆ 木材編② 〜原木を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座
今回はハーフブロックを作っていこうと思います。
①JSONファイルを用意しよう
テクスチャは木材編①で扱った【pale_oak_planks.png】を使います。
なので見た目で必要なものは【models/block】【models/item】【blockstates】になります。
まず【models/block】から作っていきましょう。
ブロックの【model】は下付きのものと上付きのもの2種類用意する必要があります。
pale_oak_slab.json例)
{
"parent": "minecraft:block/slab",
"textures": {
"bottom": "nakanishi_mod:block/pale_oak_planks",
"side": "nakanishi_mod:block/pale_oak_planks",
"top": "nakanishi_mod:block/pale_oak_planks"
}
}

pale_oak_slab_top.json例)
{
"parent": "minecraft:block/slab_top",
"textures": {
"bottom": "nakanishi_mod:block/pale_oak_planks",
"side": "nakanishi_mod:block/pale_oak_planks",
"top": "nakanishi_mod:block/pale_oak_planks"
}
}

これでブロック側の【model】のJSONファイルは完成です。
次にアイテム側の【model】のJSONファイルを書いていきましょう。
pale_oak_slab.json例)
{
"parent": "nakanishi_mod:block/pale_oak_slab"
}

これで【model】のJSONファイルは完成です。
続いて【blockstate】のJSONファイルを作っていきます。
pale_oak_slab.json例)
{
"variants": {
"type=bottom": {
"model": "nakanishi_mod:block/pale_oak_slab"
},
"type=double": {
"model": "nakanishi_mod:block/pale_oak_planks"
},
"type=top": {
"model": "nakanishi_mod:block/pale_oak_slab_top"
}
}
}

💡ポイント
・"type=double"でpale_oak_planksを指定している通り、先に板材【pale_oak_planks】を作っていないと、重ねた際に正しい挙動をしません。
なので、ハーフブロックを作る際は、必ず先に板材を作ってください。
これで見た目のJSONファイルが揃いました。
この流れでCLASSファイルも作っていきます。
②CLASSファイルを作ろう
名前は【Block_Pale_Oak_Slab】にしました。

ここからクラスを作っていくのですが、ハーフブロックは【SlabBlock】というクラスを使います。
例)
extends SlabBlock

ここで赤線が出ているので、前回同様の方法を使って仮のパラメータと引数を表示させて赤線を消してあげます。

ここで()内を消してあげて、引数を入力していきます。
例)
super(Properties.copy(Blocks.OAK_SLAB));

これでCLASSファイルは完成です。
この流れでレジストリ登録をしていきます。
登録は板材同様、ブロック状態とアイテム状態の登録を行います。
ブロックの登録例)
public static final RegistryObject<Block> PALE_OAK_SLAB = BLOCKS.register("pale_oak_slab", Block_Pale_Oak_Slab::new);

アイテムの登録例)
public static final RegistryObject<Item> PALE_OAK_SLAB = BLOCK_ITEMS.register("pale_oak_slab"
, () -> new BlockItem(Blocks.PALE_OAK_SLAB.get(), new Item.Properties()));

これで【Pale Oak Slab】がゲームに反映されました。
このまま前回同様、残りの登録と追記をしていきます。
③設定を追加しよう
まず翻訳から追記していきます。
追記例)
"item.nakanishi_mod.pale_oak_slab": "Pale Oak Slab",
"block.nakanishi_mod.pale_oak_slab": "Pale Oak Slab"

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

次にサバイバルモードで破壊した際にドロップするように、【loot_table】を追加します。
pale_oak_slab.json例)
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"conditions": [
{
"block": "nakanishi_mod:pale_oak_slab",
"condition": "minecraft:block_state_property",
"properties": {
"type": "double"
}
}
],
"count": 2.0,
"function": "minecraft:set_count"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "nakanishi_mod:pale_oak_slab"
}
],
"rolls": 1.0
}
],
"random_sequence": "nakanishi_mod:blocks/pale_oak_slab"
}
💡ポイント
・"type": "double"で"count": 2.0,になっているのは、重ねた際には板材の振る舞いはするけど、破壊したらハーフブロックが2つドロップする。という意味です
最後に【mineable】を追記して完成です。
追記例)
{
"values": [
"nakanishi_mod:pale_oak_log",
"nakanishi_mod:pale_oak_wood",
"nakanishi_mod:pale_oak_planks",
"nakanishi_mod:pale_oak_slab"
]
}

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

きちんと下付き、上付き、重ねた時で正しいテクスチャが反映されていますね。

きちんと適正ツールも反映され、ドロップ数も正しくなっています。
これでハーフブロックは完成です。
ここまでお疲れ様でした☆
次回は階段の作り方を書かせてもらおうと思います。
もしこの記事が参考になった、または「JavaでMod制作を始めてみたい!」と思っていただけたら、ぜひ読者登録をお願いします。
それではまた次回お会いしましょう。
ここまでお読みいただき、ありがとうございました。
【次回記事】
JavaでMinecraftのModを作ろう☆ 木材編④ 〜階段を作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座