跳到正文

MCMT

作者:jediminer543

为 Minecraft 实现多线程,既为了整活也为了性能提升

收藏

介绍

介绍由机器翻译自 CurseForge 原页面,仅供参考。

 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:
  • 方块实体(即方块
  • 实体(生物等)
  • 世界/维度(因此主世界和下界可以并行处理)
  • 环境刻(植物生长、草蔓延等)
  • 与Vanilla minecraft完全兼容(就目前测试范围而言)
  • 理论上与大多数模组兼容
    • 正在测试中;但到目前为止一直正常
  • 警告及其他事项

    如果你在受管理的启动器中使用此模组,并希望将其移除;请确保删除两个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/版本名 下面。

    评论

    登录后评论和评分