介绍
MCMT – 多线程模组
如果你在使用此模组时遇到模组中的漏洞,请尝试在不安装此模组的情况下复现它们,因为其他模组开发者不应该费心去调试并发问题。
此模组由 MC Server Hosting 赞助
获取我们最受欢迎的 Ryzen 3000 和 5000 驱动的 Minecraft 主机方案,配备 8GB 内存,每月仅需 $15!在 https://mcserverhosting.net/ 了解更多
这是一个对 Minecraft 的 tick 执行进行多线程处理的模组。很疯狂,我知道。它由 coremodding 的黑暗力量带给你,并且只在我测试过的范围内有效。
此模组改变了服务端处理(无论是在专用服务器还是单人集成的服务器上),并将所有世界、实体、方块实体和环境 tick 分派到线程池,允许 Minecraft 的并行执行。在测试中,单人游戏中启用 vs 禁用的 tick 时间显示出约 20+% 的改进。请注意,卸载 vs 禁用似乎相似,但会有不同的时间特征,因为这确实会干扰游戏的许多执行。在单人游戏中,我看到这平均接近 50%,而在多人游戏中可能更高。
理论上,如果这发展得足够充分(即达到稳定的程度),它应该允许单个服务器实例中有更多玩家;或者在模组游戏中加载和处理更多区块。
注意:此模组仅对 tick 执行进行多线程处理;它可能不会帮助帧率或类似的东西。
我创建了一个 Discord,如果你想谈论/聊天/抱怨问题:https://discord.gg/ZuYgPFURkf
安装
从 0.18.60 开始,你只需下载 jar 文件,它会自行解包,无需额外操作
另请注意,如果你遇到重大问题,请尝试 Java 8。似乎有一些奇怪的 jvm 版本兼容性漏洞,我正在调查。 这在更新 0.21.80 中已修复
请注意,卸载模组时将有两个 jar 文件需要删除
之前的 syncfu 过程(0.17.x):
在最新版本中,安装过程现已改变
现在需要 2 个 jar 文件,一个用于实际的模组功能,另一个用于挂钩到 modlauncher 以允许修改 FastUtil。游戏将在没有第二个 jar 的情况下加载,但会更不稳定。我正在寻找解决方案,让人们不必下载两个 jar,但这仍在进行中
这两个 jar 是:
- jmt_mcmt-{version}-{mcversion}
- jmt_mcmt-{version}-syncfu
因为 curseforge 很奇怪,我只能将它附加到其中一个发布版本(因为否则它就是一个重复文件;为什么他们不能直接去重,我不知道)
我正在研究修复这个问题,但这一切发生的原因只是因为我以为这作为单个 jar 解决方案可以正常工作,而且我明确记得测试过某种配置,所以我不知道发生了什么
功能
- 多线程处理以下内容的 tick:
- 方块实体(即方块
- 实体(生物等)
- 世界/维度(因此主世界和下界可以并行处理)
- 环境刻(植物生长、草蔓延等)
- 正在测试中;但到目前为止一直正常
警告及其他事项
如果你在受管理的启动器中使用此模组,并希望将其移除;请确保删除两个jar文件。该模组以Jar in Jar方案打包,将coremod和forge模组打包在一起,但某些启动器似乎只会删除其中一个jar。
此模组以从未被设计过的方式干预Minecraft内部机制。虽然目前已进行了超过10小时的测试;但总体而言这并不算多。请备份世界;预期会有bug;等等。
关于这一点,如果你在游玩模组;除非模组作者明确声明接受bug报告,否则不要向他们报告bug;因为模组(目前)并非为支持多线程而构建。对各位模组作者:此模组会定期在日志中输出“MCMT enabled; logs invalid”,以极其明确地表明你应该忽略这些日志。
另请注意:到目前为止我遇到过1次世界损坏;但那可能是由整合中的另一个模组引起的(且发生在1.16.1,可能是forge beta导致的)。总之,自0.12.22起包含了强制加载选项,可以强制加载损坏的区块。因此,我建议你测试各种配置;请通过github(issues链接)报告任何bug,并添加世界备份工具。
损坏的版本:
以下是我发布的损坏版本;万一你拥有其中之一,请不要使用。它们已从下载中移除。这也是记录错误的好方式。它们曾以醒目的大字位于页面顶部,但现在已不再需要
重要通知:另请注意,0.13.27之前的所有0.13.x构建版本均已损坏,曾可供下载数小时;其损坏会导致崩溃,因此应该很明显。损坏原因是我在尝试打包发布时搞砸了,我将重做构建流程(目前需要复制文件6次来创建各种构建)。此后我已基本修复构建流程(现在只需更改几个文件即可构建所有必要版本)
警告:我又要发布一条“版本损坏”消息了(这很糟糕);版本0.17.52实际上无法工作,所以有点没用,但至少不应该崩溃。检查模组是否正常加载的简单方法是看日志中是否有“[ne.mi.co.Co.jmt_mcmt/COREMODLOG]: [JMTSUPERTRANS]”。如果没有,则模组未加载,很可能是因为版本损坏。抱歉带来不便。
命令
所有命令都位于“/mcmt”子树下;自动补全可以找到所有命令,但如果你想查看,列表如下
Config
这些允许你实时修改MCMT的配置,包括完全禁用执行路径更改、保存配置以及还原配置
Toggle [option]
这让你切换任何代码路径更改。不带任何参数时将发出全局禁用
保存 | 重新加载
这些命令可将当前运行配置保存到文件系统,或从文件系统重新加载当前运行配置
TEManage
这里的子命令可用于管理方块实体的执行;list 会列出黑名单/白名单中的方块实体;target 可让你对正在注视的方块进行操作(例如将其加入白名单/黑名单)
状态
此命令会显示主配置的当前状态(即哪些执行路径变更已启用或禁用)
统计信息
统计信息会显示当前 MCMT 状态;可使用 toggle 切换,也可将统计信息以 CSV 格式记录到磁盘。
调试
这些是内部调试命令;你可以随意尝试,但请注意,它们可能会导致问题。
运行原理
默认的 Minecraft 刻循环基本上就是一连串嵌套的 for-each 循环(这里说“基本上”是为了简化说明)。这个模组会在游戏原本要执行循环中的操作时,将执行任务交给线程池,由线程池处理这些工作。
为此,它会修改 Minecraft 的一些内部结构,使这种做法可行(例如允许非主线程加载区块等)。
之后会在 GitHub 上提供更多说明
展示/演示视频
KubiRemPL
已知的模组不兼容问题
这里会列出存在各种不兼容问题的模组
兼容性配置建议:
- disableWorldPostTick = true
- enableChunkTimeout = true
- enableBlankReturn = true
全局不兼容
- Performant – 后续版本似乎会导致不利的问题;目前正在处理兼容性
会报错但可以忽略
- Rough Mobs Reloaded – 会在 RiderLocation 期间的寻路代码中引发 NPE;可以忽略,也可以在 RMR 的配置中禁用相关功能
需要更改配置
- Clumps – 在 MCMT 配置中启用选项 `disableWorldPostTick = true`
- LycanitesMobs – 在其配置中禁用地牢生成(原因未知)-(待办:确认 v0.20.x 是否仍需要此设置)
此前存在问题
- Lava monsters – 已在构建版本 0.11.19 中修复
- Serene Seasons – 已在 0.11.19 中修复
想支持我吗? 我有 Ko-Fi 页面
常见问题
MCMT 支持哪些 Minecraft 版本?
MCMT 支持 Minecraft Java 版 1.15.2–1.18.2,共 7 个版本,可用的加载器:Forge。下载时注意选择和你游戏版本一致的文件。
MCMT 怎么安装?
先用 PCL2 或 HMCL 启动器安装对应版本的 Forge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。

评论
登录后评论和评分