Theseus 模组文档
API 参考 / judge 包:判定管线

JudgeResult


想先跑起来?

这一页是签名与行为参考。改写钩子的输入输出类型。直接做一遍:教程 · 添加判定等级。

判定结果的只读视图。宿主在判定完成后构造,传给 JudgmentAdjuster 与 NoteJudgedEvent 监听器。结果本身不可改;改写请用 JudgeResults 构造新实例。

方法速览

方法用途
note()被判定的音符(只读视图)
judgment()判定等级定义(注册表成员,可扩展)
judgeTime()判定发生时间(毫秒)
isHoldEnd()是否为长音符结尾判定

完整签名

java
public interface JudgeResult {

    NoteView note();

    JudgmentKindDefinition judgment();

    long judgeTime();

    boolean isHoldEnd();
}

note()

签名:

java
NoteView note();

行为:被判定音符的只读视图。宿主产出的结果中不为 null;HOLD 起点与终点各对应一次判定。视图只读,不提供改音符的入口。

示例:

java
int lane = result.note().lane();
long chartTime = result.note().time();

judgment()

签名:

java
JudgmentKindDefinition judgment();

行为:判定等级定义,来自注册表 judgmentKinds()(内置 seecmd:perfect / seecmd:great / seecmd:miss / seecmd:none,模组可注册新等级)。宿主构造结果时映射为内置定义;调整器可替换为自定义定义。若链上把它改成 null,宿主消费端依次回退到内部枚举对应的内置定义、再回退 seecmd:none。

示例:

java
JudgmentKindDefinition kind = result.judgment();
if (kind != null && "PERFECT".equals(kind.displayName())) {
    // 按等级做额外处理
}

judgeTime()

签名:

java
long judgeTime();

行为:判定发生时间(毫秒),与 GameplayContext#musicTimeMs() 同一时间轴。调整器改写后,宿主会重录准度分布,使统计按新时刻计算。

示例:

java
long offsetMs = result.judgeTime() - result.note().time();

isHoldEnd()

签名:

java
boolean isHoldEnd();

行为:true 表示本次是长音符结尾判定(含结尾 MISS);HOLD 起点判定为 false。用于区分同一条 HOLD 的两次判定。

示例:

java
if (result.isHoldEnd()) {
    // 只处理长音符尾判
}

线程:源码未声明额外线程约束。宿主在判定线程构造,并同步传给调整器链与 NoteJudgedEvent 监听器;监听器应当场读取结果,不要缓存事件对象本身跨帧使用。

生命周期阶段:运行期判定完成后读取(判定改写与事件订阅场景)。

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