Theseus 模组文档
API 参考 / spi 包:游戏模式、谱面扩展与内容

JudgmentKindDefinition


想先跑起来?

这一页是签名与行为参考。新增一档判定:显示名、分数、准度权重、连击行为。直接做一遍:教程 · 添加判定等级。

判定等级定义对象,取代写死的判定等级枚举,使模组可以注册新的判定等级(如 GOOD、BAD);评分、统计与特效按注册表遍历。在 onPreInit 用 ctx.registries().judgmentKinds().register(key, def) 注册,身份由注册键承载,本接口不自带 id;内置 seecmd:perfect/great/miss/none 由宿主预注册。相关类型:ComboBehavior。

方法速览

方法用途
displayName()判定显示名(如 "PERFECT")
scoreValue()计分相对权重(PERFECT = 100 基准)
accuracyWeight()准度权重(0..1)
color()判定文字/特效与 HUD 连击颜色
comboBehavior()对连击的影响(递增/归零/不变)
isMissKind()是否具备完整 MISS 语义
render(RenderCanvas, JudgedNoteRenderContext)判定特效自绘

displayName()

签名:

java
String displayName();

行为:返回判定等级的显示名。宿主把它用于 HUD 连击文本("<combo> <displayName>")与日志,不参与判定匹配。

示例:

java
@Override
public String displayName() {
    return "GOOD";
}

scoreValue()

签名:

java
int scoreValue();

行为:该判定等级的分数值(相对权重,PERFECT = 100 基准)。宿主按 Σ 每音符基础分 × (scoreValue / 100) × 次数 计算总分;内置 PERFECT = 100、GREAT = 65。宿主不做范围校验,负值会直接拉低总分,应返回非负数。

示例:

java
@Override
public int scoreValue() {
    return 50;
}

accuracyWeight()

签名:

java
double accuracyWeight();

行为:准度权重(0..1,PERFECT = 1.0,GREAT = 0.65,MISS = 0)。宿主的结算统计与血量分档消费它:≥ 1.0 归满准度档,> 0 归部分准度档,≤ 0 归零准度档;不做显式钳制,请自行保持在 0..1。

示例:

java
@Override
public double accuracyWeight() {
    return 0.5;
}

color()

签名:

java
Color color();

行为:判定文字/特效的渲染颜色,同时也是宿主 HUD 连击颜色的唯一真相源。返回 null 时 HUD 连击颜色回退中性灰(200, 200, 200)。

示例:

java
@Override
public Color color() {
    return new Color(120, 220, 120);
}

comboBehavior()

签名:

java
ComboBehavior comboBehavior();

行为:声明本次判定对 combo 的影响:INCREMENT 递增、RESET 归零、NONE 不变。宿主直接 switch 该返回值,不得返回 null(会抛空指针)。语义详见 ComboBehavior。

示例:

java
@Override
public ComboBehavior comboBehavior() {
    return ComboBehavior.INCREMENT;
}

isMissKind()

签名:

java
default boolean isMissKind();

行为:该判定等级是否具备完整 MISS 语义(记 miss 数、连击归零、扣血),默认 false。注意宿主的两套消费口径:

因此自定义等级通常只需把连击行为声明为 RESET;需要计入 MISS 统计行时才覆写本方法。

示例:

java
@Override
public boolean isMissKind() {
    return false;
}

render(RenderCanvas canvas, JudgedNoteRenderContext ctx)

签名:

java
default void render(RenderCanvas canvas, JudgedNoteRenderContext ctx);

行为:宿主在判定特效层按需调用,默认空实现(不绘制);覆写后在 canvas 上自绘该判定等级的特效。ctx 提供 x() / y()(绘制位置)、judgeTime()(本次判定时间,毫秒)与 note()(被判音符只读视图)。内置四级也提供真实现(原宿主内置文字特效经 搬入),宿主对内置与自定义统一经本方法消费。绘制应自带 save() / restore() 配对。

示例:

java
@Override
public void render(RenderCanvas canvas, JudgedNoteRenderContext ctx) {
    canvas.save();
    canvas.drawText(displayName(), ctx.x(), ctx.y(), TextStyle.of(20, color()));
    canvas.restore();
}

完整签名

java
public interface JudgmentKindDefinition {

    String displayName();

    int scoreValue();

    double accuracyWeight();

    Color color();

    ComboBehavior comboBehavior();

    default boolean isMissKind();

    default void render(RenderCanvas canvas, JudgedNoteRenderContext ctx);
}

线程:源码未声明额外线程约束;宿主在计分、判定与渲染主线程同步调用,render 每帧在判定特效层调用。

生命周期阶段:定义对象在 onPreInit 注册,运行期由评分/统计/特效按注册表遍历使用。

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