MillMix (Remixined) / MillMix Jubi

MillMix (Remixined) / MillMix Jubi

一个试图修复Millénaire并通过混入添加小功能的模组。

Bug修复

修复与改进版 Victimarius/millmix

本模组在 Victimarius/millmix 基础上进行修复并进一步调整,让 Millénaire 1.12.2 模组更加身临其境。

描述

这是一个通过 Mixin 技术修补 Millenaire 8.1.2 (1.12.2 版本) 的模组,使其更加沉浸、稳定且对性能影响更小。我从 Victimarius/millmix 分支出来。

它修复了日志刷屏问题、防止建筑生成时破坏地形、改进了多个“目标”使村民行为更自然、修复了一些严重的世界数据损坏/寻路 Bug,并添加了少量性能优化(目标缓存、屏幕外村民的幽灵移动、并行建筑蓝图加载)。

对自定义文化创作者也很有用——它修复了农场建筑没有箱子时村民无法种植的问题(只有自定义附加包才有无箱子的农场)。

当前特性

农业目标

村民等待作物成熟 —— 防止它们一窝蜂冲向最早成熟的作物。

村民收获和种植速度变慢 —— 感觉更自然。

为无库存农场修复种植种子(自定义内容) —— 村民现在能正常从自己的物品栏、农田存储或 房屋 中使用种子。因此村民能够处理原生缺少箱子的农场。

世界生成

靠近山脉的建筑放置更平滑(也适用于墙壁) —— 确保建筑周围地面足够平坦,防止建筑突然出现在山体边缘或不平整的地面上。可配置:maxTerrainHeightDiff / maxWallTerrainHeightDiff。

完全禁用墙壁生成 —— 可切换配置:disableAllWalls=false。

Ancient Warfare 2 兼容 —— 建筑/墙壁不会生成在与 AW2 结构/城镇领地重叠的位置。可切换配置:avoidAW2Structures。

并行建筑蓝图加载 —— 启动时文化建筑蓝图(PNG)在多线程上加载,减少加载时间。在我包含 200 个模组的整合包加上 Millenaire 文化巨包上进行测试,在我的 24 线程 CPU 上大约节省了 10 秒加载时间。

寻路

修复实体永久卡在 Millénaire 路径半砖上的问题 —— 路径半砖的碰撞箱是 7/16 而不是正常的 8/16 上半砖,导致原版寻路器触发错误的原地跳跃。实体如果不被推开,就会永远冻结在该方块上。

修复 Error in onUpdate(). Check millenaire.log —— 也就是著名的“大锅 Bug”。

屏幕外村民的幽灵移动 —— 远离任何玩家(超过可配置的视距)的村民完全跳过实际的 A* 寻路,而是以可配置的速度直线走向目标,当玩家靠近时恢复正常寻路。目标逻辑照常执行。减少了当许多村庄被加载时的服务器负载。

村民行为

包含所有原始的 MillMix 修复。

村民开关门与 MalisisDoors 兼容。

村民被攻击时不再传送至玩家。

战斗中不再弹出交易界面 —— 在战斗中右键点击村民不再打开交易画面。

访问目标(巡逻、喝苹果酒等)的随机偏移 —— 减少村民聚集,使游戏更沉浸。

伐木工

更大的砍树半径 —— 可配置:chopWoodRadius。

修复 TreeClearer 与动态树木模组(Dynamic Trees)的崩溃/不兼容问题(树枝方块)。

修复 TreeClearer 在清除树木后遗留浮空雪层的问题。

性能

为 GetGoodsForHousehold、GetResourcesForShops、GetTool、MerchantVisitBuilding 添加目标缓存 —— 减少村民反复扫描建筑/物品栏以获取或交付物品的 CPU 开销。纯粹是优化,行为应保持不变。

世界数据 / 存档可靠性

村庄/世界数据文件的强制同步写入(建筑、路径、建造、村民记录、世界数据)—— 强化保存到磁盘的可靠性以应对崩溃/断电,使村庄/世界文件不太可能出现截断或损坏。有望修复一个罕见的 Linux 错误,该错误可能在崩溃后将世界数据清零。

清理村民记录的写入。

配置菜单“M”

允许游戏内“M”菜单中的更高 [非常危险] 配置值 —— 不要乱动村庄半径,100 就很好 LOL(我记得在我的模组下最高可达 2000)。

村民名字显示距离可设为 0 —— 直接在游戏中完全隐藏村民名字(避免编辑 config-custom.txt 并重启)。

命令

/millGetRep —— 获取最近村庄的声望值(来自旧版 MillMix)。

/millDebugExportWorld <半径方块数> —— 导出附近所有村庄/单栋建筑周围区块的 ZIP 文件用于 Bug 报告。保存至 config/millmix/debug/。

/millDebugResetLoneBuildingVillagers —— 重新生成单栋建筑中死亡/Bug 的村民。类似于 Millénaire 自己的重置命令,但针对单栋建筑。

/millConfigReload —— 在运行中的服务器上重新加载 Millénaire 的配置 txt 和 MillMix 自身的配置,无需重启。

/millRenameLoneBuilding <旧名称> <新名称> —— 重命名单栋建筑,支持 Tab 自动补全。如果多个建筑同名,则选择离玩家最近的建筑。

/millRenameVillage 不再因村庄名重复而报错 —— 现在改为选择离玩家最近的村庄,而不是抛出错误。

日志增强

静默错误 Could not find a villager type to create. Gender: 2 —— 隐藏这条淹没 millenaire.log 的错误,防止其占用硬盘空间和影响健康。

将 millenaire.log 和 millenaire-server.log 重定向到 /millenaire-custom/logs 现在日志文件按会话轮替,而不是让 millenaire.log 无限增长。

前置要求

  • MixinBooter 如果模组不工作,请更新它
  • Millénaire 8.1.2

如果你之前安装了我的 bansoukou 补丁

  • 移除 Bansoukou 和 /minecraft/bansoukou(如果你没有在其他地方使用它)
  • 移除任何旧版本的 MillMix(因为它会替换它)

我的模组应该不会破坏你的存档,但请做好备份

之前我在 Millénaire Discord 上提到的其他目标调整目前尚未实现,例如守卫实际巡逻或农夫的孩子。目前,我的模组只是修补了部分游戏代码,而不是像 goals.txt 这样的文化相关文件。我会做的,但我想做得干净利落。另外,请注意我并未仔细测试所有调整。如果你遇到问题,请在此仓库的 Issues 标签页或 Millénaire Discord 中报告。

如果你遇到了损坏/出错的村庄,请在其附近使用 /millDebugExportWorld <半径> 命令,并将生成的 zip 文件(通常小于 10 MB)发给我,以便我调查或尝试修复。

什么是“目标”?

目标简单来说就是村民的目标。例如,农夫的目标包括 harvestWheat、plantWheat、getBackResourceHome 等。

Millenaire 网站

https://millenaire.org/

Millenaire Discord

https://discord.gg/nCXjd4s

致谢

Victimarius mouse0w0 Victimarius mchorse TudbuT 提供的 MillMix

我使用了 CleanroomMC 仓库的 TemplateDevEnv 来制作这个模组

祝您愉快