A configurable special-moon scheduling mod for MITE + FishModLoader 3.4.2.
MITE's built-in Blood Moon, Blue Moon, and Harvest Moon follow a fixed vanilla cycle that's hard to tune for a given save. This mod takes over that decision and exposes each moon as its own rule, so you can decide when each one starts, how often it repeats, and which one wins when several land on the same day.
In multiplayer the server is authoritative: it pushes a config snapshot to each client over a custom packet so everyone sees the same moon. In singleplayer / local worlds the local config is used directly.
- Independent on/off switch for Blood, Blue, and Harvest Moon scheduling, with a master toggle that falls back to vanilla MITE behavior.
- Per-moon configuration of first day, interval (in in-game days), and priority.
- Conflict resolution by priority — when several moons hit the same day, the highest
prioritywins (defaults: Blue 4 > Blood 3 > Harvest 2). - ModMenu config screen with English (
en_US) and Simplified Chinese (zh_CN) translations. - Server → client config sync, so players don't have to edit configs themselves.
fishmodloader≥ 3.4.2rusted_iron_core≥ 1.5.0many-lib≥ 2.3.0modmenu(optional) — needed for the in-game config screen
Drop the built jar into MITE's mods folder alongside the dependencies above. Install the mod on both server and client — the server holds the authoritative config, the client renders the matching moon.
Open Custom Moon Phases from ModMenu. The settings are split into four tabs:
- General —
enableCustomSchedule: master switch. Turn it off to fully fall back to vanilla MITE moons. - Blue Moon / Blood Moon / Harvest Moon — each has four fields:
enabled— whether this moon's custom schedule is active.intervalDays— number of in-game days between occurrences.firstDay— earliest in-game day this moon is allowed to appear.priority— tiebreaker when several moons land on the same day; higher wins.
Trigger rule: a moon fires on a given day when day >= firstDay and (day - firstDay) % intervalDays == 0.
| Moon | firstDay | intervalDays | priority |
|---|---|---|---|
| Blue | 128 | 128 | 4 |
| Blood | 32 | 32 | 3 |
| Harvest | 24 | 32 | 2 |
With these defaults, days 24, 56, 88… fire a Harvest Moon; days 32, 64, 96… fire a Blood Moon (overriding Harvest on overlap); day 128 fires a Blue Moon (overriding Blood), and so on.
When a player joins, the server sends its current config snapshot over a custom packet; until that snapshot arrives the client temporarily uses its own local config. New joiners always receive the latest server values; clients already online keep the snapshot they received at connect time.
The project uses fml-loom via Gradle:
./gradlew build
The output jar is written to build/libs/ as [自定义月相]<archives_base_name>-<version>.jar.
Key classes:
- Entry point —
com.inf1nlty.custommoonphases.CustomMoonPhasesMod - Configs —
com.inf1nlty.custommoonphases.CustomMoonPhasesConfigs - Phase resolver —
com.inf1nlty.custommoonphases.moon.CustomMoonPhaseResolver
LGPL-3.0