属性(Attributes)是生物的增益/减益特性系统。属性也存在修饰符(Modifiers),用于调整属性的强度。
属性[]
每个独立的属性都控制着生物的一些能力,例如攻击伤害和速度等。一个属性都有它们对应的名称(Name)、基值(Base)和值域,有时属性也带会有一些修饰符(Modifiers)用于修饰基值。当属性没有被特殊定义时,属性将以默认值(Default Value)作为基值计算。
修饰符[]
修饰符会修饰一个属性的基值。在使用某项属性时,系统会使用这项属性的基值与所有这项属性的修饰符进行计算,得出最终属性值,但修饰后的最终属性值不能仍然越过该属性最大值/最小值的限制。就像属性一样,修饰符也具有名称(Name),并具有标识它们的UUID。修饰符的名称与它的具体效果无关,而由它的运算模式(Operation)和修饰值(Amount)决定。如果两个修饰符具有相同的UUID,并作用于一个属性上,那么后加入的修饰符会替代先加入的修饰符,而不是相叠加。
运算模式[]
一个修饰符的运算模式(Operation)决定它修饰基值时的行为。共有三种运算模式:
- 增量操作(Op0)
该模式直接在基值上进行加减法操作。
例:用{Amount:2,Operation:0}
和{Amount:4,Operation:0}
同时修饰基值为3的某个属性,那么修饰过程就是3+(2+4)=9
。
- 倍率操作(Op1)
该模式将在增量操作后执行,对增量操作后的值进行倍率上的修改。如果修饰值设置为1,则修饰后的值会被增加一倍;如果设置为0,则不进行修改。
例:用{Amount:3,Operation:1}
和{Amount:6,Operation:1}
修饰某属性,且经过增量操作后的属性值为9,那么这个修饰过程就是9×(1+3+6)=90
。
- 最终倍乘操作(Op2)
该模式将会在其他所有修饰操作完成后,将修饰后的值乘以指定数字,得到最终属性值。由于这是最终的操作,因此多个最终倍乘之间相互独立,分别进行各自的乘法操作,而不是修饰值相加后进行乘法操作。
例:用{Amount:2,Operation:2}
和{Amount:4,Operation:2}
修饰某属性,经过其他所有操作后的属性值为90,那么这个修饰过程就是90×(1+2)×(1+4)=1350
。
下面从数学角度解释修饰符的作用,为了方便起见,简记Base为属性的基值,Op0为所有增量操作修饰值的总和,Op1为所有倍率操作修饰值的总和,Op2为所有最终倍乘修饰值+1后的乘积[1],则最终属性值为(Base+Op0)×(1+Op1)×Op2
。
应用[]
当属性修饰符应用到一个物品或生物时,它可以将拥有者的某项属性进行修正。[2][3]
下面的命令将给予命令执行者一把增加20( × 10)点额外伤害的钻石剑:
/give @s diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:20,Operation:0,UUID:[I;1498693494,1027158888,1898994005,860320107]}]}
下面命令将召唤一个僵尸,当玩家接近它100格时就会被它发现,而不是通常的35格:
/summon zombie ~ ~ ~ {Attributes:[{Name:"generic.follow_range",Base:100.0}]}
使用命令时也可以指定物品在指定槽位才可以发挥修饰作用。下面的命令会给予执行者一把增加20( × 10)点额外伤害的钻石斧,但它只有放于主手时才生效:
/give @s diamond_axe{AttributeModifiers:[{Slot:"mainhand",AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:20,Operation:0,UUID:[I;1498693494,1027158888,1898994005,860320107]}]}
历史[]
Java版 | |||||
---|---|---|---|---|---|
1.6.1 | 13w16a | 加入了属性。 | |||
13w17a | 为僵尸加入了Spawn Reinforcements Chance属性。 | ||||
加入了Zombie reinforcement charge(生成援兵charge)、Random zombie-spawn bonus(跟踪范围)和Leader zombie bonus(双倍援兵charge和最大生命值)。 | |||||
13w18a | 将Zombie reinforcement charge改为了Zombie reinforcement caller charge与Zombie reinforcement caller charge。 | ||||
13w21a | 属性现在可以由NBT决定了。 | ||||
属性现在具有ID和相应的转换值了。 | |||||
modifiers现在会显示在物品上了。 | |||||
加入了Attack Damage属性,且Speed属性变得通用了。 | |||||
加入了potion.moveSpeed、potion.moveSlowdown、potion.damageBoost和potion.weakness修饰符。 | |||||
加入了Sprinting speed boost、Fleeing speed bonus、Attacking speed boost(适用于僵尸猪灵和末影人)、Drinking speed penalty和Baby speed boost修饰符。 | |||||
加入Tool modifier和Weapon modifier属性。 | |||||
13w23b | 加入potion.healthBoost修饰符。 | ||||
1.7.2 | 13w36a | 属性/修饰符可以在没有第三方的情况下使用NBT加入NBT标签give和summon加入到物品或者生物。 | |||
1.9 | 15w34b | 加入了攻击速度属性。 | |||
15w36d | 加入了盔甲属性。 | ||||
15w44b | 加入了幸运值属性。 | ||||
1.9.1-pre1 | 加入了盔甲韧性属性。 | ||||
1.14 | 18w43a | 加入了击退距离属性。 | |||
1.16 | 20w14a | 更改了部分属性的ID。 | |||
物品和实体不再会保留未知的属性。 | |||||
重命名了属性的名字以满足命名空间ID的要求(即小写、由下划线分隔而不是驼峰大小写)。 | |||||
重命名generic.maxHealth 到generic.max_health 。 | |||||
重命名zombie.spawnReinforcements 到zombie.spawn_reinforcements 。 | |||||
重命名horse.jumpStrength 到horse.jump_strength 。 | |||||
重命名generic.followRange 到generic.follow_range 。 | |||||
重命名generic.knockbackResistance 到generic.knockback_resistance 。 | |||||
重命名generic.movementSpeed 到generic.movement_speed 。 | |||||
重命名generic.flyingSpeed 到generic.flying_speed 。 | |||||
重命名generic.attackDamage 到generic.attack_damage 。 | |||||
重命名generic.attackKnockback 到generic.attack_knockback 。 | |||||
重命名generic.attackSpeed 到generic.attack_speed 。 | |||||
重命名generic.armorToughness 到generic.armor_toughness 。 | |||||
20w17a | 加入了/attribute 以更改或读取属性。 | ||||
1.20.2 | 23w31a | 加入了generic.max_absorption 属性。 | |||
Java版(即将到来) | |||||
Combat Test | 1.14.3 - Combat Test | 加入了attackReach属性。 | |||
携带版Alpha | |||||
0.12.1 | build 1 | 加入了属性。 |
参考[]
语言