NotFine(notfine 主入口)
基本信息
| 属性 | 值 |
|---|---|
| modid | notfine |
| 显示名 | NotFine |
@Mod 注解位置 |
src/main/java/jss/notfine/NotFine.java:13 |
MODID 常量定义 |
src/main/java/jss/notfine/NotFine.java:20 |
| 版本 | NotFine.VERSION = Tags.VERSION(:22) |
| 主类 | jss.notfine.NotFine |
| Logger | LogManager.getLogger("NotFine")(:23) |
acceptableRemoteVersions |
*(:17) |
| 适用范围 | Minecraft 1.7.10 |
注意:NotFine 没有 acceptedMinecraftVersions 约束(与 AngelicaMod.java:26 不同),也没有 guiFactory。它的视频设置界面由 Angelica 的 ClientProxy 弹出,见 Proxy。
生命周期
NotFine.java:28-41 三个 @Mod.EventHandler 全部转发给 proxy,主类自身无逻辑。
源码规模
src/main/java/jss/notfine/ 共 55 个 java 文件:
| 子包 | 文件数 | 内容 |
|---|---|---|
util |
12 | 工具类 |
asm |
9 | ASM transformer |
config |
5 | 配置与 GUI 配置 |
gui |
20 | 视频设置界面 |
proxy |
2 | Common / Client proxy |
core |
2 | Settings、SettingsManager |
render |
2 | 渲染补丁 |
| 根目录 | 2 | NotFine.java、McPatcherForge.java |
Options 枚举
jss.notfine.core.Settings 是一个枚举,共 39 个选项常量,按主题分为 5 组:
| 组 | 常量 |
|---|---|
| 云 / 天气(4) | CLOUD_HEIGHT、CLOUD_SCALE、DOWNFALL_DISTANCE、MODE_CLOUDS |
| FOV / 视角(3) | BOBVIEW_MODE、DYNAMIC_FOV、HURT_SHAKE |
| 动态光(7) | DYNAMIC_LIGHTS、DYNAMIC_LIGHTS_SHADER_FORCE、DYNAMIC_LIGHTS_FRUSTUM_CULLING、DYNAMIC_LIGHTS_ADAPTIVE_TICKING、DYNAMIC_LIGHTS_SLOW_DIST、DYNAMIC_LIGHTS_SLOWER_DIST、DYNAMIC_LIGHTS_BACKGROUND_DIST、DYNAMIC_LIGHTS_CULL_TIMEOUT |
| 雾 / 地平线(3) | HORIZON、TERRAIN_FOG、FOG_NEAR_DISTANCE |
| 渲染开关(18) | MODE_CLOUD_TRANSLUCENCY、MODE_DROPPED_ITEMS、MODE_GLINT_INV、MODE_GLINT_WORLD、MODE_GUI_BACKGROUND、MODE_LEAVES、MODE_LIGHT_FLICKER、MODE_SHADOWS、MODE_SKY、MODE_STARS、MODE_SUN_MOON、MODE_WATER、MODE_VIGNETTE、PARTICLES_ENC_TABLE、PARTICLES_VOID、RENDER_DISTANCE_CLOUDS、TOTAL_STARS、VOID_FOG、GUI_BACKGROUND |
| 缩放(2) | ZOOM_SMOOTH、ZOOM_SMOOTH_SPEED |
枚举按 39 个常量分组计数,动态光组为 8 项(含 DYNAMIC_LIGHTS 本身),合计 39。
生命周期:ClientProxy.preInit 对每个 Settings 调 setting.ready()(ClientProxy.java:25-27),postInit 调 SettingsManager.settingsFile.loadSettings()(:32),世界加载时调 SettingsManager.graphicsUpdated()(:36-38)。
配置系统:两套并存
NotFine 用的是旧版 Forge Configuration API,不是 Angelica 主 mod 用的 gtnhlib @Config:
| 项 | 值 |
|---|---|
| 文件 | config/notfine/notfine.cfg(NotFineConfig.java:21) |
| 分类 | general、toggle、unfinished |
| 字段数 | 3 |
| 字段 | 分类 | 配置默认 | 读取位置 |
|---|---|---|---|
allowToggle3DAnaglyph |
general |
true |
NotFineConfig.java:24 |
betterBlockFaceCulling |
toggle |
true |
NotFineConfig.java:27 |
renderPass |
unfinished |
false |
NotFineConfig.java:32 |
源码缺陷:renderPass 是死开关
NotFineConfig.java:32-40 先从配置文件读出 renderPass:
renderPass = config.getBoolean("renderPass", CATEGORY_UNFINISHED, false,
"Allows resource pack artists to add block textures to be rendered during additional passes.");
if(config.hasChanged()) {
config.save();
}
//This will probably break hard with Angelica.
renderPass = false; // <-- :40
第 40 行在保存之后无条件把 renderPass 覆盖为 false。因此无论用户在 notfine.cfg 里怎么写,运行时值恒为 false。两个消费点因此永久失效:
src/main/java/com/gtnewhorizons/angelica/mixins/Mixins.java:860—.setApplyIf(() -> NotFineConfig.renderPass)src/main/java/jss/notfine/asm/AsmTransformers.java:18—() -> NotFineConfig.renderPass
这正是「数值取自错误来源 / 语义写反」的典型:配置文件里存在这个开关,但代码从不采用它读到的值。
相关条目
- Mod ID 与注册总表 - 同仓 3 个 modid
- McPatcherForge - 与 NotFine 同在
jss.notfine包的第三个 modid - McPatcherForgeConfig - 65 字段
- AngelicaClientTweaker -
NotFineConfig.loadSettings()的唯一调用点(:195) - NotFine Mixin 分组 - 45 个 NotFine 系 mixin
- AngelicaCompat - 大量 NotFine/MCPatcher 补丁的下游兼容包