マルチプレイなら『シン・VPS』がおすすめ!

【マイクラ】set_attributesでattibute付与【item_modifier】

【マイクラ】set_attributesでattibute付与【item_modifier】

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

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

なつめ

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

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

本記事の内容
  • set_attributesでattributesを付与する
  • 実例

set_attibutesを指示することで、attributeコマンドで扱える内容をアイテムに適用させることが出来ます。

そのため、メインハンドに持っていると最大体力が増えるなどといった芸当が可能です。

attribute自体が見慣れないことや計算方法が複数あるなど、とっつきにくい要素ではありますが、attributeならではのものもあるので、ぜひ参考にしてください。

それでは、さっそく見ていきましょう!

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

set_attributesでattributesを付与する

set_attributesを指示することで、アイテムにattributesを適用させられます。

具体的な例を挙げると、「メインハンドに持っている状態に限り最大体力が20増加する」などといった感じですね。

要は「attributesコマンドで出来ることをアイテムを介して適用させている」イメージを抱けば、概ね合っています。

次項では、実際の記述内容を見ていきましょう。

実例

今回はitemコマンドで適用させる場合と、ルートテーブルを利用してattributesを指示されているアイテムを得る2通りの方法を見ていきます。

まずはデータパックの構造からです。

  • データパック本体
    • data
      • フォルダー
        (今回はsampleと命名したとします)
        • item_modifiers
          • jsonファイル
            (今回はtest.jsonと命名したとします)
        • loot_tables
          • jsonファイル
            (今回はtest.jsonと命名したとします)
    • pack.mcmeta

itemコマンドで適用させる場合

item_modifiersの方から見ていきましょう。
こちらのtest.jsonには以下のような記述を行います。

{
    "function": "minecraft:set_attributes",
    "modifiers": [
      {
        "attribute": "minecraft:generic.max_health",
        "name": "01_sample",
        "amount": 20,
        "operation": "addition",
        "id": "702750f6-1b19-4b9f-80e7-f6d683588052",
        "slot": "mainhand"
      }
    ]
  }
  

項目が複数あるので、表で見ていきます。

項目名意味
attributeattributesの種類を選びます。
nameこのattibuteを含むmodifierの名前を付けます。
判別しやすいものにすればOKです。
amount値を記述します。
operation計算方法を指示します。
additionかmultiply_base、multiply_totalの中から選びます。
計算方法については後述。
idmodifierのUUIDを指定します。
任意の項目であるため、記述しなくても大丈夫です。
(指定しなかった場合は、ランダムに生成されます)
slotどのスロットにあると効力を発揮するのかを指示します。
複数のスロットを指示した場合には、ランダムに1つ選ばれます。
(複数の中に同一のものが多いほど、その項目は選ばれやすくなります)

これらの項目をまとめたものをmodifierと呼びます。
普段は意識することが少ないですが、operationでmultiply_totalを選択する場合などに意識することが必要です。

また、全て手動で記述するのは難しいため、生成サイトの利用をおすすめします。

生成サイトは以下のボタンからどうぞ!

jsonファイルを作成した後は、データパックを導入し、itemコマンドを実行します。

手に持っているアイテムに対して適用させたい場合は、以下のコマンドでOKです。

/item modify entity @s weapon.mainhand sample:test

operationの項目で選択する計算方法について

operationで指示しなければならない計算方法は、addition、multiply_base、multiply_totalの3つから選びます。

それぞれの計算式は以下の通りです。

addition

同一項目であるamountの値をすべて、現在の値に加算します。

例えば、minecraft:generic.max_healthに対してamountを3、さらに4を指示している2つがあったとします。

デフォルトの体力最大値である20を変更していない状態で適用させた場合は、20+3+4で27となります。

体力を示すハートが合計で14個になりますが、最後の1つは半分までしか回復しません。

multiply_base

該当項目であるamountをすべて加算したのち、1を足す。
その値と現在の値を掛ける。

additionと同様の状況だった場合、3+4+1を行い、8となる。
その値を現在の値と掛けるので、今回の例の場合は8×20となり、最大体力は160となる。

multiply_total

該当している各modifierのamountに1を足し、それらを全て掛けた後に現在の値と掛ける。

additionと同様の状況だった場合、3+1と4+1を行う。
それぞれ4と5という値になり、これを掛けることで20という値が現れる。

この20を現在の値である20と掛けると400という値になり、この値が結果となる。

ルートテーブルを利用して適用済みのアイテムを得る場合

ルートテーブルに組み込んだ場合の記述例は以下の通りです。

{
    "pools": [
      {
        "rolls": 1,
        "entries": [
          {
            "type": "minecraft:item",
            "name": "minecraft:diamond",
            "functions": [
              {
                "function": "minecraft:set_attributes",
                "modifiers": [
                  {
                    "attribute": "minecraft:generic.armor",
                    "name": "02_sample",
                    "amount": 10,
                    "operation": "addition",
                    "id": "eaeee527-ed3a-4a62-9302-7fb26c652007",
                    "slot": "mainhand"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
  

item_modifierとして作成する場合と記述する内容に変わりはないため、functionsの中にきちんと組み込めれば問題ありません。

また、lootコマンドで得る場合のコマンド例は以下の通りです。

/loot give @s loot sample:test

まとめ

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

ポイント
  • set_attibutesを指示することで、attributeコマンドで扱うような内容をitem_modifiersで扱える。

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

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