第五十五章 effect-牛顿哭了
如果你现在要自定义一个僵尸小BOSS,你会怎么做?
使用NBT是最好的方式。但是如果是要在基岩版里面做呢?况且你现在也不会使用NBT,也就看得懂的水平罢了。
在这种情况下,我们就需要使用多个指令来达成目的,比方说可以使用/rebr /laceitem(/item)指令来给僵尸上装备。
但血量和防御力该怎么修改?
其实不难修改,我们只需要使用一个特别的东西:状态效果
状态效果(Status Effect)在Minecraft中非常有用,甚至可以提高生物的血量上限和防御力。我们可以使用指令/effect来给生物添加、清除状态效果:
/effect
作用:给一或多个实体添加或移除状态效果。
需要权限等级:Java-2,基岩-1
需要作弊:是
格式:
Java1.13更新之前和基岩版:
/effect <目标选择器> clear ——清除目标所拥有的所有状态效果。
/effect <目标选择器><状态效果ID>[<持续时间:秒>][<强度等级>][<是否隐藏粒子和图标:布尔值>]——给予目标指定的状态效果。
Java1.13更新后:
/effect clear <目标选择器>[状态效果ID]——清除目标所拥有的所有状态效果,或只清除指定的状态效果
/effect give <目标选择器><状态效果ID>[<秒数>][<强度等级>][<是否隐藏粒子和图标:布尔值>]——给予目标指定的状态效果。
格式总体来说还是十分简单的。现在让我们来试试给这只僵尸添加一个状态效果:
/effect @e[tybr /e=zombie,c=1] regeneration(Java1.13更新前和基岩版)
/effect give @e[tybr /e=zombie,limit=1,sort=nearest] regeneration (Java1.13更新后)
运行上面的指令,游戏将会给离执行地点最近的僵尸添加30秒的1级生命恢复效果(僵尸:危)。
如果我们想要将这个状态效果移除,可以使用:
/effect @e[tybr /e=zombie,c=1] clear (Java1.13更新前和基岩版)
/effect clear @e[tybr /e=zombie,limit=1,sort=nearest](Java1.13更新后)
这两条指令将会清除离执行地点最近的僵尸所拥有的所有状态效果。但如果这个僵尸拥有其他我们不想清除的状态效果怎么办?
在Java1.13及之后的版本中,我们可以执行/effect clear @e[tybr /e=zombie,limit=1,sort=nearest] regeneration来清除生命恢复效果而不清除其他状态效果。可是在Java1.13前的版本和基岩版中似乎没有清除指定状态效果的方法呀?
还是有的。
想一想,当目标已经有了指定的状态效果,我们再添加一个状态效果上去会发生什么?
再想一想,当两个名称、类型一样的文件相遇的时候,计算机会给你提示什么?
想到了没有?没错,只有两种可能性:覆盖和保留原来的状态效果
而Minecraft选择了什么呢?两者均有。当目标具有相同的状态效果时,游戏将会根据以下情况选择是保留还是覆盖:
①新状态效果持续时间比源状态效果要短,且持续时间不等于0,保留原来的状态效果
②新状态效果持续时间比源状态效果要长或相等,覆盖原来的状态效果
③新状态效果持续时间为0,移除原来的状态效果(实际上也是覆盖)。
发现了没有?我们可以通过添加一个持续时间为0的状态效果来移除指定的状态效果:
/effect @e[tybr /e=zombie,c=1] regeneration 0
这样子就成功保住了那只僵尸的命。而且,这个方法在Java1.13更新后仍然可用。
状态效果的持续时间最大为1000000秒(11.574天),如果指定更大的值将会被视为1000000秒。默认的持续时间是30秒,即半分钟。(注,在基岩版1.16.200版本之前,持续时间最大为2147483647,但超过2040109465秒的话就没有效果了)
持续时间的单位一般是秒,但有三个状态效果的值例外:瞬间伤害、瞬间治疗和饱和。它们三所使用的单位是游戏刻,默认的持续时间也被改为了1游戏刻。毕竟是“瞬间”嘛,一“瞬间”持续太长时间就不正常了。
现在可以尝试给我们的僵尸BOSS加血量上限了:
/effect @e[tybr /e=zombie,tag=boss] health_boost 1000000(Java1.13前和基岩版)
/effect give @e[tybr /e=zombie,tag=boss] health_boost 1000000 (Java1.13更新后)
health_boost是“生命提升”效果,可以提升生命最大值。上面的指令将会为我们的僵尸boss增加4点生命值上限,持续1000000秒。
对于一个Boss来说,24点血也太少了。因此我们要提高生命提升的等级。生命提升效果能够增加的最大生命值等于强度等级乘4的积。作为一个小型boss,100点血就足够了,也就是说我们需要给僵尸添加20级的生命提升:
/effect @e[tybr /e=zombie,tag=boss] health_boost 1000000,19(Java1.13前和基岩版)
/effect give @e[tybr /e=zombie,tag=boss] health_boost 1000000,19(Java1.13更新后)
(注:上面的逗号仅用于区分两个参数之用,实际在游戏中无需输入逗号)
你肯定会疑惑:不是添加20级吗,怎么是19级?
其实这就是添加20级。只不过这个“强度等级”参数有些特别,它的值范围是0~255。输入0相当于1级,输入1相当于2级.......输入255相当于256级。
明白了吧?
现在我们成功为僵尸提高了生命值上限。但是状态效果是有粒子的,到时候玩家过来打这个boss,发现这个boss有冒出粒子,不就露馅了么?
解决办法很简单。看见那个“是否隐藏粒子和图标”参数了没?默认它是false,如果将它改为true,游戏将会隐藏该状态效果的粒子,在Java版甚至还会把图标也给隐藏了。
现在你学会/effect了没?赶紧去游戏中尝试一下吧!
(注:在Minecraft中,状态效果持续时间超过1638秒的话,效果的持续时间将显示为**:**。在Java版中,计时仍然会照常进行。)
(你知道吗:在Java版中,当玩家拥有超过128级的跳跃效果时,玩家会因为特性而无法跳跃!)
effect历史:
Java
1.5——加入了/effect
1.6.1——加入了clear参数
1.8——加入了“是否隐藏粒子和图标”参数
1.13——更改了/effect的语法
1.15.2——较强效果覆盖较弱效果时,较弱效果只是被隐藏了。
携带版和基岩版
\\携带版\\
1.0.5——加入了/effect
\\基岩版\\
1.16.200——现在持续时间上限和Java版一样为1000000秒了。