Date System
Timeline replaces the feeling of a raw day counter with a configurable calendar and a daily on-screen date toast.
TLDR
- The toast appears when the client detects a new in-game day.
- Calendar math is based on server settings (month names, abbreviations, year suffix, days per month).
- Displayed years are 1-based in UI text (
Year 1,Year 2, ...). - Settings sync from server to clients and can update during runtime.

How The Date Is Computed
Timeline converts world game time to a day index, then maps that to:
- day of month
- month index/name
- display year
Core constants/inputs:
ticksPerDay: 24000daysPerMonth: configurable (1..365)monthNames: configurable list (>= 1month)
The final user-facing format uses localization with this shape:
Day <n> of <Month>, <Year> <Suffix>
Calendar Configuration (Server)
Key server-side options under calendar:
monthNamesmonthAbbreviations(MonthName=Abbrevlines)yearSuffixdaysPerMonthuseCustomFontuseSereneSeasonsseasonMonths
DEEP DIVE: abbreviation fallback
If month abbreviations are missing or invalid, Timeline falls back to the first 3 letters of each month name.
Toast Font (Client)
Client config supports:
VANILLAGOTHIC12GOTHIC24
This only changes presentation, not the underlying date math.
Sync And Hot Reload Behavior
- Server periodically hashes active calendar settings.
- If the hash changes, it broadcasts updated settings to connected players.
- Client caches are replaced with the new definition and used immediately for rendering.
Display-year nuance
Internal calendar math has 0-based roots in some classes, but UI/API date messages intentionally display years as 1-based (yearIndex + 1).
Support This Project
Like this wiki and these mods?
Every bit of support helps me keep building features, writing docs, and shipping updates.