属性(Attributes)是生物和玩家身上的增益/减益特性系统。属性也存在修饰符(Modifiers)中,用于调整属性的强度。
属性应用
当应用到一个物品,一个物品的修饰符将增加或减少以修正相应的属性[1][2] 属性/修饰符可以在没有第三方的情况下使用NBT添加数据标签give和summon添加到物品或者生物。
下面的命令将给最近的玩家一把增加20( × 10)点额外伤害的钻石剑,如果你把Operation由0改变到1,那么会直接增加攻击伤害。/give @s diamond_sword{AttributeModifiers:[{AttributeName:"generic.attackDamage",Name:"generic.attackDamage",Amount:20,Operation:0,UUIDLeast:894654,UUIDMost:2872}]}
/give @s diamond_sword{AttributeModifiers:[{AttributeName:"generic.attack_damage",Name:"generic.attack_damage",Amount:20,Operation:0,UUID:[I;1498693494,1027158888,1898994005,860320107]}]}
下面命令将召唤一个僵尸,当它距离玩家100格或更少时,它将跟随玩家,而不是通常的40。/summon zombie ~ ~ ~ {Attributes:[{Name:"generic.followRange",Base:100.0}]}
/summon zombie ~ ~ ~ {Attributes:[{Name:"generic.follow_range",Base:100.0}]}
也可以指定槽位拥有一定属性。/give @s diamond_axe{AttributeModifiers:[{Slot:"mainhand",AttributeName:"generic.attackDamage",Name:"generic.attackDamage",Amount:20,Operation:0,UUIDLeast:1,UUIDMost:1}]}
/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]}]}
槽位可以是:mainhand,offhand,head,legs,chest,feet。
属性
每个独立的属性都控制着一些性状,这由这个属性的Name(名字)决定。一个属性通常都有一个Base(基础值),有的时候会有一些Modifiers(修饰符)。属性通常也有一个默认值(例如用于生成一个没有定义过特别属性的生物),以及一个自带的规定值域。修饰符会修饰属性的基础值,但结果也是在规定值域内的。
除非另有说明,否则最小值和最大值均为包含值,或者等于1.7x10308。
请注意,具有相同UUID并影响相同属性的属性修饰符将不会叠加;只有最近影响的玩家或生物的一个才会产生影响,且覆盖之前的修饰符。
所有实体均包含的属性项
属性名称 | 概述 | 默认值 | 最小值 | 最大值 | |||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
generic.maxHealth generic.max_health |
这个生物的最大生命值;亦或这个生物通过生命恢复最多可以恢复至的极限。你需要运用[Health:#]nbt改变生物的当前生命值。 | 20 | 0.0 | 1024.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.followRange generic.follow_range |
这个生物追踪玩家或者其他生物的最大范围,以方块数为单位。目标离开这个区域意味着它们将停止追踪。目前大多数生物这个值为16,而僵尸则有40。 | 32 | 0.0 | 2048.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.knockbackResistance generic.knockback_resistance |
这个生物的抗击退效果(包括攻击的击退、爆炸和弹射物冲击)的程度,1.0代表完全抵抗。 | 0.0 | 0.0 | 1.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.movementSpeed generic.movement_speed |
在某种不明度量标准下这个生物的速度。以格/秒为单位的生物最大速度略高于此值的43倍,但可能会受到各种条件的影响,例如:骑马(如果是马),疾跑,逃跑(如果是被动生物),攻击(如果是一个末影人或僵尸猪人),被拴绳牵引,受速度或迟缓药水影响,为幼年僵尸或者是一个女巫和喝药水。可以使用以下等式计算每秒格数的速度,其中x是movementSpeed属性y = 43.178x-0.02141
|
0.7* | 0.0 | 1024.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.attackDamage generic.attack_damage |
普通攻击造成的伤害,一点表示半个心形标志。此属性在被动生物中未找到。 | 1.0 | 0.0 | 2048.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.attack_knockback |
这个生物的攻击击退力度,此属性在除列表之外的生物中未找到。
|
? | ? | ? | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.armor | 盔甲的防御点数。 | 0.0 | 0.0 | 30.0 | |||||||||||||||||||||||||||||||||||||||||||||||||||
generic.armorToughness generic.armor_toughness |
盔甲韧性 | 0.0 | 0.0 | 20.0 |
玩家的额外属性
这些属性只出现在玩家中。
属性名称 | 概述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
generic.attackSpeed generic.attack_speed |
决定攻击力度的填充速度,值代表每秒可以进行全力攻击的次数。 | 4.0 | 0.0 | 1024.0 |
generic.luck | 影响战利品表使用的quality 和bonus_rolls (例如当打开箱子、运输矿车,钓鱼和杀怪)。
|
0.0 | -1024.0 | 1024.0 |
generic.attackReach(正式版本尚未使用) | 玩家的攻击距离 | 3.0 | 0.0 | 6.0 |
generic.reachDistance(正式版本尚未使用) | 玩家的触及半径 | 5.0 | 0.0 | 256.0 |
马的额外属性
这些属性只出现在马中。
属性名称 | 概述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
horse.jumpStrength horse.jump_strength |
在某种不明度量标准下马的弹跳力。 | 0.7* | 0.0 | 2.0 |
鹦鹉的额外属性
这些属性只出现在鹦鹉中。
属性名称 | 概述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
generic.flyingSpeed generic.flying_speed |
在某种不明度量标准下鹦鹉的飞行速度。 | 0.4* | 0.0 | 1024.0 |
僵尸的额外属性
这些属性只出现在僵尸或僵尸猪人中。
属性名称 | 概述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
zombie.spawnReinforcements zombie.spawn_reinforcements |
僵尸在一次攻击中在周围生成另一个僵尸的可能性。即使是僵尸猪人也会生成僵尸。 | 0.0 | 0.0 | 1.0 |
一些未知属性的特性
当游戏找到一些非属性关键字的属性,这些特性将适用。当游戏发现无法识别的属性时,将应用这些特性于它。(请注意:执行此操作的代码行导致Minecraft崩溃。)
属性名称 | 概述 | 默认值 | 最小值 | 最大值 |
---|---|---|---|---|
任何非常规名字的属性 | 未知。 | 0.0 | 2.2×10-308 | 1.7x10308 |
修饰符
修饰符会修饰一个属性的Base(基础值),也就是增加或减少它。需要注意的是,修饰后的值不能越过该属性最大值/最小值的限制。就像属性一样,修饰符有Name(名称),然而名称与修饰符的效果无关,修饰符的效果由Operation(运算模式)和Amount(修饰值)决定。修饰符还有它的UUID,用来唯一地标识每一个修饰符。
运算模式
一个修饰符的Operation(运算模式),决定它修饰时的行为。共有三种运算模式:
- 属性增量
即Operation 0。该模式直接在基础值上进行加减法操作。
例:用{Amount:2,Operation:0}
和{Amount:4,Operation:0}
修饰某属性,基础值为3。
则修饰过程可以表示为:
3 + (2 + 4) = 3 + 6 = 9
- 倍率增量
即Operation 1。该模式将在Operation 0之后执行,并直接在属性值的作用倍率上进行加减法操作,也就是将当前的属性值进行倍率上的修改,而基础倍率为×1倍(即不做改动)。
例:用{Amount:3,Operation:1}
和{Amount:6,Operation:1}
修饰某属性,经过Operation 0的操作后的属性值为9。
则修饰过程可以表示为:
9 × (1 + 3 + 6) = 9 × 10 = 90
- 最终倍乘
即Operation 2。该模式将会在其它所有修饰(包括其他的Operation 2修饰)完成后,在最终倍率上执行加减法操作,并执行最终的倍乘。基础倍率同样为×1倍。
由于这是最终的操作,因此多个Operation 2之间相互独立,分别进行各自的最终倍率的加减法操作,最后结果则是相互倍乘,而非相加。
例:用{Amount:2,Operation:2}
和{Amount:4,Operation:2}
修饰某属性,经过其他所有操作后的属性值为90。
则修饰过程可以表示为:
1. 首先执行第一个Amount:2
的操作:
90 × (1 + 2) = 90 × 3 = 270
2. 再执行第二个Amount:4
的操作:
270 × (1 + 4) = 270 × 5 = 1350
下面从数学角度解释修饰符的作用,为了方便起见,简记Base为属性的基础值;Op0为所有Operation 0的值的总和;Op1为所有Operation 1的值的总和;Op2为所有Operation 2的值再+1后的乘积[3],则有如下表示:
最终属性值 = (Base + Op0) × (1 + Op1) × Op2
已知修饰符
像前文所述一样,一个修饰符可拥有任何一个Name(名字)且这不能影响这个修饰符的效果。下面是一些已知的修饰符的名字以及用于常规Minecraft的值(如果你在定制的地图中找到了这一栏,请不要修改它,因为地图设计者可能已经定制了这些东西)。需要注意的是一些UUID频繁出现,同时其他的有表现为固定字符串代码:这些UUID已经被采用了,请不要在本列表中添加这个修饰符不包含的UUID,这意味着每次这个修饰符创立时都是不同的。
修饰符名称 | 概述与已知值 | 已知效果 |
---|---|---|
随机生成所附带的修饰符(Random spawn bonus) | 由生成而产生,值呈高斯分布于0.0至0.05*。在僵尸的抗击退能力上,另一个成高斯分布于0.0至0.05*也会产生。 | generic.followRange (Operation 1; 所有生物), Knockback Resistance抗击退能力 (Operation 0; 仅村民和僵尸) |
工具的修饰符(Tool modifier) | 由工具决定 | generic.attackDamage (Operation 0; 所有工具; UUID CB3F55D3-645C-4F38-A497-9C13A33DB5CF) |
武器的修饰符(Weapon modifier) | 由武器决定 | generic.attackDamage (Operation 0; 所有武器; UUID CB3F55D3-645C-4F38-A497-9C13A33DB5CF (与工具的修饰符的UUID相同)) |
疾跑速度(Sprinting speed boost) | 固定值为0.3*,应用于包括玩家在内的所有在跑动中的生物 | generic.movementSpeed (Operation 2; 所有活跃的实体; UUID 662A6B8D-DA3E-4C1C-8813-96EA6097278D) |
逃离速度(Sprinting speed boost) | 固定值为2,应用于所有逃离中的被动的生物。 | generic.movementSpeed (Operation 2; 所有被动生物; UUID E199AD21-BA8A-4C53-8D13-6182D5C69D3A) |
攻击冲刺(Attacking speed boost) | 应用于末影人的固定值为6.2*;应用于僵尸猪人的固定值为0.45*。仅在攻击时出现。 | generic.movementSpeed (Operation 0; 末影人 - UUID 020E0DFB-87AE-4653-9556-831010E291A0, 僵尸猪人 - UUID 49455A49-7EC5-45BA-B886-3B90B23A1718) |
非成熟体速度(Baby speed boost) | 固定值为0.5,仅出现于小僵尸或者小僵尸村民中。 | generic.movementSpeed (Operation 1; 小型僵尸; UUID B9766B59-9566-4402-BC1F-2EE2A276D836) |
饮用药水速度削减(Drinking speed penalty) | 固定值为-0.25,应用于正在喝药水的女巫中。 | generic.movementSpeed (Operation 0; 女巫; UUID 5CD17E52-A79A-43D3-A529-90FDE04B181E) |
在僵尸随机生成中附带的修饰符(Random zombie-spawn bonus) | 由生成而产生,是一个在0.0到1.5之间的伪随机数。 | generic.followRange (Operation 2; 僵尸) |
生成精英僵尸时所附带的修饰符(Leader zombie bonus) | 有很小的概率在生成一个僵尸时出现。值为一个0.5至0.75之间的伪随机数并应用于僵尸连带生成新僵尸的可能性,或者是一个1.0至4.0至案件的伪随机数并应用于generic.maxHealth。 | zombie.spawnReinforcements (Operation 0; 僵尸), generic.maxHealth (Operation 2; Zombies) |
生成了新僵尸的僵尸的代价(Zombie reinforcement caller charge) | 固定值为-0.05*当一个僵尸将其他僵尸作为援军生成于周围时产生。 | zombie.spawnReinforcements (Operation 0; 僵尸) |
被僵尸作为援军生成的新僵尸的代价(Zombie reinforcement callee charge) | 固定值为-0.05*当一个僵尸作为援军被其他僵尸生成于周围时产生。 | zombie.spawnReinforcements (Operation 0; 僵尸) |
potion.moveSpeed 或 potion.moveSpeed # (#代表药水的等级) | 固定值为0.2*,应用于有速度效果时,可由药水等级增倍。 | generic.movementSpeed (Operation 2; 所有活跃的实体; UUID 91AEAA56-376B-4498-935B-2F7F68070635) |
potion.moveSlowdown 或 potion.moveSlowdown # (#代表药水的等级) | 固定值为-0.15*,应用于有缓慢效果时,可由药水等级增倍。 | generic.movementSpeed (Operation 2; 所有活跃的实体; UUID 7107DE5E-7CE8-4030-940E-514C1F160890) |
potion.damageBoost 或 potion.damageBoost # (#代表药水的等级) | 固定值为3,应用于有力量效果时,可由药水等级增倍。 | generic.attackDamage (Operation 2; 所有活跃的实体; UUID 648D7064-6A60-4F59-8ABE-C2C23A6DD7A9) |
potion.weakness 或 potion.weakness # (#代表药水的等级) | 固定值为2,应用于有虚弱效果时,可由药水等级增倍。 | generic.attackDamage (Operation 0; 所有活跃的实体; UUID 22653B89-116E-49DC-9B6B-9971489B5BE5) |
potion.healthBoost 或 potion.healthBoost # (#代表药水的等级) | 固定值为4,应用于有生命提升效果时,可由药水等级增倍。 | generic.maxHealth (Operation 0; 所有活跃的实体; UUID 5D6F0BA2-1186-46AC-B896-C61C5CEE99CC) |
effect.luck 或 effect.luck# (#代表药水的等级) | 固定值为1,乘以效果的等级。 | generic.luck(Operation 0; 所有活跃的实体; UUID 03C3C89D-7037-4B42-869F-B146BCB64D2E) |
effect.unluck 或 effect.unluck # (#代表药水的等级) | 固定值为-1,乘以效果的等级。 | generic.luck(Operation 0; 所有活跃的实体; UUID CC5AF142-2BD2-4215-B636-2605AED11727) |
未知修饰符 | 未知; 在终端读取服务器所传送的属性数据时出现。 | 可变 |
历史
Java版 | |||||
---|---|---|---|---|---|
1.6.1 | 13w16a | 加入了属性。 | |||
1.7.2 | 13w36a | 属性/修饰符可以在没有第三方的情况下使用NBT添加数据标签give和summon添加到物品或者生物。 | |||
1.9 | 15w34b | 加入了攻击速度属性。 | |||
15w36d | 加入了盔甲属性。 | ||||
15w44b | 加入了幸运值属性。 | ||||
1.9.1-pre1 | 加入了盔甲韧性属性。 | ||||
Java版(即将到来) | |||||
1.16 | 20w14a | 更改了部分属性的ID。 | |||
物品和实体不再会保留未知的属性。 | |||||
20w17a | 加入了/attribute 以更改或读取属性。 | ||||
携带版Alpha | |||||
0.12.1 | build 1 | 加入了属性。 |