节日与季节效果
本 mod 的两双季节靴(四季靴、圣诞精神靴)会根据服务器操作系统的真实日期改变 vis 折扣、移速长跑系数与贴图。机制集中在 CalendarHelper。
日历判定
CalendarHelper(main/utils/CalendarHelper.java)在 preInit 时读取一次系统时间并缓存 4 个布尔值:
| 方法 | 触发条件 | 是否有物品使用 |
|---|---|---|
isChristmas() |
月份 == 12 | ✅ 四季靴、圣诞精神靴 |
isIrish() |
月份 == 3 | ❌ 无任何调用点 |
isEaster() |
月份 == 3 或 4 | ❌ 无任何调用点 |
isFree() |
月份 == 7 | ❌ 无任何调用点 |
判定用的是 Calendar.getInstance().get(Calendar.MONTH) + 1,即操作系统本地时区的月份,与游戏内世界时间、服务器 uptime、维度时间完全无关。GTNH 多人服务器上,所有玩家看到的 vis 折扣取决于服主的系统日期设置。
数值影响
| 靴子 | 字段 | 平月 | 12 月 |
|---|---|---|---|
| 四季靴 | visDiscount |
3 | 6 |
| 四季靴 | modifier |
1 | 12 |
| 四季靴 | longrunningbonus |
0.003F | 0.036F |
| 四季靴 | 图标 | bootsArcanium |
bootsChristmas |
| 四季靴 | 护甲贴图 | boots_arcanium.png |
boots_christmas.png |
| 圣诞精神靴 | visDiscount |
2 | 9 |
| 圣诞精神靴 | modifier |
1 | 25 |
| 圣诞精神靴 | longrunningbonus |
0.003F | 0.075F |
| 圣诞精神靴 | 图标 / 贴图 | 常量,不变 | 常量,不变 |
longrunningbonus 参与 ItemBoots.computeBonus(ItemBoots.java:133-136)的 speedBonus + (runTicks × 0.2F) × longrunningbonus,所以圣诞月的长跑收益是平月的 12 倍(四季靴)或 25 倍(圣诞精神靴)。
两双靴的贴图行为不一致:四季靴会换整套贴图,圣诞精神靴只有数值变、贴图恒定。
已知缺陷
-
CalendarHelper.calendar()缺break,月份 3 会同时点亮三面旗(CalendarHelper.java:14-26):switch (month) { case 3: isIrish = true; case 4: // ← 缺 break,3 月会 fall through 进来 isEaster = true; break; ...
3 月时
isIrish与isEaster均为 true。源码注释用大写 “AMERICA #1 BABY” 标注了isFree,说明作者原本打算做「每月一个节日」的轮换,但只实现了 4 个节日中的 1 个(圣诞)接入物品系统,另外 3 个是死代码。 -
isIrish/isEaster/isFree三个 getter 无任何调用点,属于预留 API。 -
日期只在
preInit缓存一次。服务器跨月不重启的话,靴子数值会停留在启动时的状态。CalendarHelper.calendar()由ThaumicBoots.preInit(ThaumicBoots.java:32)调用一次即固定。