节日飘字硬编码
基本信息
| 属性 |
值 |
| 源码位置 |
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(但上述第三条说明,此时仍会凭空出现飘字)。
相关条目