You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Minecraft函数中仅执行一次命令,为100-199级玩家稳定添加生命提升效果?

我之前做Minecraft数据包时也碰到过这个一模一样的问题!根源在于health_boost效果的特殊机制——每次重新应用它时,游戏会强制把额外的生命值拉满,持续执行命令自然就会不断重置玩家的额外血量。要解决这个问题,我们需要只在玩家进入目标等级区间时一次性授予效果,而不是反复刷新它。

解决方案:基于状态标记的触发式效果管理

我们可以通过记分板跟踪玩家的状态,精准控制效果的授予与移除,具体步骤如下:

1. 创建状态跟踪记分板

首先创建一个记分板,用来记录玩家是否已经获得了生命提升效果,避免重复授予导致的血量重置:

scoreboard objectives add healthBoostStatus dummy

2. 给符合条件的新玩家授予效果

在重复执行的命令链中,仅针对等级在100-199之间且状态为0(未获得效果)的玩家,授予一个近乎永久的生命提升效果,并更新他们的状态标记:

# 授予长时长的生命提升效果(999999 tick约等于694小时,几乎永久)
execute as @a[level=100..199,scores={healthBoostStatus=0}] run effect give @s minecraft:health_boost 999999 0 true
# 将玩家状态标记为已获得效果
scoreboard players set @a[level=100..199,scores={healthBoostStatus=0}] healthBoostStatus 1

3. 给离开条件的玩家移除效果

同样在命令链中,检测那些状态为1但等级不在100-199区间的玩家,移除效果并重置他们的状态标记:

# 移除生命提升效果
execute as @a[scores={healthBoostStatus=1}] unless entity @s[level=100..199] run effect clear @s minecraft:health_boost
# 重置玩家状态标记
execute as @a[scores={healthBoostStatus=1}] unless entity @s[level=100..199] run scoreboard players set @s healthBoostStatus 0
原理说明
  • 不再持续刷新health_boost效果,而是一次性授予长时长效果,游戏不会反复重置额外生命值。
  • 记分板标记确保只有当玩家刚进入等级区间时才触发效果授予,避免重复操作。
  • 当玩家离开等级区间时,自动移除效果并重置状态,下次进入区间时会重新获得效果。

内容的提问来源于stack exchange,提问作者Alex

火山引擎 最新活动