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

这正是「数值取自错误来源 / 语义写反」的典型:配置文件里存在这个开关,但代码从不采用它读到的值。

相关条目