Theseus 模组文档
API 参考 / registry 包:注册表与资源标识

ModRegistries


全部注册表的统一入口,经 ModContext.registries() 取得。它取代旧 API 的多个独立注册表接口,使所有内容注册都写在同一种签名里:RegistryKey.of(...) + register(key, value)。新增内容类型 = 本接口 +1 个方法 + 宿主注册 1 个注册表实现(不再有「内容型注册表」与「钩子式注册」两套机制之分)。

宿主实现返回的是 per-mod 视图:写操作(register)先校验「键的命名空间 = 本模组 id」,读操作(get / contains / keys / keysByNamespace / isFrozen)零开销透传给全局注册表,因此模组既能写自己的内容,也能读内置内容与其它模组已注册的内容。

方法速览

方法用途
noteTypes()音符类型
gameModes()游戏模式
judgmentKinds()判定等级
chartExtensions()谱面 extensions 段解析器
hitEffectStyles()打击特效样式提供者
backgroundRenderers()背景渲染器
renderFilters()渲染滤镜
judgmentPolicies()判定窗口策略
judgmentAdjusters()判定结果调整器
collectibles()收集品
skins()音符皮肤
layerOverrides()渲染层默认绘制替换声明
customRenderLayers()自定义渲染层
judgmentWindowSynthesizers()判定窗口合成器
trackPoseAdjusters()轨道区位姿调整器
cameraPoseAdjusters()相机位姿调整器

完整签名

java
public interface ModRegistries {

    Registry<NoteTypeDefinition> noteTypes();

    Registry<GameModeDefinition> gameModes();

    Registry<JudgmentKindDefinition> judgmentKinds();

    Registry<ChartExtensionParser> chartExtensions();

    Registry<HitEffectStyleProvider> hitEffectStyles();

    Registry<BackgroundRenderer> backgroundRenderers();

    Registry<RenderFilter> renderFilters();

    Registry<JudgmentPolicy> judgmentPolicies();

    Registry<JudgmentAdjuster> judgmentAdjusters();

    Registry<CollectibleDefinition> collectibles();

    Registry<SkinProvider> skins();

    Registry<LayerOverride> layerOverrides();

    Registry<CustomRenderLayer> customRenderLayers();

    Registry<JudgmentWindowSynthesizer> judgmentWindowSynthesizers();

    Registry<TrackPoseAdjuster> trackPoseAdjusters();

    Registry<CameraPoseAdjuster> cameraPoseAdjusters();
}

noteTypes()

签名:

java
Registry<NoteTypeDefinition> noteTypes();

行为:音符类型注册表。宿主预注册内置类型 seecmd:normal / seecmd:hold / seecmd:barrier / seecmd:exploit / seecmd:payload。额外约束(宿主实现):serializationKey() 不能为空白,且不能与已注册类型重复——谱面 JSON 用 "type" 字符串选类型,两个类型共用同一 key 就无法区分,注册期直接抛 IllegalArgumentException。

示例:

java
ctx.registries().noteTypes().register(
        RegistryKey.of("mymod", "slide", NoteTypeDefinition.class), new SlideNoteType());

gameModes()

签名:

java
Registry<GameModeDefinition> gameModes();

行为:游戏模式注册表。宿主预注册 seecmd:normal / seecmd:autoplay / seecmd:disorder。注册后游戏模式可在模式选择处被选用。

示例:

java
ctx.registries().gameModes().register(
        RegistryKey.of("mymod", "mirror", GameModeDefinition.class), new MirrorMode());

judgmentKinds()

签名:

java
Registry<JudgmentKindDefinition> judgmentKinds();

行为:判定等级注册表。宿主预注册 seecmd:perfect / seecmd:great / seecmd:miss / seecmd:none。自定义等级用于扩展判定结果的展示与统计分类。

示例:

java
ctx.registries().judgmentKinds().register(
        RegistryKey.of("mymod", "good", JudgmentKindDefinition.class), new GoodKind());

chartExtensions()

签名:

java
Registry<ChartExtensionParser> chartExtensions();

行为:谱面 extensions 段的解析器注册表,注册键即谱面 JSON 中 extensions 对象里的 key。谱面加载时宿主按 key 找到对应解析器并交出该段 JSON。

示例:

java
ctx.registries().chartExtensions().register(
        RegistryKey.of("mymod", "stardust", ChartExtensionParser.class), new StardustExtension());

hitEffectStyles()

签名:

java
Registry<HitEffectStyleProvider> hitEffectStyles();

行为:打击特效样式提供者。 阶段 2 起为可组合语义(兑现 R-048):引擎触发打击特效时按注册顺序遍历全部 provider,所有返回非 null 样式的 provider 同时生效、按注册顺序依次绘制(不再「第一个非 null 整体生效、其余被遮蔽」);全部返回 null 时使用游戏默认文字特效。生成出的打击特效实例由宿主持有并投递生命周期事件(HitEffectLifecycleEvent),模组可经活动句柄查询/改属性(setDurationMs / setLane)/取消。

示例:

java
ctx.registries().hitEffectStyles().register(
        RegistryKey.of("mymod", "blink", HitEffectStyleProvider.class), new BlinkStyle());

backgroundRenderers()

签名:

java
Registry<BackgroundRenderer> backgroundRenderers();

行为:背景渲染器,绘制在游玩内容之前;多个渲染器按 zOrder() 升序执行。

示例:

java
ctx.registries().backgroundRenderers().register(
        RegistryKey.of("mymod", "solid", BackgroundRenderer.class), new SolidBackground());

