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 调用会直接失败。
相关条目
- AngelicaModulesConfig -
enableTestBlocks的声明处(@Config.Ignore()) - AngelicaClientTweaker -
SystemProperties.ENABLE_TEST_BLOCKS的赋值点(:83) - glsm 子项目 - 本类所在的子项目
- Proxy - 消费
debugTooling()/Tracy.ENABLED的地方