正在载入

等待时间过长时请刷新页面

编写于

最近更新

设置项

每个插件的设置只作用于自己的 Linlang Facade,不会改变其他插件的语言、前缀或日志方式。

语言、前缀、日志方式和平台上下文统一通过 settings 设置,不再要求开发者区分 Settings 与 Parameters。

启动时设置

启动时已经确定的设置,仍可通过 LinOptions 一次传入:

lin = Lin.setup(this, new LinOptions()
        .pluginLogger(true)
        .totalPrefix("§7[§dMyPlugin§7]§r")
        .totalLocale("zh_CN"));

如果设置来自配置文件,可以在 Lin.setup 的初始化回调里先绑定配置,详见初始化 ⇱

运行时设置

lin.settings()
        .totalLocale("en_GB")
        .dynamicTotalPrefix(context -> lang.prefix.resolve())
        .usingPluginLogger(true)
        .apply();

构建器先保存本次设置,调用 apply 后才应用。整个过程不会硬重建 Facade,也不会清空命令注册或替换文件服务。

如果本次包含语言设置,会先校验平台上下文、应用语言,再应用日志和前缀设置。这样,新前缀函数读取到的是切换后的语言。语言没有变化时,不会仅因为设置了相同 locale 就重新加载语言文件。

多个设置并不构成一个事务。例如语言已经切换成功,而新前缀函数随后抛出异常时,语言不会退回。此时应修复失败的设置,不要把异常当作整组设置都未生效。

全局语言

totalLocale(String) 设置当前 Facade 的语言,例如 zh_CN 或 en_GB。切换时先读取并校验已绑定的语言包,再更新语言对象和内建命令的显示。

LangText 等语言引用继续有效。普通 String 字段会更新,但已复制到其他对象的字符串不会自动变化。

全局前缀

固定前缀使用 totalPrefix(String),动态前缀使用 dynamicTotalPrefix(Function<Object, String>)。同一个构建器中,以最后设置的一种为准。

动态函数接收当前插件的平台对象,Bukkit 中就是 JavaPlugin。它会在设置时、语言变更后和重载时重新求值,不是每次发送消息时调用。

日志方式

usingPluginLogger(true) 使用插件自己的 Logger;false 使用运行时提供的日志通道。日志文件与控制台输出策略仍由审计配置决定。

平台上下文

platformContext(Object) 用于校验当前平台对象。在 Bukkit 中,必须传入创建 Facade 时的同一个 JavaPlugin,不能借此更换服务的所属插件。

正常初始化已经提供了上下文,通常不需要再次设置。

从配置更新设置

lin.onReload("settings", () -> lin.settings()
        .totalLocale(config.language)
        .dynamicTotalPrefix(context -> lang.prefix.resolve())
        .apply());

配置重载成功后,回调应用新的设置。不要在回调里再次调用 reload 或 restart。

settings 不会顺带重读无关配置,也不会覆盖未保存的内存配置。需要从磁盘重新加载时使用 lin.reload();需要替换服务时使用显式的 lin.restart()。两者的恢复责任和失败处理见重载机制 ⇱

旧的 parameters 方法保留为已弃用的兼容入口,避免已有插件立即失去二进制兼容性。新代码统一使用 settings。Bukkit 中应在主线程应用设置。

讨论

请登录账号