效果控制

效果控制

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

图片

高度可定制的药水效果添加与移除模组。

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 页面 提交功能建议,或在评论区留言。