【Java + Mod開発】ブロックの硬度と採掘道具をMinecraftで設定する方法

Java

はじめに

今回は、マイクラのMod開発として追加したオリジナルブロックに対して硬度の設定や採掘可能な道具の設定をしていきたいと思います。

 

前提

以下記事を参考にModの開発環境が構築されていること。

【参照】
【開発環境構築】VSCodeでMinecraft(Java版)のMOD作成環境を構築する – SEもりのLog (selifemorizo.com)

【Java + Mod開発】Minecraftで作成するModの名前を変更してみる – SEもりのLog (selifemorizo.com)

【Java + Mod開発】オリジナルのアイテムを追加してみる – SEもりのLog (selifemorizo.com)

 

フォルダ構成

赤字のフォルダ・ファイルが今回必要な追加・修正対象になります。

│  .gitattributes
│  .gitignore
│  build.gradle
│  changelog.txt
│  CREDITS.txt
│  gradle.properties
│  gradlew
│  gradlew.bat
│  LICENSE.txt
│  README.txt
│  runClient.launch
│  runData.launch
│  runGameTestServer.launch
│  runServer.launch
│  settings.gradle
│
├─.vscode
│      settings.json
└─src
    ├─generated
    │  └─resources
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─mori
    │  │          └─morimod
    │  │              │  Config.java
    │  │              │  MoriMod.java
    │  │              │
    │  │              ├─blocks
    │  │              │      MoriModBlock.java
    │  │              │
    │  │              └─items
    │  │                      MoriModItem.java
    │  │
    │  └─resources
    │      │  pack.mcmeta
    │      │
    │      ├─assets
    │      │  └─morimod
    │      │      ├─blockstates
    │      │      │      moriblock.json
    │      │      │      mo_block.json
    │      │      │      ri_block.json
    │      │      │
    │      │      ├─lang
    │      │      │      en_us.json
    │      │      │      ja_jp.json
    │      │      │
    │      │      ├─models
    │      │      │  ├─block
    │      │      │  │      moriblock.json
    │      │      │  │      mo_block.json
    │      │      │  │      ri_block.json
    │      │      │  │
    │      │      │  └─item
    │      │      │          moriblock.json
    │      │      │          moriitem.json
    │      │      │          moriitem2.json
    │      │      │          mo_block.json
    │      │      │          ri_block.json
    │      │      │
    │      │      └─textures
    │      │          ├─block
    │      │          │      moriblock.png
    │      │          │      mo_block.png
    │      │          │      ri_block.png
    │      │          │
    │      │          └─item
    │      │                  moriitem.png
    │      │                  moriitem2.png
    │      │  
    │      ├─data
    │      │  ├─minecraft
    │      │  │  └─tags
    │      │  │      └─blocks
    │      │  │          │  needs_diamond_tool.json
    │      │  │          │  needs_iron_tool.json
    │      │  │          │  needs_stone_tool.json
    │      │  │          │
    │      │  │          └─mineable
    │      │  │                  axe.json
    │      │  │                  hoe.json
    │      │  │                  pickaxe.json
    │      │  │                  shovel.json
    │      │  │
    │      │  └─morimod
    │      │      ├─loot_tables
    │      │      │  └─blocks
    │      │      │          moriblock.json
    │      │      │          mo_block.json
    │      │      │          ri_block.json
    │      │      │
    │      │      └─recipes
    │      │              moriblock.json
    │      │              moriitem_from_block.json
    │      │
    │      └─META-INF
    │              mods.toml
    │

 

ソース編集

MoriModBlock.java

ブロック追加を参考に2つのブロックを新たに追加します。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/**
 * ブロックMod用クラス
 */
public class MoriModBlock {
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    // もブロック
    public static final RegistryObject<Block> MO_BLOCK =
    registerBlock("mo_block",
    () -> new Block(BlockBehaviour.Properties.of().
    mapColor(MapColor.METAL)
    .requiresCorrectToolForDrops() // 道具の設定が必要になるメソッド
    .strength(2.0F, 3.0F) // 硬度の設定
    .sound(SoundType.METAL)));

