曲曲效果注册表
[!INFO] 实现类:
shukaro.warptheory.handlers.WarpEventRegistry(枚举) 枚举常量:50 个,底层事件类 43 个(磁盘 44 个)
⚠️ 注册方式是枚举,不是工厂方法
WarpEventRegistry 是一个 public enum,50 个常量各自持有一个
Function<Integer, IWarpEvent> 构造器:
private final Function<Integer, IWarpEvent> constructor;
private final String name;
private final String description;
private final boolean defaultEnabled;
private final int defaultMinWarp;
private final boolean isGlobal;
private final boolean isServerKick;
⚠️ 不能靠数 new WarpXxx( 调用点:50 个常量中有 11 个用 lambda
而非方法引用,即:
| 写法 | 常量数 | 例子 |
|---|---|---|
WarpBats::new 方法引用 |
39 | BATS(WarpBats::new, "Bats", …) |
warp -> new WarpXxx(…) lambda |
11 | POISON(warp -> new WarpBuff("poison", warp, …), …) |
11 个 lambda 常量为:POISON、NAUSEA、JUMP、BLIND、WITHER_POTION
(5 个 WarpBuff)、FAKE_EXPLOSION、FAKE_CREEPER、FAKE_ENDERMAN、
FAKE_WITHER、FAKE_DISCORD_PING、FAKE_DISCORD_VOICE_CHANNEL_JOIN
(6 个 WarpFakeSound / WarpFakeSoundBehind / WarpFakeSoundRateLimited)。
正确做法是枚举常量解析(50)配合类名集合差运算。
集合差运算结果
enum 常量解析 : 50
warpevents/ 下 .java : 44
枚举引用到的类 : 43
磁盘有但枚举未引用 : WarpFakeBlock <-- 死代码
引用了但磁盘没有 : (空集)
⚠️ WarpFakeBlock 是完全的死类:全仓 grep 'WarpFakeBlock'
只命中它自己的类声明与构造器,无任何外部引用,且
doEvent() 直接 return false。它不是 50 个效果之一。
50 个效果的分组
| 组 | 数量 | 条目 |
|---|---|---|
| Default Warp Theory | 22 | 默认曲曲效果 |
| GTNH 追加 | 25 | GTNH 曲曲效果 |
| 需 GregTech | 3 | GregTech 曲曲效果 |
六个构造参数的含义
| 位置 | 字段 | 含义 |
|---|---|---|
| 1 | constructor |
Function<Integer, IWarpEvent>,参数为 minWarp |
| 2 | name |
英文名,用于生成配置键名 |
| 3 | description |
英文描述,用于生成配置注释 |
| 4 | defaultEnabled |
默认是否启用 |
| 5 | defaultMinWarp |
默认最低曲曲值门槛 |
| 6 | isGlobal |
是否对所有玩家生效(否则仅触发者) |
| 7 | isServerKick |
是否可能踢出服务器(影响配置注释) |
配置键由 name/description 模板生成
loadConfig(Configuration) 用两个格式串派生键名与注释:
private static final String CONFIG_ENABLED_NAME_FORMAT_STRING = "allow%sEffect";
private static final String CONFIG_MIN_WARP_NAME_FORMAT_STRING = "minWarp%sEffect";
即 name = "Bats" 产生配置键 allowBatsEffect,
name = "WitherSpawn" 产生 allowWitherSpawnEffect。
注意 name 字段是显示名(如 FakeBoom)而非枚举常量名
(如 FAKE_EXPLOSION),两者并不一致。
| 配置分类 | 键格式 | 类型 | 范围 |
|---|---|---|---|
warp_effects |
allow<Name>Effect |
boolean | — |
warp_levels |
minWarp<Name>Effect |
int | 1 … 200 |
isServerKick 为真时,启用项的注释会追加
" May cause server errors."(唯一为 FALL / WorldHole)。
曲曲值上限
private static final int MAX_WARP_FOR_EFFECTS = 200;
minWarp 的配置上限与该常量一致。50 个效果的
defaultMinWarp 范围为 5 ~ 200:
| 最低 | 效果 | 最高 | 效果 |
|---|---|---|---|
| 5 | EYE_BLINK、MESSAGE |
200 | WITHER(WitherSpawn) |
WITHER 的 defaultMinWarp 恰好等于上限 200,
即只有曲曲值满 200 时凋灵效果才会出现。
默认禁用的 6 个效果
defaultEnabled = false 的常量(其余 44 个默认启用):
| 常量 | name | defaultMinWarp | isGlobal | isServerKick |
|---|---|---|---|---|
EARS |
Deaf | 75 | 否 | 否 |
TONGUE |
Mute | 75 | 否 | 否 |
CHESTS |
Chest | 175 | 否 | 否 |
FALL |
WorldHole | 150 | 否 | 是 |
EYE_BLINK |
EyeBlink | 5 | 否 | 否 |
WITHER_POTION |
WitherPotion | 80 | 否 | 否 |
EARS/TONGUE/CHESTS/FALL/EYE_BLINK 是上游原版选项,
其余为 GTNH 追加。WITHER_POTION 与 WITHER 名字相近但是两个独立效果。
isGlobal = true 的 11 个效果
isGlobal 为真时效果对所有在线玩家施加,而不仅触发者:
DECAY、SWAMP、CHESTS、ACCELERATION、FALL、RAIN、
WITHER、COUNTDOWN_BOMB、MUSHROOMS、OBSIDIAN、SNOW。
其中 CHESTS(物品栏打乱)与 FALL(世界洞)默认关闭。
唯一被覆写 createWarpEvent 的常量
GREGTECH_FAKE_SOUND 是 50 个中唯一带类体的常量,
覆写了 createWarpEvent:
@Override
public void createWarpEvent(Consumer<IWarpEvent> consumer) {
if (Loader.isModLoaded("gregtech") && Loader.isModLoaded("IC2NuclearControl")) {
super.createWarpEvent(consumer);
}
}
源码注释标明 // This doesn't need a change to gregtech_nh。
注意它需要 两个 mod 同时存在(gregtech 且 IC2NuclearControl),
缺任一则该效果静默不创建(无日志)。
createWarpEvent 的契约(源码 Javadoc):
This method should only be called after loadConfig(Configuration) has
been called. —— 即必须先加载配置才能创建事件,
否则 isEnabled 仍为构造器设的 false、minWarp 为 0。
相关条目
- 默认曲曲效果 - 22 个上游效果
- GTNH 曲曲效果 - 25 个 GTNH 追加
- GregTech 曲曲效果 - 3 个需外部 mod
- 曲曲机制 - 曲曲值如何累积与消耗
- Warptheory 配置 - 全局开关