Fork of Victimarius/millmix that fixes and tweaks even more things in Millénaire 1.12.2 mod making it more immersive.
Description
It's a mod that patches Millenaire 8.1.2 on 1.12.2 with mixins, making it more immersive, more stable and lighter on performance. I forked it from Victimarius/millmix.
It fixes log spam, prevents buildings from spawning on/breaking the landscape, improves several "goals" to make Millagers feel more organic, fixes some nasty world-data corruption/pathfinding bugs, and adds a little performance layer (goal caching, ghost movement for offscreen villagers, parallel building plan loading).
It's also useful for culture creators because it fixes millagers not planting if the farm building has no chests (only custom addons have farms without chests).
Current features
Farming goals
Villagers wait for crops to be ripe — prevents them from rushing on the first ripe crop.
Villagers harvest and plant slower — feels more natural.
Planting seeds fix in farms without inventory (custom content) — villagers now use seeds properly from their own inventory, the field storage, or their house. So villagers handle farms that miss chests natively.
World generation
Smoother building placement near mountains (applies to walls too) — stops buildings from popping up right on the edge of mountains or uneven ground by making sure the land around them is flat enough. Adjustable config: maxTerrainHeightDiff / maxWallTerrainHeightDiff.
Disable walls generation entirely — toggleable config: disableAllWalls=false.
Ancient Warfare 2 compatibility — buildings/walls won't generate overlapping AW2 structures/town claims. Toggleable config: avoidAW2Structures.
Parallel building plan loading — culture building plans (PNGs) load on multiple threads at startup, reducing loading times. Tested on my 200 mods modpack + millenaire culture megapack, the gain was approx 10 seconds loading time on my 24 threads cpu.
Pathing
Fixed entities getting permanently stuck on Millénaire path slabs — a path slab's collision box was 7/16 instead of a normal 8/16 half-slab, which made the vanilla pathfinder trigger a broken in-place jump. Entities would freeze on that block forever unless pushed off it.
Fixed Error in onUpdate(). Check millenaire.log — el famoso "cauldron bug".
Ghost movement for offscreen villagers — villagers far from any player (beyond a configurable view distance) skip real A* pathfinding entirely and instead walk straight toward their goal at a configurable speed, snapping back to normal pathfinding once a player gets close. Goal logic still resolves normally. Reduces server load with many loaded villages.
Villager behaviour
Includes all original MillMix fixes.
Villager toggledoor compatible with MalisisDoors.
Millagers no longer warp to the player if attacked.
No more seller UI popping while fighting — right clicking a millvillager mid-fight won't open the trade screen anymore.
Random offset on visit goals (patrol, godrinkcider…) — makes villagers cluster less so it's more immersive.
Lumberman
Bigger chop trees radius — configurable: chopWoodRadius.
Fixed TreeClearer crash/incompatibility with Dynamic Trees (branch blocks).
Fixed TreeClearer leaving floating snow layers on cleared trees.
Performance
Goal caching for GetGoodsForHousehold, GetResourcesForShops, GetTool, MerchantVisitBuilding — reduces the CPU cost of villagers repeatedly scanning buildings/inventories to fetch or deliver goods. Purely an optimization, behaviour should be unchanged.
World data / save reliability
Force-sync writes for village/world data files (buildings, paths, construction, villager records, world data) — hardens save-to-disk against crashes/power loss so village/world files are much less likely to end up truncated or corrupted. Hopefully fixes a rare Linux bug that could zero-out world data after a crash.
Sanitized villager record writes.
Config menu "M"
Allows higher [STUPIDLY DANGEROUS] config settings values for the "M" in-game menu — DON'T MESS WITH VILLAGE RADIUS, 100 IS OK LOL (up to 2000 with my mod iirc).
Villager names distance can be set to 0 — totally hides villager names directly in-game (avoids editing config-custom.txt and restarting).
Commands
/millGetRep — get reputation for the nearest village (from old MillMix).
/millDebugExportWorld <radiusBlocks> — exports the chunks around all nearby villages/lone buildings as a ZIP for bug reports. Saved to config/millmix/debug/.
/millDebugResetLoneBuildingVillagers — respawns dead/bugged villagers in lone buildings. Same idea as Millénaire's own reset command, but for lone buildings.
/millConfigReload — reloads Millénaire's config txts and MillMix's own config on a running server, no restart needed.
/millRenameLoneBuilding <oldname> <newname> — renames a lone building, tab-completion supported. Picks the closest match to the player if several buildings share a name.
/millRenameVillage no longer errors on duplicate village names — now picks the village closest to the player instead of throwing.
Log enhancements
Muted error Could not find a villager type to create. Gender: 2 — Hides this error that floods millenaire.log, preventing it from polluting hard drive space and health.
**Redirected millenaire.log and millenaire-server.log to /millenaire-custom/logs It now rotates Millénaire log files per-session instead of letting millenaire.log grow infinitely.
Prerequisites
- MixinBooter Update it if my mod don't work
- Millénaire 8.1.2
if you previously installed my bansoukou patch
- Remove Bansoukou and
/minecraft/bansoukou(if you don't use it for another things) - Remove any old MillMix version (since it replaces it)
My mod should not break your save but please make backups
There still aren't other goal tweaks I talked about some times ago on Millénaire Discord such as guards actually patrolling or farmer children. At the moment, my mod just patches bits of game code, not culture related files like goals.txt. I will do, but I want to do it cleanly. Also, note that I didn't carefully test all tweaks. If you have problems, report it here on issues tab or in the millenaire discord.
If you run into a broken/corrupted village, /millDebugExportWorld <radius> near it and send me the resulting zip (usually under 10MB) so I can investigate or try to fix it.
What's a goal ?
A goal is simply the target of a villager. For example, the farmer goals will be harvestWheat, plantWheat, getBackResourceHome among others.
Millenaire website
Millenaire discord
Thanks to
Victimarius mouse0w0 Victimarius mchorse TudbuT for MillMix
I used TemplateDevEnv from CleanroomMC repo to make this mod
Have a nice day