Attribute(属性)のメモ書き
Attribute(属性)とは
プレイヤーやモブなどのエンティティが、特定箇所に装備しているときだけ発動する効果のこと。
装備している
とは以下のときなので、インベントリに入れているだけでは発動しません。
- メインハンドに持っている
- オフハンドに持っている
- 頭に装備している
- 胴に装備している
- 腰に装備している
- 脚に装備している
ここ以降はAttributeは属性と言い換えてメモしていきます。
属性の基本形
装備品に指定する場合
{ AttributeModifiers:[ { Slot: "mainhand", AttributeName: "generic.attackDamage", Amount: 20.0, Operation: 0, UUIDMost: 1L, UUIDLeast: 1L } ] }
パラメータ | 説明 | 定義 | 必須 |
---|---|---|---|
Slot | 効果を発動させる装備場所 - メインハンド : mainhand - オフハンド : offhand - 頭 : head - 胴 : chest - 腰 : feet - 脚 : legs |
string | |
AttributeName | 発動する効果 | string | ● |
Amount | 発動する効果の値・倍率 | number | ● |
Operation | Amount の計算方法 |
number | |
UUIDMost / UUIDLeast | 属性の固有の値 | number(Long) | ● |
モブ側のデフォルト値を変更する場合
{ Attributes:[ { Name: "generic.attackDamage", Base: 1.0 } ] }
パラメータ | 説明 | 定義 | 必須 |
---|---|---|---|
Name | 発動する効果 | string | ● |
Base | 基本となる値 | number | ● |
Attribute NameとNameに指定できる属性
各属性には最小値と最大値が設定されており、それを超える値は最大値(最小値)に設定されるので注意。
AttributeName / Name | 効果 | デフォルト値 |
---|---|---|
generic.maxHealth | ハートを増減させる(1につき0.5個) | 20.0 |
generic.followRange | モブの攻撃対象の検出距離 | 32.0 |
generic.knockbackResistance | ノックバックの抵抗確率 | 0.0 |
generic.movementSpeed | 移動速度 | 0.7 |
generic.attackDamage | 攻撃ダメージ(1につき0.5個) | 1.0 |
generic.armor | 防御ダメージ | 0.0 |
generic.armorToughness | 防具の耐久力 | 0.0 |
generic.attackKnockback | ノックバック | 0.0 |
generic.attackSpeed | プレイヤーの攻撃クールダウンの時間(秒) | 4.0 |
generic.luck | プレイヤーの運。ルートテーブルなどで使用 | 0.0 |
horse.jumpStrength | 馬のジャンプ力 | 0.7 |
generic.flyingSpeed | オウムの飛行速度 | 0.4 |
zombie.spawnReinforcements | ゾンビ攻撃時に別のゾンビを召喚する確率 | 0.0 |
Amount と Operation について
Attributeを計算する場合にどのような計算方法を使うかを選択できます。
デフォルトは0。
例として、以下の属性を与えた場合の説明をします。
// アイテムA (メインハンドに持つ) { AttributeModifiers:[ { AttributeName: "generic.maxHealth", Amount: 1.0, Operation: ???, UUIDMost: 1L, UUIDLeast: 1L } ] } // アイテムB (オフハンドに持つ) { AttributeModifiers:[ { AttributeName: "generic.maxHealth", Amount: 2.0, Operation: ???, UUIDMost: 2L, UUIDLeast: 2L } ] }
単純に値を追加する : 0
プレイヤーの最大体力のデフォルト値が20なので、
20 (デフォルト) + 1 (アイテムA) + 2 (アイテムB)
の合計値、23(ハート11.5個)が最大体力になります。
元の値に掛けてから足す : 1
プレイヤーの最大体力をベースとすると、
20 (デフォルト) + (20 x 1 (アイテムA)) + (20 x 2 (アイテムB))
となるので、
20 + 20 + 40
の合計値、80(ハート40個)が最大体力になります。
アイテムの説明文としては、+100%などのパーセント表記で表されます。
値に1を足してから掛ける : 2
またもプレイヤーの最大体力をベースとすると、
20 (デフォルト) x (1 + 1 (アイテムA)) x (1 + 2 (アイテムB))
という感じで計算されます。つまり、
=> 20 x 2 x 3 => 20 x 6 => 120
ということで、合計値の120(ハート60個)が最大体力になります。
こちらもアイテムの説明文としては、+100%などのパーセント表記で表されます。
UUID Most / Least について
UUIDとはなにか?
=>たった一つしか存在しないIDのこと
ということで、UUID Most/Least です。この2つはペアになっており、MostとLeastの組み合わせてIDが作られています。例えば、Mostが1L、Leastが2Lならばマイクラ上では下のようなUUIDが作り上げられます。
UUID : 00000000-0000-0001-0000-000000000002
UUIDの制限
UUID Most/Leastはマイナス値だとうまく反映されません。
正確には、反映されるのですがオーバーフローします。要するにバグります。
UUID Most/Leastは-9223372036854775808~9223372036854775807の間で指定できますが、UUID Leastが0だと属性の効果が反映されませんので、注意しましょう。
UUIDは同じ属性の中でぶつかり合う
さて、このUUID。同じ属性同士で同じUUIDを使って両方装備してしまうとどうなるのか。
効果が反映されたり、されなかったりして、バグります。
UUIDさえ異なれば良いので、UUID Mostが一緒でもUUID Leastが異なるなら、セーフです。
逆にUUID Leastが一緒でもUUID Mostが異なるなら、セーフです。
データパックの配布を行う場合は気をつけよう
データパック同士が同じUUIDを使っているとどうなるか。
バグります。ちゃんとIDを決めてあげましょう。