
效果控制
高度可定制的药水效果施加与移除器。

高度可定制的药水效果添加与移除模组。
Effect Control 是 In Control! 的补充模组,为药水效果提供更多控制选项。
配置
config/effectcontrol-common.toml
effects 中的每个条目都是一条规则:以逗号分隔的 key=value 对。
effects = [
"effect=minecraft:strength, duration=30, trigger=kill, entity=minecraft:zombie",
"effect=minecraft:regeneration, duration=20, trigger=consume, item=minecraft:golden_apple",
"effect=minecraft:fire_resistance, duration=infinite, trigger=enter, dimension=minecraft:the_nether",
"effect=minecraft:fire_resistance, trigger=leave, dimension=minecraft:the_nether, action=remove"
]
效果属性
| 键 | 含义 | 默认值 |
|---|---|---|
trigger |
触发规则的条件。 | respawn |
effect |
药水效果ID。除非规则仅设置标志,否则必填。 | |
duration |
秒数,或 infinite。 |
30 |
level |
1 为等级 I,2 为等级 II。 |
1 |
action |
give 或 remove。 |
give |
ambient |
使用柔和的信标粒子效果。 | false |
particles |
是否显示粒子效果。 | true |
icon |
是否在 HUD 上显示图标。 | true |
hidden |
particles=false, icon=false 的简写。 |
false |
触发条件
由玩家进行的操作触发:
| 触发条件 | 触发时机 | 有用的过滤器 |
|---|---|---|
join |
玩家登录时 | |
first_join |
玩家首次登录(每人仅一次) | |
respawn |
玩家死亡后重生时 | dimension |
end_return |
玩家通过出口传送门离开末地时 | |
any |
join、respawn 或 end_return 任一情况 |
|
enter / leave |
进入 / 离开某个维度时 | dimension(必需) |
kill |
玩家击杀某物时 | entity, source |
hurt |
玩家对某物造成伤害时 | entity, source |
hurt_by |
玩家受到伤害时 | entity, source |
use |
玩家在空中右键使用物品时,例如末影珍珠或桶 | item |
consume |
玩家完成进食或饮水时 | item |
shoot |
玩家拉弓射箭时 | item |
release |
玩家松开持有的物品时,例如三叉戟 | item |
pickup |
玩家拾取物品时 | item |
container |
玩家打开容器或物品栏时 | |
advancement |
玩家获得进度时 | advancement |
craft / smelt |
合成 / 烧炼出物品时 | item |
fish |
玩家钓鱼收竿时 | item |
tame / breed |
驯服 / 繁殖动物时 | entity |
trade |
村民交易完成时 | item |
level_up |
玩家获得经验等级时 | |
tool_broken |
手持物品损坏时 | item |
持续性的玩家状态,在进入或离开该状态时触发。它们成对出现,因此可以将 give 与对应的 remove 配对使用:
| 触发条件 | 条件成立时 | 必要条件 |
|---|---|---|
near / away |
某物在 radius 范围内时 |
radius 和 block 或 entity |
looking / not_looking |
玩家正在注视某物时 | block 或 entity,radius 可选(默认 5) |
sneaking / not_sneaking |
玩家正在潜行时 | |
sprinting / not_sprinting |
玩家正在疾跑时 | |
on_fire / not_on_fire |
玩家身上着火时 | |
in_fluid / not_in_fluid |
玩家处于流体中时 | fluid |
riding / not_riding |
玩家骑乘生物时 | entity 可选 |
sleeping / not_sleeping |
玩家在床中时 | |
underwater / not_underwater |
玩家的头部浸没在水中时 |
大多数触发条件接受替代拼写,你可以使用自己喜欢的写法:damage 或 attack 代替 hurt;takedamagefrom 或 damaged_by 代替 hurt_by;eat 或 drink 代替 consume;use_item 或 interact 代替 use;inventory 或 open 代替 container;achievement 代替 advancement;always 代替 any;every_join 或 login 代替 join;every_respawn 或 death 代替 respawn;end 代替 end_return;enter_dimension 代替 enter;leave_dimension 或 exit 代替 leave;fire 代替 shoot;when_near 代替 near;not_near 或 leave_near 代替 away;once 代替 first_join;look 或 looking_at 代替 looking;look_away 代替 not_looking;sneak 或 crouching 代替 sneaking;sprint 代替 sprinting;burning 代替 on_fire;mounted 代替 riding;dismounted 代替 not_riding;asleep 代替 sleeping;awake 代替 not_sleeping;submerged 代替 underwater;in_liquid / not_in_liquid 代替 in_fluid / not_in_fluid;levelup 代替 level_up;item_broken 代替 tool_broken。
过滤器键也有别名:mob 代替 entity,armor 代替 wearing,damage_type 代替 source,liquid 代替 fluid,xp 代替 xp_level,tag 代替 nbt,has/without 代替 requires/missing,以及 set_flag/clear_flag/flagged/unflagged 代替 set/unset/if_set/if_unset。
过滤器
以下任何一项都可用来缩小规则范围。重复某个键以接受多个值;规则需要你所用的每个键至少匹配一个值。
| 键 | 匹配条件 | 示例 |
|---|---|---|
dimension |
规则所涉及的维度 | dimension=minecraft:the_nether |
block |
方块 ID | block=minecraft:diamond_ore |
entity |
实体类型 ID | entity=minecraft:creeper |
item |
物品 ID | item=minecraft:golden_apple |
source |
伤害类型(原版命名) | source=lava |
advancement |
进度 ID | advancement=minecraft:story/mine_diamond |
radius |
方块数,1 到 64 |
radius=8 |
x y z |
坐标,精确值或范围 | y=50..100, y=..0, x=64.. |
time |
游戏刻 0..24000,或名称 |
time=night, time=0..6000 |
weather |
clear、rain 或 thunder |
weather=thunder |
days |
世界已流逝的天数 | days=100.. |
stat + count |
玩家统计和其数值 | stat=killed:minecraft:zombie, count=100.. |
nbt |
物品 NBT,进行子集匹配 | nbt={Damage:0} |
health |
玩家生命值(点数) | health=..6 |
xp_level |
经验等级 | xp_level=30.. |
light |
玩家所在位置的光照等级 | light=..7 |
biome |
生物群系 ID | biome=minecraft:desert |
tag |
玩家身上的计分板标签 | tag=vip |
gamemode |
survival creative adventure spectator |
gamemode=survival |
difficulty |
peaceful easy normal hard |
difficulty=hard |
wearing |
护甲槽中穿戴的物品 | wearing=minecraft:diamond_helmet |
fluid |
water 或 lava |
fluid=lava |
chance |
规则触发的百分比几率,1 到 100 |
chance=25 |
cooldown |
再次触发规则前的秒数 | cooldown=60 |
时间名称:day、night、noon、midnight、sunrise(或 dawn)、sunset(或 dusk)。
统计类型:mined、killed、killed_by、used、crafted、broken、picked_up、dropped、custom。count 默认为 1..,表示至少一次。
从 x 开始的所有条件都适用于每个触发条件:
effects = [
"effect=minecraft:poison, duration=10, trigger=pickup, item=minecraft:diamond, y=..0, time=night",
"effect=minecraft:strength, duration=60, trigger=join, stat=killed:minecraft:zombie, count=100.."
]
条件
requires 和 missing 根据玩家已有的效果来限制规则。两者均可重复,且所有条件必须满足。has 和 without 是它们的别名。
effects = [
"effect=minecraft:regeneration, duration=15, trigger=join, requires=minecraft:poison",
"effect=minecraft:strength, duration=30, trigger=respawn, missing=minecraft:weakness"
]
条件读取的是规则集运行前的玩家状态,因此同一事件中的规则无法看到彼此的操作结果。被条件阻止的规则不计入其 limit 次数。
标志
标志是每个玩家永久性的标记,保存在世界中。你可以用它来实现“此事一旦发生,便永不再发生”之类的效果。
| 键 | 作用 |
|---|---|
set |
当规则触发时设置该标志 |
unset |
当规则触发时清除该标志 |
if_set |
仅当标志被设置时触发 |
if_unset |
仅当标志未被设置时触发 |
effects = [
"trigger=advancement, advancement=minecraft:end/kill_dragon, set=dragon_slain",
"effect=minecraft:strength, duration=60, trigger=join, if_unset=dragon_slain",
"trigger=consume, item=minecraft:milk_bucket, unset=dragon_slain"
]
击杀末影龙后力量效果将永久停止。喝下牛奶后效果又会恢复。仅写入标志的规则无需 effect。
Curios
wearing 过滤器会检查护甲槽,当安装了 Curios 时,也会检查 Curios 饰品槽:
effects = [
"effect=minecraft:speed, duration=30, trigger=consume, item=minecraft:bread, wearing=curios:ring"
]
限制
limit 可在规则为每个玩家授予若干次效果后停止该规则,0 表示永不停止。id 用于命名计数器,默认为效果、触发条件和过滤器的组合。因此,当两条规则需要共享一个计数器时,应给它们相同的 id。
时机
apply_delay_ticks(0 到 200)在应用效果前等待。如果另一个模组在玩家出生时清除效果,可使用此选项。
scan_interval_ticks(1 到 200,默认 20)是持续触发条件重新检查的频率。near 的方块扫描会扫描 radius 范围的球体。
命令
这会清除已保存的 limit 计数器和标志。
| 命令 | 清除对象 |
|---|---|
/effectcontrol reset |
运行该命令的玩家 |
/effectcontrol reset <目标> |
选择器选中的玩家 |
/effectcontrol reset all |
所有已存储的玩家,无论是否在线 |
注记
来自其他模组的效果、方块、物品、实体和维度都可以正常工作,只需使用它们的 ID。没有命名空间的 ID 默认为 minecraft:。无法读取的条目会被跳过并在日志中报告,未安装的 ID 也会同样处理。
常见问题
发现 Bug?
请在 Github issues 页面 提交问题报告,并附上:
- 问题描述。
- 相关日志。
- Effect Control 的版本。
- 正在使用的加载器(例如:Forge 1.20.1、NeoForge 1.21.1)。
想建议新功能?
您可以在 Github issues 页面 提交功能建议,或在评论区留言。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。