数字格式化配置

基本信息

属性 值
类 com.gtnewhorizon.gtnhlib.util.numberformatting.NumberFormatConfig
源码 src/main/java/com/gtnewhorizon/gtnhlib/util/numberformatting/NumberFormatConfig.java
注解 @Config(modid = "gtnhlib", category = "number_formatting", filename = "gtnhlib-number-formatting")
配置文件 config/gtnhlib-number-formatting.cfg
注册位置 CommonProxy.java:97(preInit)
格式化工具 com.gtnewhorizon.gtnhlib.util.numberformatting.NumberFormatUtil

与 GTNHLib 主配置 分离成独立文件,因为它面向所有下游 mod 共享:一个玩家改一次,全服 mod 的数字显示方式一致。

功能

控制 GTNHLib 全局数字格式化:是否用工程学记法、用 mB 还是 L、区域设置等。

数值

字段 类型 默认值 说明
disableFormattedNotation boolean false 完全关闭所有格式化,数字原样显示(如 1000000)
globalDisableExponentialNotation boolean false 禁用指数记法,不用科学/标准/工程记法
useForgeFluidMillibuckets boolean true true 用 mB,false 用 GregTech 的 L
formatPattern String "SCIENTIFIC" 大数字的呈现方式
numberFormatLocale LocaleOption SYSTEM_DEFAULT 区域设置
EXPONENTIAL_FORMAT ExponentialFormat SCIENTIFIC 带 @Config.Ignore,是解析后的运行期缓存

formatPattern 的三个合法值(NumberFormatConfig.java:23-25):

值 效果 示例
SCIENTIFIC 标准科学记法 1.23e12
ENGINEERING 指数为 3 的倍数 123e9
POWER_OF_TEN 显式乘法 1.23*10^12

非法值不抛异常,而是记录错误并回退到 SCIENTIFIC(NumberFormatConfig.java:105-108):

} catch (IllegalStateException ignored) {
    GTNHLib.error("Invalid exponential format pattern: '" + formatPattern + "', fell back to SCIENTIFIC");
    EXPONENTIAL_FORMAT = ExponentialFormat.SCIENTIFIC;
}

注意 ignored 这个变量名 —— 该 catch 块吞掉异常(只转记为一条 error 日志),属有意设计。

区域设置

LocaleOption 枚举提供 17 个选项,每个带 displayName 与 java.util.Locale。SYSTEM_DEFAULT 的 locale 字段为 null,getLocale() 在此情形下回落:

if (this == SYSTEM_DEFAULT || locale == null) {
    return Locale.getDefault(Locale.Category.FORMAT);
}
选项 格式示例
ENGLISH_US 1,234.56
RUSSIAN 1 234,56
GERMAN 1.234,56
FRENCH 1 234,56
SPANISH 1.234,56
ITALIAN 1.234,56
JAPANESE 1,234.56
CHINESE 1,234.56
POLISH 1 234,56
PORTUGUESE_BR 1.234,56
DUTCH 1.234,56
SWEDISH 1 234,56
NORWEGIAN 1.234,56
FINNISH 1 234,56
CZECH 1 234,56
HUNGARIAN 1.234,56

以上 16 项加 SYSTEM_DEFAULT 共 17 个枚举值,与配置文件注释中列出的行数一致(NumberFormatConfig.java:33-52)。

交互

CommonProxy.preInit 在注册配置后立刻调用 NumberFormatUtil.postConfiguration()(CommonProxy.java:103),把配置应用到全局格式化器。

NumberFormatConfig 提供 3 个静态方法供下游查询当前状态:

方法 返回
syncNumberFormatting() 解析 formatPattern 为 EXPONENTIAL_FORMAT,记录生效的区域设置
getActiveLocale() 当前生效的 Locale
hasCustomLocale() 是否选了非 SYSTEM_DEFAULT,供下游检测区域覆盖

注释(NumberFormatConfig.java:97)说明 syncNumberFormatting 在 mod 初始化时和配置变更时都会被调用。

配置 GUI 的语言键见 assets/gtnhlib/lang/en_US.lang:

gtnhlib.config.number_formatting.numberFormatLocale=Number Format Locale
gtnhlib.config.number_formatting.numberFormatLocale.tooltip=Select the locale used for number formatting. System Default uses the system language format.

相关条目