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_log

pale_oak_log_top

原木に必要なテクスチャは横と上下の2種類が必要になります。

 

まず、このテクスチャを【textures/block】に移動させて【models/item】【models/blockblockstates】を書いていきます。

 

原木の【models/block】は縦のJSONファイルと横のJSONファイルの2種類必要になります。これは設置したときに、軸の方向によって見た目が変わるためです。

 

pale_oak_log.json例)

{
  "parent": "minecraft:block/cube_column",
  "textures": {
    "end": "nakanishi_mod:block/pale_oak_log_top",
    "side": "nakanishi_mod:block/pale_oak_log"
  }
}

 

 

pale_oak_log_horizontal.json例)

{
  "parent": "minecraft:block/cube_column_horizontal",
  "textures": {
    "end": "nakanishi_mod:block/pale_oak_log_top",
    "side": "nakanishi_mod:block/pale_oak_log"
  }
}

 

💡ポイント

horizontalとは水平という意味です

 

pale_oak_log】のテクスチャがあるので、ついでに【pale_oak_wood】のJSONファイルも作ってしまいます。

 

pale_oak_wood.json例)

{
  "parent": "minecraft:block/cube_column",
  "textures": {
    "end": "nakanishi_mod:block/pale_oak_log",
    "side": "nakanishi_mod:block/pale_oak_log"
  }
}

 

 

次に【models/item】のJSONファイルを用意します。

pale_oak_log.json例)

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

 

 

pale_oak_wood.json例)

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

 

これで【model】のJSONファイルは完成です。

 

続いて【blockstate】を用意します。

pale_oak_log.json例)

{
  "variants": {
    "axis=x": {
      "model": "nakanishi_mod:block/pale_oak_log_horizontal",
      "x": 90,
      "y": 90
    },
    "axis=y": {
      "model": "nakanishi_mod:block/pale_oak_log"
    },
    "axis=z": {
      "model": "nakanishi_mod:block/pale_oak_log_horizontal",
      "x": 90
    }
  }
}

 

💡ポイント

pale_oak_log_horizontalは先ほど作ってもらったpale_oak_log_horizontal.jsonを差します

 

pale_oak_wood.json例)

{
  "variants": {
    "axis=x": {
      "model": "nakanishi_mod:block/pale_oak_wood",
      "x": 90,
      "y": 90
    },
    "axis=y": {
      "model": "nakanishi_mod:block/pale_oak_wood"
    },
    "axis=z": {
      "model": "nakanishi_mod:block/pale_oak_wood",
      "x": 90
    }
  }
}

 

 

これで原木見た目のJSONファイルが完成しました。

 

 

②CLASSファイルを作ろう

まずは原木から作っていきます。名前は【Block_Pale_Oak_Log】にしました。

 

 

ここで今までと違うのが、原木のように縦と横の向きのあるブロックは【RotatedPillarBlock】というクラスを使います。

 

例)

extends RotatedPillarBlock

 

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

赤線の所で右クリックをしてもらってShow Context Actions】を選択します。

そうしたら【Creat constructor matching super】を選択してください。

 

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

例)

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

 

これで原木のCLASSファイルは完成です。

 

次にWood)のCLASSファイルを作っていきます。名前は【Block_Pale_Oak_Wood】にしました。

 



Wood)も原木同様【RotatedPillarBlock】というクラスを作ります。

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

ここでも原木と同じように()内を消してもらって、引数を入力してあげます。

例)

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

 

完成したPale_Oak_WoodのCLASSファイル

これでWood)のCLASSファイルが完成しました。

 

それでは実際にゲーム内に反映させる為、レジストリ登録をしていきましょう。

 

 

レジストリ登録をしよう

登録方法はいつもと同様で、ブロック状態とアイテム状態の2つを登録していきます。

 

ブロックの登録例)

public static final RegistryObject<Block> PALE_OAK_LOG = BLOCKS.register("pale_oak_log", Block_Pale_Oak_Log::new);
        
public static final RegistryObject<Block> PALE_OAK_WOOD = BLOCKS.register("pale_oak_wood", Block_Pale_Oak_Wood::new);

ブロック状態の登録


アイテムの登録例)

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

 

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

 

これでゲーム内に反映させることが出来ました。

あとは前回の記事同様に【翻訳】【クリエイティブタブ】【loot_table】【mineable】の追記を行っていきましょう。

 

 

④設定を追加しよう

翻訳の追記方法は今までと同様です。
例)

"item.nakanishi_mod.pale_oak_log": "Pale Oak Log",
"block.nakanishi_mod.pale_oak_log": "Pale Oak Log",
"item.nakanishi_mod.pale_oak_wood": "Pale Oak Wood",
"block.nakanishi_mod.pale_oak_wood": "Pale Oak Wood",



クリエイティブタブの追記方法も今までと同じ方法で行います。

リストは並べた順番で表示されるので、今回は公式と同じ順番に追加しました。

 

次に【loot_table】の追加を行います。

pale_oak_log.json例)

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

 

pale_oak_log.json

pale_oak_wood.json例)

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

 

pale_oak_wood.json

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

例)

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

 

mineable/axe.json

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

 

クリエイティブタブ画面

原木・木・板材の順番で表示されています。

 

原木の設置テスト

しっかり縦・横の向きのあるブロックになってますね。

 

木の設置テスト

分かりにくいですが、しっかりと向きのあるブロックになっています。

 

サバイバルモードで破壊テスト

どちらも斧で素早く破壊することが出来て、ドロップ品もしっかり落ちてます。

 

これで原木が完成しました。

 

 

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

次回はハーフブロックの作り方を書かせてもらおうと思います。

 

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

 

次回記事

JavaでMinecraftのModを作ろう☆ 木材編③ 〜ハーフブロックを作ろう〜 - NakanishiのForge1.20.1のJavaMod開発講座