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

ChartRuntimeContext


谱面运行时上下文,由宿主桥接到谱面运行数据,模组不接触内核类。它在 ChartExtensionParser.apply 中传入,也用于游玩期读取扩展状态;底层键值存储就是该谱面的 extensionsData,游玩场景读取同一份数据。

方法速览

方法用途
put(String, Object)写入运行时数据
get(String)读取运行时数据(不存在返回 null)
extraContent()游玩上下文的演出原语通道(可能为 null)

put(String key, Object value)

签名:

java
void put(String key, Object value);

行为:向该谱面的运行时键值存储写入一项,同名键覆盖。key 为 null 时静默忽略;value 可以为 null。写入内容与宿主解析扩展段的结果共用同一张表,游玩期可经 ChartView.extensions() 读取。

示例:

java
ctx.put("mymod:state", new MyEffects());

get(String key)

签名:

java
Object get(String key);

行为:读取运行时数据;key 为 null 或不存在时返回 null。调用方自行做类型判别。

示例:

java
Object state = ctx.get("mymod:state");
if (state instanceof MyEffects fx) {
    // 使用自定义状态
}

extraContent()

签名:

java
default ExtraContentApi extraContent();

行为:返回宿主游玩上下文注入的谱面表演原语通道(ExtraContentApi),仅在游玩场景的谱面加载/游玩期非 null;谱面列表扫描、编辑器等上下文返回 null,调用方必须判空。通道在运行时上下文构造时捕获,本局内保持不变;apply 阶段拿到的实例在宿主布局就绪前会缓冲调用、就绪后按序重放。默认实现返回 null。

示例:

java
ExtraContentApi api = ctx.extraContent();
if (api != null) {
    api.setTrackTilt3D(10.0);
}

完整签名

java
public interface ChartRuntimeContext {

    void put(String key, Object value);

    Object get(String key);

    default ExtraContentApi extraContent();
}

线程:源码未声明额外线程约束;宿主在谱面加载与游玩主线程访问同一份键值存储,未做同步,跨线程访问需自行加锁。

生命周期阶段:运行期谱面加载(apply 注入)与游玩期间读写。

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