/effect 状态效果
给予或移除实体的状态效果,支持设置持续时间、等级、隐藏粒子与无限时长
给予或移除玩家与实体的状态效果,可设置持续时间、等级与是否隐藏粒子。基岩版 1.21.40 起新增了 infinite 关键字用于给予无限时长效果,并支持 clear <效果> 清除指定效果。
原理
状态效果是附着在实体上的一个持续状态,游戏为每个实体维护一张「活跃效果」表,表中的每条记录包含效果 ID、剩余时长(以游戏刻计)、放大器等级以及是否显示粒子等字段。/effect 命令并不直接改写实体的血量或速度等属性,而是先解析目标选择器得到一批实体,再向这些实体的活跃效果表里插入或更新对应条目。效果真正产生作用,是由游戏在每个游戏刻读取这张表、按效果类型执行相应逻辑来实现的。
命令里的 [秒] 参数最终会换算成游戏刻(每秒 20 刻)存入实体。每个游戏刻,游戏把剩余时长减 1,并根据效果类型执行周期性动作——例如 poison 每隔一段时间扣血、regeneration 每隔一段时间回血,而 speed、strength 这类效果则持续参与移动或伤害公式的计算。剩余时长减到 0 时该条目被移除,实体恢复常态。instant_health、instant_damage 与 saturation 三个瞬间效果是例外:它们的时长参数直接按游戏刻解读,并且只生效一次。
[放大器] 采用 0 起算的整数,0 表示 I 级、1 表示 II 级,依此类推;游戏在计算效果强度时把「放大器 + 1」作为等级因子,例如 speed 每级额外提升 20% 移动速度。当目标已经拥有同名效果时,命令会用新参数刷新该条目:剩余时长被重置,放大器与隐藏粒子标志按新值写入。把 [秒] 设为 0 会移除目标已拥有的同名效果;时长超过 2,040,109,465 秒的数值会提示成功但实际不生效。基岩版还要求效果 ID 必须是字母 ID,不接受数字 ID。
活跃效果表是一个共享的底层系统,药水、信标、金苹果等途径最终都是向这张表写入条目,因此用 /effect clear 也能移除由这些途径施加的同名效果。信标赋予的效果带有「环境」标记,通常不显示粒子且图标样式不同,但 /effect 仍按效果 ID 统一读写这些条目。[隐藏粒子] 只控制效果自带的旋涡粒子,隐藏后若要补充视觉反馈,可以另外使用 /particle 生成自定义粒子。
语法
给予效果:
/effect <目标> <效果> [秒] [放大器] [隐藏粒子]
给予无限时长效果(1.21.40+):
/effect <目标> <效果> infinite [放大器] [隐藏粒子]
清除效果:
/effect <目标> clear
/effect <目标> clear <效果>(1.21.40+)
基岩版在 1.21.40 之前没有 infinite 关键字,也无法指定清除单一效果,旧版的清除语法只有 /effect <目标> clear。
参数
<目标>— 目标选择器或玩家名。指定要给予或清除效果的玩家或实体,可用@p、@a、@r、@s或@e;其中@e配合类型参数可以选中非玩家实体(如@e[type=zombie])。<效果>— 效果 ID。指定要给予或清除的状态效果,基岩版要求使用字母 ID(如speed、strength),不能使用数字 ID。[秒]— 整数,持续时间,单位秒。缺省为 30 秒;设为 0 会移除目标已拥有的同名效果。取值范围 0 到 2,147,483,647,但超过 2,040,109,465 时虽然提示成功却不产生效果。instant_health、instant_damage、saturation三个瞬间效果的该参数以游戏刻为单位。[放大器]— 整数,效果等级。0 表示 I 级、1 表示 II 级,依此类推;缺省为 0,不接受负数。[隐藏粒子]— 布尔值。true隐藏该效果自带的旋涡粒子,缺省为false。infinite— 关键字,表示无限时长(1.21.40+)。它替代[秒]的位置,效果将持续到被清除或实体死亡。clear— 关键字,进入清除模式。不带<效果>时清除目标的全部状态效果,带<效果>时只清除指定效果(后者需 1.21.40+)。
常用效果
| 效果 ID | 中文名 | 说明 |
|---|---|---|
speed | 速度 | 每级提升 20% 移动速度 |
slowness | 缓慢 | 降低移动速度 |
haste | 急迫 | 提升挖掘与攻击速度 |
mining_fatigue | 挖掘疲劳 | 降低挖掘与攻击速度 |
strength | 力量 | 提升近战攻击伤害 |
instant_health | 瞬间治疗 | 立即恢复生命 |
instant_damage | 瞬间伤害 | 立即造成伤害 |
jump_boost | 跳跃提升 | 提升跳跃高度并减免摔落伤害 |
regeneration | 生命恢复 | 周期性恢复生命 |
resistance | 抗性提升 | 减免受到的伤害 |
fire_resistance | 抗火 | 免疫火焰与熔岩伤害 |
water_breathing | 水下呼吸 | 水下不消耗氧气 |
invisibility | 隐身 | 使实体不可见 |
night_vision | 夜视 | 黑暗中视野全亮 |
saturation | 饱和 | 立即恢复饥饿值 |
absorption | 伤害吸收 | 提供额外吸收生命 |
levitation | 飘浮 | 使实体向上飘起 |
slow_falling | 缓降 | 减缓下落速度并免疫摔落伤害 |
conduit_power | 潮涌能量 | 提供水下呼吸、夜视与急迫 |
health_boost | 生命提升 | 临时提升生命上限 |
blindness | 失明 | 视野严重受限 |
nausea | 反胃 | 画面扭曲晃动 |
hunger | 饥饿 | 加速饥饿值消耗 |
weakness | 虚弱 | 降低近战攻击伤害 |
poison | 中毒 | 周期性造成伤害 |
wither | 凋零 | 周期性造成伤害,可致死 |
darkness | 黑暗 | 视野周期性变暗 |
bad_omen | 不祥之兆 | 进入村庄时触发袭击 |
village_hero | 村庄英雄 | 袭击胜利后获得交易折扣 |
示例
给予自己 30 秒的速度 II:
/effect @s speed 30 1
给自己施加 30 秒的速度 II 效果,移动速度提升 40%。
给予所有玩家无限时长的夜视并隐藏粒子:
/effect @a night_vision infinite 0 true
给所有在线玩家施加无限时长的夜视效果,并隐藏粒子旋涡,效果持续到被清除或玩家死亡。
清除自己的全部状态效果:
/effect @s clear
移除自己身上的所有状态效果,包括由药水和信标施加的效果。
仅清除所有玩家的速度效果:
/effect @a clear speed
只移除所有在线玩家的速度效果,其它状态效果不受影响。
给所有僵尸施加减速 III 并隐藏粒子:
/effect @e[type=zombie] slowness 30 2 true
给世界中的所有僵尸施加 30 秒的减速 III 效果,并隐藏粒子旋涡。
用 0 秒时长移除最近玩家的中毒效果:
/effect @p poison 0
把 [秒] 设为 0 会把最近玩家已有的中毒效果变更为 0 秒,等效于移除该效果。
基岩版注意
- 需要开启作弊并具备 OP 等级 1;Java 版需要权限等级 2。
- 与 Java 版的最大差异:Java 版使用
give与clear子命令(如/effect give @s speed 60 1、/effect clear @a),基岩版没有give关键字,效果 ID 直接跟在目标之后,clear则放在目标之后作为清除标记。 - 基岩版效果 ID 必须使用字母 ID(如
speed),不接受 Java 版曾支持的数字 ID。 infinite关键字与clear <效果>(清除指定效果)是 1.21.40 新增的语法,旧版可用较大的[秒]值或/effect <目标> clear代替。- 放大器 0 起算,基岩版不接受负数;Java 版 1.20.5 起把放大器上限由 255 改为 127,基岩版上限以实际测试为准(待验证)。
- 时长参数以秒为单位,但
instant_health、instant_damage、saturation三个瞬间效果以游戏刻为单位。 - 基岩版还包含独有的
fatal_poison(致命中毒)效果 ID,Java 版没有。 - 网易版与国际版在部分效果 ID 与行为上可能存在差异,本文档基于国际版编写。
常见问题
执行 /effect 时提示没有权限是怎么回事?
基岩版的 /effect 需要世界开启「作弊」,且执行者具备 OP 等级 1。若世界设置中未开启作弊,或你不是该世界的操作员,命令会被拒绝执行。
如何让状态效果不显示旋涡粒子?
把 [隐藏粒子] 参数设为 true 即可,例如 /effect @s invisibility 60 0 true。隐藏后效果依旧生效,只是不显示粒子;若需要替代的视觉反馈,可配合 /particle 自定义粒子。
旧版本没有 infinite 关键字,如何给予「永久」效果?
1.21.40 之前的版本可以用一个极大的 [秒] 值近似实现,例如 /effect @s night_vision 1000000 0 true。注意超过 2,040,109,465 秒会提示成功但不生效,所以数值不要超过该上限。1.21.40+ 直接使用 infinite 关键字即可。
/effect 能作用于怪物等非玩家实体吗?
可以。用 @e 选择器并配合类型参数即可,例如 /effect @e[type=zombie] slowness 30 1 会给所有僵尸施加减速。虽然官方文档把目标参数标为 player,但 @e[type=...] 在基岩版中能够选中并作用于非玩家实体。
相关命令
/particle— 生成自定义粒子,可替代被隐藏的效果粒子提供视觉反馈。/playsound— 播放音效,常用于给予效果时增强反馈。/clear— 清除物品,同为「清除」语义的命令,注意它操作的是物品栏而非状态效果。/execute— 配合条件子命令按需给予或清除效果。/summon— 召唤实体,可与效果配合设定生物状态。