节日飘字硬编码

基本信息

属性 值
源码位置 GuiCustom.initGui(GuiCustom.java:108-120)
类型 不可通过配置关闭的日期特判
判定时区 JVM 本机时区(Calendar.getInstance())
影响对象 飘字(SplashText) 的最终显示内容

行为

initGui 先按配置抽取飘字(GuiCustom.java:95-102),紧接着用一组日期特判无条件覆写(GuiCustom.java:108-120):

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
if (calendar.get(MONTH) + 1 == 11 && calendar.get(DATE) == 9) {
    this.splashText = "Happy birthday, ez!";
} else if (calendar.get(MONTH) + 1 == 6 && calendar.get(DATE) == 1) {
    this.splashText = "Happy birthday, Notch!";
} else if (calendar.get(MONTH) + 1 == 12 && calendar.get(DATE) == 24) {
    this.splashText = "Merry X-mas!";
} else if (calendar.get(MONTH) + 1 == 1 && calendar.get(DATE) == 1) {
    this.splashText = "Happy new year!";
} else if (calendar.get(MONTH) + 1 == 10 && calendar.get(DATE) == 31) {
    this.splashText = "OOoooOOOoooo! Spooky!";
}

五条规则

日期 文本 备注
11 月 9 日 Happy birthday, ez! ez = 作者 lumien 的昵称
6 月 1 日 Happy birthday, Notch! Markus Persson 生日
12 月 24 日 Merry X-mas! 平安夜
1 月 1 日 Happy new year! 元旦
10 月 31 日 OOoooOOOoooo! Spooky! 万圣节

影响范围

情况 是否被覆盖
配置了 other.splash-text 是——配置抽中的文本被丢弃
配置 splash-text 的 synced: true 是——连主菜单同步来的文本一起被覆盖
界面名不是 mainmenu 的自定义界面 是——initGui 通用,只要命中日期就覆盖(即使该界面没配飘字,也会凭空出现飘字)
loadedSplashText 已是 true 否——覆盖发生在 loadedSplashText 判定的同一段代码之后,每次 initGui 都执行

⚠️ 最后一条意味着每次打开界面都会重新判定一次(initGui 每开一次界面跑一遍),所以跨零点的长挂游戏在日期翻转后行为会变。

设计问题

问题 说明
无开关 没有任何配置项、命令或开关能禁用这五条规则
else if 链 五条日期互斥(本身不会撞),但任一命中后后续全部短路
硬编码英文 不走本地化,也不受 TextTranslatable 影响;即使玩家语言非英文也显示英文
非配置驱动 违反"配置决定一切"的整体设计;整合包作者无法改文案或日期
时区依赖 用本机时区判定,在 UTC±14 边界时"今天"可能与玩家认知不符

关闭办法

源码层面只能改代码。配置层面无解——唯一规避方式是不配置 other.splash-text(但上述第三条说明,此时仍会凭空出现飘字)。

相关条目