首页 男生 游戏竞技 Minecraft指令手册

第一百零六章 属性修饰符 下-最终倍乘和/attribute指令

Minecraft指令手册 你好MC 4280 2024-07-09 15:29

  在上一章,我们了解了Obr /eration的『属性增量』和『倍率增量』计算模式,还有一个『最终倍乘』。那什么是最终倍乘呢?

  『最终倍乘』是这样计算的:

  R=C₁×(1+A₁)×(1+A₂)×......×(1+Aₙ)

  C₁=C₀×(1+a₁+a₂+.....+aₙ)

  C₀=C+m₁+m₂+.....+mₙ

  R······最终结果

  A₁₂...ₙ······计算模式为『最终倍乘』的修饰符的Amount值

  a₁₂...ₙ······计算模式为『倍率增量』的修饰符的Amount值

  m₁₂...ₙ······计算模式为『属性增量』的修饰符的Amount值

  C₁······『倍率增量』计算结果

  C₀······『属性增量』计算结果

  举个例子,假设现在有这些修饰符:

  {AttributeName:'generic.max_health',Amount:5.0,Obr /eration:0}

  {AttributeName:'generic.max_health',Amount:3.0,Obr /eration:0}

  {AttributeName:'generic.max_health',Amount:2.0,Obr /eration:1}

  {AttributeName:'generic.max_health',Amount:1.5,Obr /eration:1}

  {AttributeName:'generic.max_health',Amount:1.1,Obr /eration:2}

  {AttributeName:'generic.max_health',Amount:0.1,Obr /eration:2}

  当这些修饰符在一个玩家身上全部生效,且该名玩家的最大生命值仅仅受这些修饰符影响时,这名玩家的生命值上限将会从20.0点变成291.06点。这个『291.06』是这样得出来的:

  [(20+5+3)×(1+2+1.5)]×(1+1.1)×(1+0.1)

  ↓先计算『属性增量』↓

  [28×(1+2+1.5)]×(1+1.1)×(1+0.1)

  ↓再计算『倍率增量』↓

  126×(1+1.1)×(1+0.1)

  ↓最后计算『最终倍乘』↓

  291.06

  这就是『最终倍乘』,到这Obr /eration的全部内容也就讲完了。

  但这不代表本章到此结束。还记得上一章提到的/attribute指令吗?让我们来了解下这指令如何使用:

  /attribute

  作用:可以更改和读取属性

  存在版本:Java1.16-今

  需要权限等级:Java-2

  需要作弊:是

  格式:

  /attribute <目标玩家/生物><属性>[base] get [乘数]

  \\返回指定属性的『总值』。如果指定了base,则返回『基值』\\

  /attribute <目标玩家/生物><属性> base set <值>

  \\将指定属性的『基值』设定为指定的值\\

  /attribute <目标玩家/生物><属性> modifier add <UUID><名字><值>(add|multibr /ly|multibr /ly_base)

  \\如果没有UUID相同的属性修饰符,就给指定属性添加上属性修饰符\\

  /attribute <目标玩家/生物><属性> modifier remove <UUID>

  \\移除指定属性的具有指定UUID的修饰符\\

  /attribute <目标玩家/生物><属性> modifier value get <UUID>[乘数]

  \\返回具有指定UUID的属性修饰符的值\\

  使用这条指令可以很方便地修改实体的属性,以及为实体添加上属性修饰符。只不过由于/attribute指令是直接给实体添加上修饰符,没有物品作为载体,所以在这边添加的修饰符无需指定『栏位』参数。

  让我们来试一试,直接修改属性的值。比如,把我们的生命值上限改成40点:

  /attribute @s generic.max_health base set 40.0

  →实体xxx的属性最大生命值的基值已设置为40.0

  很好,这下子我们就有40点生命值了。只不过要注意,玩家的属性会在死亡后重置,也就是说如果你死一次,最大生命值就会变回20点。

  get子命令可以获得我们属性的总值或基值。总值也就是经过修饰符修饰后最终的值,基值也就是没有修饰过的初始值。比如:

  /attribute @s generic.max_health base get

  由于上面我们已经把基值改成了40.0,因此这将会返回:

  →实体xxx的属性最大生命值的基值为40.0

  等等,这个『乘数』参数有什么用?让我们试一试:

  /attribute @s generic.max_health base get 2.0

  →实体xxx的属性最大生命值的基值为40.0

  不难发现,这个乘数参数没有任何的用处.......呃,其实有用的。

  用在哪呢?execute的store子命令:

  ①/execute store result score @s health_max run attribute @s generic.max_health base get

  ②/execute store result score @s health_max run attribute @s generic.max_health base get 2.0

  指令①的返回值为正常的40.0,也就是将我们自己在health_max计分项上的值改为40。指令②虽然给我们的消息是40.0,但实际返回的是80.0,计分项上的分数也会改为80。

  所以,『乘数』参数并不是没有用,而是它的用处在于影响指令的返回值。

  修改属性还是很简单的。那使用/attribute给实体添加修饰符呢?让我们再试一试:

  /attribute @s generic.max_health modifier add 1-1-1-1-1 A 1.0 add

  →为实体xxx的属性最大生命值添加了修饰符00000001-0001-0001-0001-000000000001

  在上面的指令中,使用了『modifier』子命令的『add』子命令来添加一个修饰符,参数『1-1-1-1-1』指定了该修饰符的UUID,『A』指定了该修饰符的名称,『1.0』指定了该修饰符的值,『add』指定了该修饰符的计算模式是『属性增量』。其中得讲一下的就是这个UUID参数。

  在这边的UUID参数,填写的是『带连字符的十六进制UUID』。这种形式的UUID很常见,它长下面这样:

  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  详细内容会在第一百一十章讲到,在这边你只需要把这东西当做填写五个用连字符『-』连在一起的整数即可:

  1-1-1-1-1

  上面的『add』参数所在的位置,也可以填写multibr /ly_base(倍率增量)和multibr /ly(最终倍乘),来改变运算模式。

  现在,让我们看看的生命值上限是不是高达41.0:

  /attribute @s generic.max_health base get

  →实体xxx的属性最大生命值的基值为40.0

  ?怎么还是40.0?啊,是用错了,这获取到的是基值,应该把『base』参数去掉:

  /attribute @s generic.max_health get

  →实体xxx的属性最大生命值的值为41.0

  很好,所以你现在会用/attribute给实体添加属性修饰符了吗?

  remove和value get两个子命令的使用很简单,让我们试一试:

  /attribute @s minecraft:generic.max_health modifier value get 1-1-1-1-1 2.0

  →实体xxx的属性最大生命值中修饰符00000001-0001-0001-0001-000000000001值为1.0

  上面这条指令会返回这个修饰符的值。并且由于指定了乘数为『2.0』,这条指令的返回值还会是『2.0』(1.0×2.0)。

  /attribute @s minecraft:generic.max_health modifier remove 1-1-1-1-1

  →为实体xxx的属性最大生命值移除了修饰符00000001-0001-0001-0001-000000000001

  这样子我们就删掉了刚刚给我们自己添加的属性修饰符,生命值上限回到了40.0。

  本章到此为止。

  附录:/attribute历史

  Java

  1.16——加入了/attribute

目录
设置
手机
书架
书页
评论