Theseus 模组文档
API 参考 / spi 包:音符与判定 SPI

JudgeSink


想先跑起来?

这一页是签名与行为参考。自主判定时把结果交回宿主。直接做一遍:教程 · 添加新音符类型。

判定结果收集器,定义对象用它产出一条判定。标注为函数式接口,二参版本可用 lambda 实现。

两条路径的语义不同:

方法速览

方法用途
accept(JudgmentKindDefinition, long)产出判定等级(onJudge 路径使用)
accept(JudgmentKindDefinition, long, NoteView)对指定音符产出判定(onJudgeTick 路径必须用此版本)

accept(JudgmentKindDefinition kind, long judgeTime)

签名:

java
void accept(JudgmentKindDefinition kind, long judgeTime);

行为:产出一条以"当前音符"为对象的判定。kind 为判定等级定义(如 seecmd:perfect),judgeTime 为判定时间(毫秒)。在 onJudgeTick 路径下该条目被宿主忽略;在 onJudge 路径下 kind 生效、judgeTime 被忽略。kind 为 null 时被忽略。

示例:

java
sink.accept(myKind, input.judgeTime());

accept(JudgmentKindDefinition kind, long judgeTime, NoteView note)

签名:

java
void accept(JudgmentKindDefinition kind, long judgeTime, NoteView note);

行为:产出一条针对指定音符的判定,用于 onJudgeTick:一次回调可对多个音符分别产出。note 必须是 ctx.notes() 返回的同一实例(宿主按引用身份映射),否则该条被丢弃;kind 为 null 也丢弃。默认实现委托给二参版本(便于宿主按"当前音符"绑定语义复用)。

示例:

java
sink.accept(myKind, timeMs, note);   // note 来自 ctx.notes()

完整签名

java
@FunctionalInterface
public interface JudgeSink {

    void accept(JudgmentKindDefinition kind, long judgeTime);

    default void accept(JudgmentKindDefinition kind, long judgeTime, NoteView note);
}

线程:源码未声明额外线程约束;宿主在判定回调内同步使用,收集结果后统一消费,sink 不得跨帧持有。

生命周期阶段:运行期判定回调内使用。

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