    // りブロック
    public static final RegistryObject<Block> RI_BLOCK =
    registerBlock("ri_block",
    () -> new DropExperienceBlock(BlockBehaviour.Properties.of()
    .mapColor(MapColor.DIAMOND)
    .requiresCorrectToolForDrops()  // 道具の設定が必要になるメソッド
    .strength(5.0F, 6.0F) // 硬度の設定
    .sound(SoundType.METAL),
    UniformInt.of(3, 6)));

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}

 

MoriMod.java

Modの大元のクラスでブロックMod用のクラスを読み込みます。

@Mod(MoriMod.MODID)
public class MoriMod
{

~~~~~~~~~~~~~~~
    // Add the example block item to the building blocks tab
    private void addCreative(BuildCreativeModeTabContentsEvent event)
    {
        // クリエイティブモードのタブにアイテムをセット
        // INGREDIENTSは材料のグループになる
        if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
            event.accept(MoriModItem.MORIITEM.get());
        }

        // クリエイティブモードのタブにアイテムをセット
        // BUILDING_BLOCKSは建材
        if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) {
            event.accept(MoriModBlock.MORIBLOCK.get());
            event.accept(MoriModBlock.MO_BLOCK.get());
            event.accept(MoriModBlock.RI_BLOCK.get());
        }
    }
~~~~~~~~~~~~~~~
}

 

設定の追加

ブロック追加設定

blockstates/mo_block.json と ri_block.json

{
    "variants": {
      "": {
        "model": "morimod:block/mo_block" 
      }
    }
}

 

block/mo_block.json と ri_block.json

{
    "parent": "block/cube_all",
    "textures":{
        "all": "morimod:block/mo_block"
    }
}

 

item/mo_block.json と ri_block.json

{
    "parent": "morimod:block/mo_block"
}

 

テクスチャ格納

画像サイズは、できる限り小さくしたほうが良いです。

 

ルートテーブル設定

ルートテーブル追加を参考に設定を追加します。

loot_tables/blocks/mo_block.json と ri_block.json

{
  "type": "minecraft:block",
  "pools": [
    {
      "bonus_rolls": 0.0,
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ],
      "entries": [
        {
          "type": "minecraft:item",
          "name": "morimod:mo_block"
        }
      ],
      "rolls": 2.0
    }
  ],
  "random_sequence": "minecraft:blocks/mo_block"
}

 

採掘可能な道具の設定

data/minecraft/tags/blocks/mineable/pickaxe.json

採掘可能道具をピッケルに設定します。

{
  "replace": false,
  "values":[
    "morimod:mo_block",
    "morimod:ri_block"
  ]
}

 

data/minecraft/tags/blocks/needs_stone_tool.json

石ツールで採掘可能設定をします。

{
  "replace": false,
  "values": [
    "morimod:mo_block"
  ]
}

 

data/minecraft/tags/blocks/needs_iron_tool.json

鉄ツールで採掘可能設定をします。

{
  "replace": false,
  "values": [
    "morimod:ri_block"
  ]
}

 

実行確認

実際にマイクラを実行してアイテムを採掘してみましょう!
鉄ピッケルと石ピッケルで採掘速度とドロップの可否が分かれていたら成功です。

 

公式サイト

公式サイト | Minecraft

 

最後に

以上、ログになります。
これからも継続していきましょう!!

Javaゲーム趣味/その他
おすすめIT本
良いコード/悪いコードで学ぶ設計入門

「ITエンジニア本大賞2023」技術書部門で大賞を受賞した本です。
・コードの可読性
・普段意識したほうが良いこと
・リファクタリング考え方
等、普段のコードを設計する際に意識することが書かれています。
コードのあるべき姿に迷ったら一度読んでみると良い本です。

仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん

Dockerって何?となったときに私が最初に読んだ本です。
Dockerがどんな仕組みで動いているのか、コマンドでは何を命令しているのかを理解できるように、イラストを多用して説明しています。

1冊ですべて身につくJavaScript入門講座

「ITエンジニア本大賞2024」技術書部門で大賞を受賞した本です。
私が次に読もうと思っている本なのでおすすめとして挙げておきたいと思います。

コメント

タイトルとURLをコピーしました