【Java + Mod開発】Minecraftでタグを追加して複数のブロックをタグとして扱う

Java

はじめに

今回は、マイクラのMod開発としてブロックにタグをつけていきたいと思います。

 

前提

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

ドロップ作成の前提として、以下記事を参考にModの開発環境が構築されていること。

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

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

【Java + Mod開発】オリジナルのブロックをMinecraftで追加してみる – SEもりのLog (selifemorizo.com)

 

ブロックにタグを追加

こちらの記事で作成したブロックにタグを追加していきます。

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

 

フォルダ構成

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

└─src
    ├─generated
    │  └─resources
    │      └─.cache
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─mori
    │  │          └─morimod
    │  │              │  Config.java
    │  │              │  MoriMod.java
    │  │              │
    │  │              ├─blocks
    │  │              │  │  MoriModBlock.java
    │  │              │  │
    │  │              │  └─customize
    │  │              │          HiraganaBlock.java
    │  │              │
    │  │              ├─items
    │  │              │  │  MoriModCreativeModeTabs.java
    │  │              │  │  MoriModFood.java
    │  │              │  │  MoriModItem.java
    │  │              │  │
    │  │              │  └─customize
    │  │              │          IronSearcherItem.java
    │  │              │          JudgeItem.java
    │  │              │
    │  │              └─util
    │  │                      ModTags.java
    │  │
    │  └─resources
    │      │  pack.mcmeta
    │      │
    │      ├─assets
    │      │  └─morimod
    │      │      ├─blockstates
    │      │      │      a_block.json
    │      │      │      moriblock.json
    │      │      │      mo_block.json
    │      │      │      ri_block.json
    │      │      │
    │      │      ├─lang
    │      │      │      en_us.json
    │      │      │      ja_jp.json
    │      │      │
    │      │      ├─models
    │      │      │  ├─block
    │      │      │  │      a_block.json
    │      │      │  │      moriblock.json
    │      │      │  │      mo_block.json
    │      │      │  │      ri_block.json
    │      │      │  │
    │      │      │  └─item
    │      │      │          a_block.json
    │      │      │          humbarger.json
    │      │      │          iron_searcher.json
    │      │      │          judge_rod.json
    │      │      │          moriblock.json
    │      │      │          moriitem.json
    │      │      │          moriitem2.json
    │      │      │          mo_block.json
    │      │      │          ri_block.json
    │      │      │
    │      │      └─textures
    │      │          ├─block
    │      │          │      a_block.png
    │      │          │      moriblock.png
    │      │          │      mo_block.png
    │      │          │      ri_block.png
    │      │          │
    │      │          └─item
    │      │                  humbarger.png
    │      │                  iron_searcher.png
    │      │                  judge_rod.png
    │      │                  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
    │      │      │      humbarger.json
    │      │      │      moriblock.json
    │      │      │      moriitem_from_block.json
    │      │      │
    │      │      └─tags
    │      │          └─blocks
    │      │                  morimod-tags.json
    │      │
    │      └─META-INF
    │              mods.toml

 

ソース編集

morimod-tags.json

「morimod-tags」というタグ名に所属するブロック一覧を記載します。

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

 

ModTags.java

「morimod-tags」のタグをソース内に適用します。

package com.mori.morimod.util;

import com.mori.morimod.MoriMod;

import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.block.Block;

public class ModTags {
    public static class Blocks {
        public static final TagKey<Block> MORIMODE_TAGS = tag("morimod-tags");


        private static TagKey<Block> tag(String name) {
            return BlockTags.create(new ResourceLocation(MoriMod.MODID, name));
        }

        private static TagKey<Block> forgeTag(String name) {
            return BlockTags.create(new ResourceLocation("forge", name));
        }
    }
}

 

使い方

「MORIMODE_TAGS」には「morimod-tags.json」に追加したブロック一覧が全て含まれているため、一覧として扱うことができます。例えば以下の例だと対象ブロックとの比較のためにisメソッドを使用していますが、引数に「MORIMODE_TAGS」を指定することで、「morimod-tags.json」に追加したブロック全てと比較することができます。

BlockState blockstate = 対象ブロック;

// 「MORIMODE_TAGS」のブロック一覧全てと比較
if (blockstate.is(ModTags.Blocks.MORIMODE_TAGS)){

}

 

公式サイト

公式サイト | Minecraft

 

最後に

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

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

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

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

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

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

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

コメント

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