renderFilters()

签名:

java
Registry<RenderFilter> renderFilters();

行为:渲染滤镜,叠加在游玩内容之上;多个滤镜按 zOrder() 升序执行。

示例:

java
ctx.registries().renderFilters().register(
        RegistryKey.of("mymod", "vignette", RenderFilter.class), new VignetteFilter());

judgmentPolicies()

签名:

java
Registry<JudgmentPolicy> judgmentPolicies();

行为:判定窗口策略(毫秒)。多项策略合并时取「最宽松生效」(逐字段取最大),宿主还会预注册内置默认策略 seecmd:default。

示例:

java
ctx.registries().judgmentPolicies().register(
        RegistryKey.of("mymod", "lenient", JudgmentPolicy.class), new LenientPolicy());

judgmentAdjusters()

签名:

java
Registry<JudgmentAdjuster> judgmentAdjusters();

行为:判定结果调整器,按注册顺序链式串联,前一个的输出作为后一个的输入。

示例:

java
ctx.registries().judgmentAdjusters().register(
        RegistryKey.of("mymod", "combo_boost", JudgmentAdjuster.class), new ComboBoostAdjuster());

collectibles()

签名:

java
Registry<CollectibleDefinition> collectibles();

行为:收集品。注册后由宿主转换为内核模型再进入收集品系统;内核侧使用的收集品 id 取注册键的 path(因此与文件收集品的既有 id 空间保持兼容),解锁时也用同一个 id 调 ModContext.unlockCollect(id)。

示例:

java
ctx.registries().collectibles().register(
        RegistryKey.of("mymod", "first_clear", CollectibleDefinition.class),
        CollectibleDefinition.of("首次通关").withUnlockedByDefault(true));

skins()

签名:

java
Registry<SkinProvider> skins();

行为:音符皮肤。注册键即玩家侧皮肤 id(如 mymod:neon):注册后出现在视觉资源包列表,选中即应用并随 settings.json 的 skin 键持久化;素材经 SkinProvider.image(SkinSlot) 返回的资源标识字符串由宿主既有资源管线加载。

示例:

java
ctx.registries().skins().register(
        RegistryKey.of("mymod", "neon", SkinProvider.class), new NeonSkin());

layerOverrides()

签名:

java
Registry<LayerOverride> layerOverrides();

行为:渲染层默认绘制替换声明(可插入层)。这是显式「跳过该层宿主默认绘制」的钩子,支持 BACKGROUND / FULLSCREEN / JUDGE_FX / HUD;具体契约见 LayerOverride 类注。

示例:

java
ctx.registries().layerOverrides().register(
        RegistryKey.of("mymod", "hud", LayerOverride.class), new HudOverride());

customRenderLayers()

签名:

java
Registry<CustomRenderLayer> customRenderLayers();

行为:自定义渲染层(可插入层)。模组声明带小数层号的新层并参与全局排序,具体契约见 CustomRenderLayer 类注。

示例:

java
ctx.registries().customRenderLayers().register(
        RegistryKey.of("mymod", "trail", CustomRenderLayer.class), new TrailLayer());

judgmentWindowSynthesizers()

签名:

java
Registry<JudgmentWindowSynthesizer> judgmentWindowSynthesizers();

行为:判定窗口合成器(第 14 注册表)——在「多模组判定策略逐字段取最大」合并之后按注册顺序链式应用,可收紧 / 非对称化 / 分档改造窗口;无注册项时行为零变化。确定性契约(纯函数、禁随机 / 墙钟 / 网络)见 JudgmentWindowSynthesizer 类注;合成器抛异常时被隔离跳过,不影响其它合成器与默认行为。

示例:

java
ctx.registries().judgmentWindowSynthesizers().register(
        RegistryKey.of("mymod", "tighten", JudgmentWindowSynthesizer.class), new TightenSynthesizer());

trackPoseAdjusters()

签名:

java
Registry<TrackPoseAdjuster> trackPoseAdjusters();

行为:轨道区位姿链(统一世界批 A,2026-10-11)。宿主每帧构造默认位姿沿链可变传阅、原地修改,链尾位姿交给渲染;前一个的输出即后一个的输入(大幅移动 + 小颤抖叠加共存)。无注册者时快速路径直通(渲染逐位不变)。确定性契约与异常隔离语义详见 TrackPoseAdjuster 类注。

示例:

java
ctx.registries().trackPoseAdjusters().register(
        RegistryKey.of("mymod", "shake", TrackPoseAdjuster.class), new ShakeAdjuster());

cameraPoseAdjusters()

签名:

java
Registry<CameraPoseAdjuster> cameraPoseAdjusters();

行为:相机位姿链(统一世界批 A,2026-10-11),链式语义与 trackPoseAdjusters() 同款,作用对象为相机位姿(直视轨道推导为默认输入,setCameraPose 的绝对写入构成输入的一部分)。无注册者时快速路径直通(渲染逐位不变),契约见 CameraPoseAdjuster 类注。

示例:

java
ctx.registries().cameraPoseAdjusters().register(
        RegistryKey.of("mymod", "sway", CameraPoseAdjuster.class), new SwayAdjuster());

线程:线程与冻结语义见 Registry——写操作仅允许在注册窗口内的宿主线程;读操作任意线程安全。

生命周期阶段:仅在注册窗口(onPreInit)内通过 ModContext.registries() 使用;读查询可延续到运行期。

稳定性:2.0 起冻结:2.x 内只增不破(禁止删签名 / 改签名 / 改语义)。