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】から作っていきます。

 

画像のように、階段は通常の形だけでなく、角に置いたときの内側、外側の形も必要になります。そのため、3種類の【model】のJSONファイルを用意して切り替えられるようにしています。

 

pale_oak_stairs.json例)

{
  "parent": "minecraft:block/stairs",
  "textures": {
    "bottom": "nakanishi_mod:block/pale_oak_planks",
    "side": "nakanishi_mod:block/pale_oak_planks",
    "top": "nakanishi_mod:block/pale_oak_planks"
  }
}

 

pale_oak_stairs.json

pale_oak_stairs_inner.json例)

{
  "parent": "minecraft:block/inner_stairs",
  "textures": {
    "bottom": "nakanishi_mod:block/pale_oak_planks",
    "side": "nakanishi_mod:block/pale_oak_planks",
    "top": "nakanishi_mod:block/pale_oak_planks"
  }
}

 

pale_oak_stairs_inner.json

pale_oak_stairs_outer.json例)

{
  "parent": "minecraft:block/outer_stairs",
  "textures": {
    "bottom": "nakanishi_mod:block/pale_oak_planks",
    "side": "nakanishi_mod:block/pale_oak_planks",
    "top": "nakanishi_mod:block/pale_oak_planks"
  }
}

 

pale_oak_stairs_outer.json

次に【models/item】を書いていきます。

pale_oak_stairs.json例)

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

 

pale_oak_stairs.json

 

続いて、【blockstate】を書いていきます。

階段の【blockstate】は先ほど書いてもらった【models/block】に向きを足したもので長文になってますが、1つでもミスがあると市松模様のテクスチャになってしまうので注意してください。

 

pale_oak_stairs.json例)

{
  "variants": {
    "facing=east,half=bottom,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 270
    },
    "facing=east,half=bottom,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner"
    },
    "facing=east,half=bottom,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 270
    },
    "facing=east,half=bottom,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer"
    },
    "facing=east,half=bottom,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs"
    },
    "facing=east,half=top,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180
    },
    "facing=east,half=top,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 90
    },
    "facing=east,half=top,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180
    },
    "facing=east,half=top,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 90
    },
    "facing=east,half=top,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "x": 180
    },
    "facing=north,half=bottom,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 180
    },
    "facing=north,half=bottom,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 270
    },
    "facing=north,half=bottom,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 180
    },
    "facing=north,half=bottom,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 270
    },
    "facing=north,half=bottom,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "y": 270
    },
    "facing=north,half=top,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 270
    },
    "facing=north,half=top,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180
    },
    "facing=north,half=top,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 270
    },
    "facing=north,half=top,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180
    },
    "facing=north,half=top,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "x": 180,
      "y": 270
    },
    "facing=south,half=bottom,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner"
    },
    "facing=south,half=bottom,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 90
    },
    "facing=south,half=bottom,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer"
    },
    "facing=south,half=bottom,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 90
    },
    "facing=south,half=bottom,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "y": 90
    },
    "facing=south,half=top,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 90
    },
    "facing=south,half=top,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 180
    },
    "facing=south,half=top,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 90
    },
    "facing=south,half=top,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 180
    },
    "facing=south,half=top,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "x": 180,
      "y": 90
    },
    "facing=west,half=bottom,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 90
    },
    "facing=west,half=bottom,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "y": 180
    },
    "facing=west,half=bottom,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 90
    },
    "facing=west,half=bottom,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "y": 180
    },
    "facing=west,half=bottom,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "y": 180
    },
    "facing=west,half=top,shape=inner_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 180
    },
    "facing=west,half=top,shape=inner_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_inner",
      "uvlock": true,
      "x": 180,
      "y": 270
    },
    "facing=west,half=top,shape=outer_left": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 180
    },
    "facing=west,half=top,shape=outer_right": {
      "model": "nakanishi_mod:block/pale_oak_stairs_outer",
      "uvlock": true,
      "x": 180,
      "y": 270
    },
    "facing=west,half=top,shape=straight": {
      "model": "nakanishi_mod:block/pale_oak_stairs",
      "uvlock": true,
      "x": 180,
      "y": 180
    }
  }
}

 

これで見た目のJSONファイルは完成です。

 

 

②CLASSファイルを作ろう

名前は【Block_Pale_Oak_Stairs】にしました。

 



ここからクラスを作っていくのですが、階段は【StairBlock】というクラスを使います。

例)

extends StairBlock

 

ここでいつものように赤線が引かれてますので、仮のパラメータと引数を表示させて赤線を消してあげます。

 

いつものようにすると、このような画面が出ますが、ここは【OK】で良いです。

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

階段は元のブロック今回は板材)を参照してあげる必要があります。

なので今回の場合、まだ板材を作ってない方は先に板材を作ってください。

 

()内を消してあげて、引数を入力していていきます。

 

例)

super(NakanishiModBlocks.Blocks.PALE_OAK_PLANKS.get().defaultBlockState(),
                Properties.copy(Blocks.OAK_STAIRS));

完成したCLASSファイル

 

💡ポイント

defaultBlockState()は、そのブロックの「標準的な状態」を参照するメソッドです。ここでは板材の性質を引き継ぐために指定しています。

 

これで【オークの階段】のプロパティを持った階段のCLASSファイルが完成しました。

 

次にレジストリ登録をしていきます。

板材同様、ブロック状態アイテム状態の2カ所登録が必要です。

 

ブロックの登録例)

public static final RegistryObject<Block> PALE_OAK_STAIRS = BLOCKS.register("pale_oak_stairs", Block_Pale_Oak_Stairs::new);

ブロックの登録



アイテムの登録例)

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

 

アイテムの登録

 

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

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

 

 

③設定を追加しよう

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

追記例)

"item.nakanishi_mod.pale_oak_stairs": "Pale Oak Stairs",
"block.nakanishi_mod.pale_oak_stairs": "Pale Oak Stairs"

 

翻訳(en_us.json

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

 

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

 

pale_oak_stairs.json例)

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

 

pale_oak_stairs.json

 

最後にmineable】を追記して完成です。

追記例)

{
  "values": [
    "nakanishi_mod:pale_oak_log",
    "nakanishi_mod:pale_oak_wood",
    "nakanishi_mod:pale_oak_planks",
    "nakanishi_mod:pale_oak_slab",
    "nakanishi_mod:pale_oak_stairs"
  ]
}

 

mineable/axe.json

 

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

 

設置のテクスチャ確認

設置のテクスチャ確認

model】【blockstate】はしっかり機能してますね。

 

サバイバルモードでドロップ確認

適正ツールも斧になっており、しっかりとドロップしました。

 

これで階段は完成です。

 

 

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

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

 

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

 

【次回記事】

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