日期、季节与二十四节气
三种日期模式、状态存储、节气表以及自动与手动状态。
LISeasons 对每个启用世界保存一个季节状态。日期来源有三种,优先级固定,不能同时混用。
模式一:现实公历
time:
use-gregorian-trigger: true
插件使用服务器操作系统的 LocalDate.now() 计算日期、季节和节气。此模式忽略服内日历进度,也不使用四季循环天数。
time.sync-real-time 是独立开关:
time:
sync-real-time: false
real-time-sync-interval-seconds: 1
打开后,插件还会把所有“已启用且环境为 NORMAL”的世界游戏时间同步到现实时间,并关闭这些世界的原版昼夜循环。它不是“启用现实日期”的同义词;关闭后插件会把自己关闭过的昼夜循环恢复为开启。
模式二:持久化服内日历(默认)
time:
use-gregorian-trigger: false
world-calendar:
enable: true
start-year: 2026
start-date: "02-04"
start-world-day: 0
world-days-per-calendar-day: 1
计算方式:
当前日历日期 = 起始年月日 + 已累计日历天数
每 N 个 Minecraft 世界天 = 1 个日历日
每个世界使用 UUID 在 calendar-state.yml 中独立记录:
elapsed-calendar-days:从起始日期开始累计的日历天数;world-day-remainder:未凑满一个日历日的世界天数余量;last-world-day:上次记录的 Minecraft 世界天数;date:便于人工查看的日期,实际计算不以它为准。
修改 /time set 让世界天数倒退时,插件只重设锚点,不倒扣已经累计的服内日期。停服后手动修正日历时,应优先理解 elapsed-calendar-days,不要只改 date。
模式三:旧版四季循环
time:
use-gregorian-trigger: false
world-calendar:
enable: false
season-duration-days:
spring: 24
summer: 24
autumn: 24
winter: 24
插件按世界完整天数在四季总周期内取模。每季内部再平均分成 6 段,对应本季六个节气。若每季 24 天,默认每 4 个世界天进入下一个节气。
该模式没有真实年月日语义,主要用于保留旧服玩法。
季节起始日期
现实公历与服内日历模式使用以下配置判定季节:
season-start-dates:
spring: "03-04"
summer: "06-04"
autumn: "09-04"
winter: "12-04"
日期从冬季开始到春季开始之前仍判定为冬季。季节开始日期与二十四节气日期是两套独立配置,因此默认 2 月 4 日会显示节气“立春”,但季节仍可能是“冬季”,直到 3 月 4 日才进入春季。这是配置结果,不是计算错误。
二十四节气默认表
| 季节分组 | 键 | 名称 | 默认日期 |
|---|---|---|---|
| 春 | lichun |
立春 | 02-04 |
| 春 | yushui |
雨水 | 02-19 |
| 春 | jingzhe |
惊蛰 | 03-06 |
| 春 | chunfen |
春分 | 03-21 |
| 春 | qingming |
清明 | 04-05 |
| 春 | guyu |
谷雨 | 04-20 |
| 夏 | lixia |
立夏 | 05-06 |
| 夏 | xiaoman |
小满 | 05-21 |
| 夏 | mangzhong |
芒种 | 06-06 |
| 夏 | xiazhi |
夏至 | 06-21 |
| 夏 | xiaoshu |
小暑 | 07-07 |
| 夏 | dashu |
大暑 | 07-23 |
| 秋 | liqiu |
立秋 | 08-08 |
| 秋 | chushu |
处暑 | 08-23 |
| 秋 | bailu |
白露 | 09-08 |
| 秋 | qiufen |
秋分 | 09-23 |
| 秋 | hanlu |
寒露 | 10-08 |
| 秋 | shuangjiang |
霜降 | 10-24 |
| 冬 | lidong |
立冬 | 11-08 |
| 冬 | xiaoxue |
小雪 | 11-22 |
| 冬 | daxue |
大雪 | 12-07 |
| 冬 | dongzhi |
冬至 | 12-22 |
| 冬 | xiaohan |
小寒 | 01-05 |
| 冬 | dahan |
大寒 | 01-20 |
显示名称可在 messages.yml -> solar-term-names 修改,日期可在 config.yml -> time.gregorian-dates 修改。
自动与手动状态
/seasons set season <world> <season>:设为该季第一节气,并将世界切换为手动状态。/seasons set term <world> <term>:设为指定节气及其所属季节,并切换为手动状态。/seasons next [world]:推进到下一节气,并保持手动状态。/seasons auto [world]:恢复自动计算,立即按当前日期或世界时间重算。
手动状态仅存在于运行内存中,当前实现没有把手动季节写入单独持久化文件。重启后世界会重新按选定时间模式计算。
换季时发生什么
自动或手动状态发生变化时,插件会:
- 刷新季节天气;
- 将附近区块加入季节色调刷新;
- 进入春季时建立玩家附近的融雪队列;
- 按配置播放声音和粒子;
- 按配置全服广播;
- 向该世界玩家显示标题。
自动检查间隔由 time.refresh-interval-seconds 控制,最小有效值为 10 秒。