【マイクラ】copy_stateでブロックの情報をコピー【item_modifier】

【マイクラ】copy_stateでブロックの情報をコピー【item_modifier】

この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

こんにちは!
マインクラフターのなつめです。

なつめ

2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!

この記事では、こんな疑問を解決します!

本記事の内容
  • copy_stateでブロックの情報をコピーする
  • 実例

copy_stateは、ブロックの情報をコピーすることが可能なitem_modifierの1項目です。

しかしitem_modifierとして使うのではなく、ルートテーブルに組み込むのが重要になります。

その理由を含め詳しく説明していくので、ぜひ参考にしてくださいね。

本記事で紹介するデータパックのサンプルはGitHubにてダウンロードできます。

copy_stateでブロックの情報をコピーする

copy_stateを指示することで、ブロックの持つ情報をコピーさせることが出来ます。

具体的には、破壊したブロックそのものが持っていた情報をドロップしたアイテムに反映させるといった具合ですね。

そのため、item_modifierとしては活用できず、ルートテーブルで使用する必要があります。

referenceなどで呼び出す場合には、item_modifierとして作成しても問題ありません。

また、重要なのはBlockStateTagです。
このBlockStateTagをコピーする仕様ですので、ほかのtagではうまくいきません。

BlockStateTagの例を挙げると、かまどが燃焼中であるかどうかや、向きが存在するブロックがどの方角を向いて設置されているかなどですね。

F3で確認できる項目と捉えても問題ありません。

次項では、どのようにして実装するのかについてお話します。

実例

今回はかまどのルートテーブルを上書きし、copy_stateを指示したかまどがドロップするようにします。

というわけで、まずはデータパックの構造です。

  • データパック本体
    • data
      • minecraft
        • loot_tables
          • blocks
            • furnace.json
    • pack.mcmeta

今回は、かまどのドロップアイテムを変更するためのファイル構造になっています。

furnace.jsonの中身については、以下の通り。

{
    "type": "minecraft:block",
    "pools": [
      {
        "rolls": 1,
        "entries": [
          {
            "type": "minecraft:item",
            "name": "minecraft:furnace",
            "functions": [
              {
                "function": "minecraft:copy_state",
                "block": "minecraft:furnace",
                "properties": [
                  "lit"
                ]
              }
            ]
          }
        ]
      }
    ]
  }
  

minecraft:copy_stateによって、blockとpropertiesを決めています。
上記では、それぞれminecraft:furnaceとlitという風に書かれていますね。

これは「かまどのlit(燃焼中かどうか)をコピーしますよ」という指示になります。
そのため、かまどを壊した際には、かまどのlitを反映させたアイテム(ここではかまど)をドロップするというわけです。

ドロップするアイテムを溶鉱炉にした場合は、かまどのlitを参照した溶鉱炉がドロップします。

ダイヤモンドなどlitを活用しないアイテムをドロップするようにした場合でも、tag自体はコピーされます。

これを確認するには、dataコマンドを用いればOKです。

以下は、手に持っているアイテムのデータを調べるためのコマンドになります。

/data get entity @s SelectedItem

まとめ

というわけで、今回のまとめです。

ポイント
  • copy_stateを用いることで、BlockEntityTagをコピーすることが出来る。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】