Theseus 模组文档
API 参考 / collect 包:收集品

CollectibleDefinition


模组收集品定义(对外契约)。不可变值对象,用 of(String) 起手,再按需 with* 派生新实例,最后经 ModRegistries 的 collectibles() 注册;宿主在注册时转换为内核收集品模型。

id 在哪:本记录不自带 id,身份由注册表键(RegistryKey)承载;进入内核后使用的收集品 id 取注册键的 path,所以与内置收集品的 id 空间天然兼容,解锁时也用它调 ModContext.unlockCollect(id)。

方法速览

方法用途
of(name)最小构造(其余字段取默认值)
name() / source() / brief() / detail()读显示名、来源、短简介、详情
unlockedByDefault() / rewardLogs()读默认可见性与日志奖励
withSource(v) / withBrief(v) / withDetail(v)派生带新文案的实例
withUnlockedByDefault(v) / withRewardLogs(v)派生新可见性 / 奖励
equals(o) / hashCode() / toString()记录默认实现(按全部组件比较)

完整签名

java
public record CollectibleDefinition(String name, String source, String brief,
                                   String detail, boolean unlockedByDefault, int rewardLogs) {

    public static CollectibleDefinition of(String name);

    public String name();

    public String source();

    public String brief();

    public String detail();

    public boolean unlockedByDefault();

    public int rewardLogs();

    public CollectibleDefinition withSource(String v);

    public CollectibleDefinition withBrief(String v);

    public CollectibleDefinition withDetail(String v);

    public CollectibleDefinition withUnlockedByDefault(boolean v);

    public CollectibleDefinition withRewardLogs(int v);

    public boolean equals(Object o);

    public int hashCode();

    public String toString();
}

of(name)

签名:

java
public static CollectibleDefinition of(String name);

行为:最小构造,等价于 new CollectibleDefinition(name, "", "", "", false, 0)。name 会经紧凑构造归一与校验(见下)。

示例:

java
CollectibleDefinition base = CollectibleDefinition.of("首次通关");

name()

签名:

java
public String name();

行为:返回显示名(必填)。紧凑构造会先 trim;null 归一为空串后同样被拒绝,因此已构造成功的实例 name() 永远非空。

示例:

java
String title = def.name();

source()

签名:

java
String source();

行为:返回来源标注。null 在构造期归一为空串;该字段不做 trim。

示例:

java
String from = def.source();

brief()

签名:

java
String brief();

行为:返回侧面板短简介。null 归一为空串。

示例:

java
String summary = def.brief();

detail()

签名:

java
String detail();

行为:返回悬浮面板详情,支持 \n 换行。null 归一为空串。

示例:

java
String body = def.detail();

unlockedByDefault()

签名:

java
boolean unlockedByDefault();

行为:为 true 时玩家进入收集品场景即可见;为 false 时需模组在运行期调用 ModContext.unlockCollect(id) 解锁(id = 注册键的 path)。

示例:

java
boolean visible = def.unlockedByDefault();

rewardLogs()

签名:

java
int rewardLogs();

行为:返回阅读后给予的日志货币数量。紧凑构造拒绝负值(IllegalArgumentException),因此该值恒 >= 0。

示例:

java
int logs = def.rewardLogs();

withSource(v) / withBrief(v) / withDetail(v)

签名:

java
public CollectibleDefinition withSource(String v);

public CollectibleDefinition withBrief(String v);

public CollectibleDefinition withDetail(String v);

行为:各派生一个新实例,只替换对应字段,其余字段保持不变;原实例不受影响。v 为 null 时该字段归一为空串;派生同样走紧凑构造校验。

示例:

java
CollectibleDefinition def = CollectibleDefinition.of("星尘徽章")
        .withSource("Stardust Mod")
        .withBrief("收集 100 个星尘音符")
        .withDetail("在任意谱面中累计触发 100 次星尘音符。");

withUnlockedByDefault(v)

签名:

java
public CollectibleDefinition withUnlockedByDefault(boolean v);

行为:派生一个新实例并替换默认可见性,其余字段保持不变。

示例:

java
CollectibleDefinition shown = def.withUnlockedByDefault(true);

withRewardLogs(v)

签名:

java
public CollectibleDefinition withRewardLogs(int v);

行为:派生一个新实例并替换日志奖励;v < 0 抛 IllegalArgumentException(校验发生在派生时,原实例保持可用)。

示例:

java
CollectibleDefinition rewarded = def.withRewardLogs(20);

equals(o) / hashCode() / toString()

签名:

java
public boolean equals(Object o);

public int hashCode();

public String toString();

行为:记录(record)的默认实现:equals / hashCode 基于全部六个组件(值相等即相等),toString 输出 CollectibleDefinition[name=..., source=..., ...]。注册表的重复判定与身份无关(按注册键的 location 判重),因此不要用记录相等性推断「是否已注册」。

示例:

java
CollectibleDefinition a = CollectibleDefinition.of("A").withRewardLogs(5);
CollectibleDefinition b = CollectibleDefinition.of("A").withRewardLogs(5);
boolean same = a.equals(b); // true:同一组组件值

线程:源码未声明额外线程约束(不可变值对象,可跨线程共享)。

生命周期阶段:在 onPreInit 内构造并注册;解锁时机由模组在运行期经 ModContext.unlockCollect(id) 决定。

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