SystemProperties(JVM 系统属性层)

基本信息

属性 值
类 com.gtnewhorizons.angelica.config.SystemProperties
路径 glsm/src/main/java/com/gtnewhorizons/angelica/config/SystemProperties.java
行数 175
所属模块 glsm 子项目,不在 src/main/java 下
声明 public final class,所有字段 static final

这是配置的第二层,不是 mod 配置

Angelica 有两层配置:

层 载体 用户可见 本条目
mod 配置 AngelicaConfig 等 4 个 @Config 类 游戏内 GUI / .cfg 文件 AngelicaModulesConfig 等
JVM 系统属性 SystemProperties(本类) 仅 -D 命令行 本条目

SystemProperties 不写任何配置文件,全部走 Boolean.getBoolean(...) / Integer.getInteger(...) / System.getProperty(...) 在类静态初始化时一次性读取。因此改这些值必须重启 JVM,无法热生效,也不出现在任何 .cfg 里。

关键:包名与所在模块不一致

这个类声明在 com.gtnewhorizons.angelica.config 包下(与 AngelicaConfig 同包),但物理文件在 glsm/ 子项目里,不在 Angelica 主源码树内。AngelicaClientTweaker.java:3 与 AngelicaMod.java:3 都直接 import 它而不加子项目前缀。glsm 是 settings.gradle.kts 中 include("glsm") 引入的支持库,没有自己的 modid。

分组统计

public static final / private static final 字段按注释分 8 组(逐行统计,非估算):

组 行范围 字段数 前缀
Backend selection :18-23 5 angelica.sdlgpu.* / angelica.glProfile / angelica.disable*Workaround
Redirector :25-27 2 angelica.unmappedGL / angelica.ffp.*
SDL-GPU :29-40 11 angelica.sdlgpu.*
Tracy :42-46 4 angelica.tracy*
Profiling :48-51 3 angelica.profile.*
Flyby :53-66 13 angelica.flyby.*
Debug :68-82 14 angelica.debug.* / org.lwjgl.util.Debug
Celeritas 握手 :84-86 2(仅 key 常量) celeritas.enableGLDebug / celeritas.lwjglService
合计 54

其中 SDL-GPU 组有 1 个 private 字段(:33 ENCODER_ASSERTIONS),Debug 组有 2 个 private 字段(:74、:75)—— 后两个正是下一节两个「或运算」方法的来源。

带真实默认值的字段

这些默认值是源码里的实参,不是推断:

字段 系统属性 默认值 行
UNMAPPED_GL angelica.unmappedGL UnmappedGLMode.WARN :26
SDL_FRAMES_IN_FLIGHT angelica.sdlgpu.framesInFlight 2 :38
TRACY_DIR angelica.tracy.dir angelica/natives/tracy(平台分隔符) :45
PROFILE_OPTS angelica.profile.opts event=wall,interval=5ms,alloc=512k,lock=10ms :49
PROFILE_DIR angelica.profile.dir angelica/profiles :50
FLYBY_WARMUP_TICKS angelica.flyby.warmupTicks 400 :57
FLYBY_LENGTH angelica.flyby.length 0 :58
FLYBY_TIME_OF_DAY angelica.flyby.timeOfDay 6000,再经 Math.floorMod(..., 24000L) 归一 :61
FLYBY_PACING angelica.flyby.pacing FlybyPacing.UNCAPPED :64
FLYBY_WEATHER angelica.flyby.weather FlybyWeather.CLEAR :65
SHADER_DUMP_ROOT 常量 "angelica_dumps" :82

ENABLE_TEST_BLOCKS:全 mod 唯一方块的总闸

:72:

public static final boolean ENABLE_TEST_BLOCKS = Boolean.getBoolean("angelica.debug.testBlocks");

它是 AngelicaMod 里 test_block 唯一方块注册的总闸。开发环境由 build.gradle.kts:17 的 -Dangelica.debug.testBlocks=true 打开,发布环境默认 false。

两个「或运算」方法

:88-98 两个方法都不是简单读属性,而是 属性 OR 反混淆环境:

方法 行 逻辑
dumpShaders() :88-90 DUMP_SHADERS_PROP || isDeobf()
debugTooling() :92-94 DEBUG_TOOLING_PROP || isDeobf()

即:在反混淆(开发)环境下这两个功能自动开启,无需 -D。对应的两个原始字段 DUMP_SHADERS_PROP(:74)与 DEBUG_TOOLING_PROP(:75)都是 private,外部只能通过这两个方法访问。

shaderDumpDir(String phase)(:96-98)在未开启时返回 null 而不是抛异常。

UnmappedGLMode 四档

:100-117 定义了一个四级枚举,并给出三个判定方法:

枚举值 detects() failsUnmapped() failsAwareUnroutable()
OFF false false false
WARN true false false
FAIL true true false
STRICT true true true

build.gradle.kts:20 为 runClient 注入了 -Dangelica.unmappedGL=fail,即开发环境下未映射 GL 调用会直接失败。

相关条目