API 参考 / 渲染、资源与语言
LanguageRegistry
想先跑起来?
这一页是签名与行为参考。语言键的注册与查询,注意加载时机。直接做一遍:教程 · 贴图与译文。
用途:模组译文贡献入口,经 ModContext#language() 获取。两种等价方式:
- 资源文件(推荐):jar 内放
assets/<模组id>/lang/<locale>.json(形如{"mymod.hud.label": "准度"}),宿主在模组装配后自动扫描; - 代码注册:本接口的
add(String, Map),适合译文由配置或计算得出的场景。
完整签名
java
public interface LanguageRegistry {
void add(String locale, Map<String, String> entries);
Optional<String> get(String key);
Optional<String> get(String locale, String key);
}add(locale, entries)
签名:
java
void add(String locale, Map<String, String> entries);行为:注册一批译文,可对同一 locale 多次调用,后注册的覆盖先注册的同名键。立即作用于当前语言(若 locale 恰为当前语言),之后每次切换语言都会重放。
键名约定:以模组 id 作前缀("<模组id>.<key>"),避免与内置译文(gameplay.* / settings.*)及其它模组冲突。
get(key)
签名:
java
Optional<String> get(String key);行为:查询当前生效译文,解析顺序为「模组层 → 内置层 → 英文层 → 键名本身」,未命中返回空(由调用方决定展示什么)。
get(locale, key)
签名:
java
Optional<String> get(String locale, String key);行为:查询指定语言下的译文,不切换当前语言;未命中返回空。
示例:代码注册并读取
java
ctx.language().add("zh", Map.of(
"mymod.hud.combo", "连击",
"mymod.hud.accuracy", "准度"));
String label = ctx.language().get("mymod.hud.combo").orElse("COMBO");注意:宿主在本模组
onInit返回之后才扫描 jar 内语言文件,所以在onInit里读自己的译文会是空——要么改用add(...)主动注册,要么放到onPostInit再读。