曲曲效果注册表

[!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。

相关条目