Merge 1.19.4 into 1.20
This commit is contained in:
commit
84bd756cdf
9
.github/workflows/gradle.yml
vendored
9
.github/workflows/gradle.yml
vendored
|
|
@ -21,11 +21,12 @@ jobs:
|
|||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
cache: 'gradle'
|
||||
- name: Build ModernFix using Gradle
|
||||
run: |
|
||||
chmod +x gradlew
|
||||
./gradlew --no-daemon build
|
||||
uses: gradle/gradle-build-action@v2
|
||||
with:
|
||||
cache-read-only: ${{ !startsWith(github.ref, 'refs/heads/1.') }}
|
||||
gradle-home-cache-cleanup: true
|
||||
arguments: build
|
||||
- name: Upload Artifacts to GitHub
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -199,19 +199,6 @@ public class ModernFixEarlyConfig {
|
|||
// Defines the default rules which can be configured by the user or other mods.
|
||||
// You must manually add a rule for any new mixins not covered by an existing package rule.
|
||||
this.addMixinRule("launch.class_search_cache", true);
|
||||
/*
|
||||
this.addMixinRule("perf.use_integrated_resources.jepb", modPresent("jepb"));
|
||||
this.addMixinRule("perf.use_integrated_resources.jeresources", modPresent("jeresources"));
|
||||
this.addMixinRule("perf.jeresources_startup", modPresent("jeresources"));
|
||||
this.addMixinRule("perf.state_definition_construct", modPresent("ferritecore"));
|
||||
this.addMixinRule("bugfix.starlight_emptiness", modPresent("starlight"));
|
||||
this.addMixinRule("bugfix.chunk_deadlock.valhesia", modPresent("valhelsia_structures"));
|
||||
this.addMixinRule("bugfix.tf_cme_on_load", modPresent("twilightforest"));
|
||||
this.addMixinRule("bugfix.refinedstorage", modPresent("refinedstorage"));
|
||||
this.addMixinRule("perf.async_jei", modPresent("jei"));
|
||||
this.addMixinRule("perf.patchouli_deduplicate_books", modPresent("patchouli"));
|
||||
this.addMixinRule("perf.kubejs", modPresent("kubejs"));
|
||||
*/
|
||||
|
||||
/* Mod compat */
|
||||
disableIfModPresent("mixin.perf.thread_priorities", "smoothboot", "threadtweak");
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
{
|
||||
"key.modernfix": "现代化修复",
|
||||
"key.modernfix.config": "打开配置屏幕",
|
||||
"modernfix.jei_load": "正在加载 JEI,这可能会花费一段时间。",
|
||||
"modernfix.no_lazydfu": "未安装 DFU 载入优化。如果 Minecraft 需要从旧版本更新游戏数据,可能会出现极大的延迟。",
|
||||
"modernfix.jei_load": "正在加载JEI,这可能会花费一段时间。",
|
||||
"modernfix.no_lazydfu": "未安装DFU载入优化。如果Minecraft需要从旧版本更新游戏数据,可能会出现极大的延迟。",
|
||||
"modernfix.no_ferritecore": "未安装铁氧体磁芯。内存占用将会非常高。",
|
||||
"modernfix.perf_mod_warning": "推荐安装这些模组,但你也可以在现代化修复的配置中禁用此警告。",
|
||||
"modernfix.config": "现代化修复 Mixin 配置",
|
||||
"modernfix.config": "现代化修复Mixin配置",
|
||||
"modernfix.config.done_restart": "完成(生效需重启)",
|
||||
"modernfix.option.on": "开启",
|
||||
"modernfix.option.off": "关闭",
|
||||
"modernfix.option.disabled": "已禁用",
|
||||
"modernfix.option.enabled": "已启用",
|
||||
"modernfix.option.mod_override": ",原因是安装了 [%s] 模组",
|
||||
"modernfix.config.not_default": " (已修改)",
|
||||
"modernfix.option.mod_override": ",原因是安装了这些模组:[%s]",
|
||||
"modernfix.config.not_default": "(已修改)",
|
||||
"asynclocator.map.locating": "地图(定位中……)",
|
||||
"asynclocator.map.none": "地图(未能在附近找到相关地物)",
|
||||
"modernfix.option.category.performance": "性能",
|
||||
|
|
@ -23,51 +23,93 @@
|
|||
"modernfix.option.category.troubleshooting.description": "用于辅助诊断问题的功能",
|
||||
"modernfix.option.category.expert_only": "高级设置",
|
||||
"modernfix.option.category.expert_only.description": "不要轻易修改,除非你知道自己究竟在做什么",
|
||||
"modernfix.option.name.mixin.perf.async_jei": "后台 JEI 加载",
|
||||
"modernfix.option.mixin.perf.async_jei": "仅 1.16。§l一项关键优化。§r对 JEI 进行了调整,让其于后台线程上重载,完全消除了它在载入世界时造成的巨大延迟。",
|
||||
"modernfix.option.mixin.perf.async_locator": "仅 1.16。向后移植了 Async Locator 模组的补丁,以消除与 §b/locate§r、战利品表生成等相关事物的服务端冻结现象。",
|
||||
"modernfix.option.mixin.perf.biome_zoomer": "仅 1.16。使用 1.18 版本的逻辑进行微优化,以提高生物群系缩放器(注:用于巨型生物群系)的性能。",
|
||||
"modernfix.option.mixin.perf.blast_search_trees": "全版本共有。原版会构造用于创造模式搜索功能的搜索树,如果安装了 REI 或者 JEI,将禁用原版构造,用这两种模组中的搜索实现取而代之。这在加载世界时会节省几秒钟,并且可能(虽然我没有测试)会减少一点内存占用。",
|
||||
"modernfix.option.mixin.perf.boost_worker_count": "仅 1.16。移除被硬编码的工作线程数量上限,类似于 Mojang 在 1.18 中所做的。",
|
||||
"modernfix.option.name.mixin.perf.async_jei": "后台JEI加载",
|
||||
"modernfix.option.mixin.perf.async_jei": "仅1.16。§l一项关键优化。§r对JEI进行了调整,让其于后台线程上重载,完全消除了它在载入世界时造成的巨大延迟。",
|
||||
"modernfix.option.mixin.perf.async_locator": "仅1.16。向后移植了Async Locator模组的补丁,以消除与§b/locate§r、战利品表生成等相关事物的服务端冻结现象。",
|
||||
"modernfix.option.mixin.perf.biome_zoomer": "仅1.16。使用1.18版本的逻辑进行微优化,以提高生物群系缩放器(注:用于巨型生物群系)的性能。",
|
||||
"modernfix.option.mixin.perf.blast_search_trees": "全版本共有。原版会构造用于创造模式搜索功能的搜索树,如果安装了REI或者JEI,将禁用原版构造,用这两种模组中的搜索实现取而代之。这在加载世界时会节省几秒钟,并且可能(虽然我没有测试)会减少一点内存占用。",
|
||||
"modernfix.option.mixin.perf.boost_worker_count": "仅1.16。移除被硬编码的工作线程数量上限,类似于Mojang在1.18中所做的。",
|
||||
"modernfix.option.mixin.perf.cache_blockstate_cache_arrays": "全版本共有。避免每次初始化方块状态缓存时都创建枚举数组的新副本。只是微优化,但它很容易做到(注:所以顺手做了)。",
|
||||
"modernfix.option.mixin.perf.cache_model_materials": "全版本共有。模型会返回 §bRenderMaterial§r(纹理)的集合和依赖项列表,现在游戏会记忆它们,而不是要求它们在每次请求中都重新计算一次。这有助于加速模型加载/烘焙的进程。",
|
||||
"modernfix.option.mixin.perf.cache_strongholds": "全版本共有。将生成的要塞位置列表与世界一起保存,免得每次加载世界时都重新生成。在 1.16 版本中可以减少一点世界加载时间,在 1.18 和 1.19 中减少的会多得多。",
|
||||
"modernfix.option.mixin.perf.cache_upgraded_structures": "全版本共有。许多模组的结构文件已经过时,这就要求游戏在每次加载它们时都要用 DFU 来升级它们。这个升级过程可能会很慢。此补丁添加了一些逻辑,保存结构的升级版本,并在下次加载时直接重用它们。为了处理模组改变了结构文件但没有改变名称的情况,原始文件的哈希值将与被缓存的版本进行比较,若不匹配,该结构将被再次升级。",
|
||||
"modernfix.option.mixin.perf.compress_biome_container": "仅 1.16。微优化,借鉴了氢(Hydrogen)模组,试图尽可能节省生物群系容器的空间。如果安装了更好的末地或 Chocolate Fix 等与此功能冲突的模组,此功能会自动禁用。",
|
||||
"modernfix.option.mixin.perf.cache_model_materials": "全版本共有。模型会返回§bRenderMaterial§r(纹理)的集合和依赖项列表,现在游戏会记忆它们,而不是要求它们在每次请求中都重新计算一次。这有助于加速模型加载/烘焙的进程。",
|
||||
"modernfix.option.mixin.perf.cache_strongholds": "全版本共有。将生成的要塞位置列表与世界一起保存,免得每次加载世界时都重新生成。在1.16版本中可以减少一点世界加载时间,在1.18和1.19中减少的会多得多。",
|
||||
"modernfix.option.mixin.perf.cache_upgraded_structures": "全版本共有。许多模组的结构文件已经过时,这就要求游戏在每次加载它们时都要用DFU来升级它们。这个升级过程可能会很慢。此补丁添加了一些逻辑,保存结构的升级版本,并在下次加载时直接重用它们。为了处理模组改变了结构文件但没有改变名称的情况,原始文件的哈希值将与被缓存的版本进行比较,若不匹配,该结构将被再次升级。",
|
||||
"modernfix.option.mixin.perf.compress_biome_container": "仅1.16。微优化,借鉴了氢(Hydrogen)模组,试图尽可能节省生物群系容器的空间。如果安装了更好的末地或Chocolate Fix等与此功能冲突的模组,此功能会自动禁用。",
|
||||
"modernfix.option.mixin.perf.datapack_reload_exceptions": "全版本共有。数据包重载过程中不再打印一些常见异常(如战利品表/配方中的物品丢失)的堆栈跟踪,减少日志刷屏,且可能稍微提高了启动速度。只是不打印堆栈,一条异常消息依然会被打印出来。",
|
||||
"modernfix.option.mixin.perf.dedicated_reload_executor": "全版本共有。将资源包和数据包的重载任务转移到一个专门的工作线程上,而不是使用默认的主工作线程。这让流畅加载(Smooth Boot)模组在运行时仍然可能提高单人游戏的性能,同时不会因为线程数量限制减慢启动速度。",
|
||||
"modernfix.option.mixin.perf.deduplicate_location": "全版本共有,但由于会影响加载时间,默认禁用。对资源位置的命名空间和路径进行去重。这节省了内存,但也大大增加了新资源位置的构造成本。",
|
||||
"modernfix.option.mixin.perf.dynamic_dfu": "全版本共有。修改了 DFU 的初始化,使其仅在第一次需要升级数据时加载。这听起来类似 DFU载入优化,但实现方式截然不同,因为它能避免加载§o任何§rDFU类/数据结构,而 DFU载入优化只是禁用其规则优化。本质上说,这是一个 DataFixerSlayer 的安全版本,因为它仍然会在需要时加载 DFU。\n\n即使启用了这个选项,你也应该继续使用 DFU载入优化,否则 DFU 规则优化依然会导致卡顿。",
|
||||
"modernfix.option.mixin.perf.dynamic_resources": "全版本共有。详见 https://github.com/Kasualix/ModernFix/wiki/动态资源加载---常见问题解答。",
|
||||
"modernfix.option.mixin.perf.dynamic_dfu": "全版本共有。修改了DFU的初始化,使其仅在第一次需要升级数据时加载。这听起来类似DFU载入优化,但实现方式截然不同,因为它能避免加载§o任何§rDFU类/数据结构,而DFU载入优化只是禁用其规则优化。本质上说,这是一个DataFixerSlayer的安全版本,因为它仍然会在需要时加载DFU。\n\n即使启用了这个选项,你也应该继续使用DFU载入优化,否则DFU规则优化依然会导致卡顿。",
|
||||
"modernfix.option.mixin.perf.dynamic_resources": "全版本共有。详见https://github.com/Kasualix/ModernFix/wiki/动态资源加载---常见问题解答。",
|
||||
"modernfix.option.mixin.perf.dynamic_structure_manager": "全版本共有。允许游戏在结构生成结束后卸载结构文件,而非让它们永远处于已加载状态。",
|
||||
"modernfix.option.mixin.perf.fast_registry_validation": "全版本共有。每次验证注册时,Forge 都会通过反射来查找一个方法,这完全没必要。这个补丁简单地缓存了方法的返回值,因为它每次都是一样的。",
|
||||
"modernfix.option.mixin.perf.fast_registry_validation": "全版本共有。每次验证注册时,Forge都会通过反射来查找一个方法,这完全没必要。这个补丁简单地缓存了方法的返回值,因为它每次都是一样的。",
|
||||
"modernfix.option.mixin.perf.faster_font_loading": "全版本共有。优化字体渲染器,以更快地加载字体,加快资源重载速度。",
|
||||
"modernfix.option.mixin.perf.faster_item_rendering": "全版本共有。避免在 GUI 中渲染物品的侧面。(是的,原版似乎就是这样做的。)\n\n如果你的显卡比较差,又安装了 REI/JEI 这类模组,且 GUI 中显示了有够多的物品,此功能甚至可以使 FPS 增加 2 倍。由于此优化刚刚诞生,没有经过很多测试,所以默认情况下是禁用的,但应该能安全使用。最有可能出现的问题是物品在 GUI 中完全不可见,或者在世界中显示为平面。",
|
||||
"modernfix.option.mixin.perf.faster_texture_loading": "所有 1.19.4 之前的版本。避免读取两次纹理资源(第一次读取使用的是非常慢的代码路径),仅使用更快的第二次读取逻辑(类似于 1.19.3+)。",
|
||||
"modernfix.option.mixin.perf.faster_texture_stitching": "全版本共有。使游戏能够使用一个效率更高的纹理拼接系统,该系统最初由 SuperCoder79 在 1.7.10 上为 lwjgl3ify 编写,此项可以减少一点加载时间。偶尔,有人报告说这会在方块或 GUI 上引起奇怪的显示假象,这可能是钠(Sodium)模组的程序错误。",
|
||||
"modernfix.option.mixin.perf.jeresources_startup": "仅 1.16。优化了 JER(Just Enough Resources),让其不需要为同一职业多次创建村民实体,这在 JEI 启动时可以节省时间。",
|
||||
"modernfix.option.mixin.perf.kubejs": "仅 1.16。对 KubeJS 进行了优化,以避免不必要的 §bItemStack§r 复制等,减少了数据包加载时间。",
|
||||
"modernfix.option.mixin.perf.faster_item_rendering": "全版本共有。避免在GUI中渲染物品的侧面。(是的,原版似乎就是这样做的。)\n\n如果你的显卡比较差,又安装了REI/JEI这类模组,且GUI中显示了有够多的物品,此功能甚至可以使FPS增加2倍。由于此优化刚刚诞生,没有经过很多测试,所以默认情况下是禁用的,但应该能安全使用。最有可能出现的问题是物品在GUI中完全不可见,或者在世界中显示为平面。",
|
||||
"modernfix.option.mixin.perf.faster_texture_loading": "所有1.19.4之前的版本。避免读取两次纹理资源(第一次读取使用的是非常慢的代码路径),仅使用更快的第二次读取逻辑(类似于1.19.3+)。",
|
||||
"modernfix.option.mixin.perf.faster_texture_stitching": "全版本共有。使游戏能够使用一个效率更高的纹理拼接系统,该系统最初由SuperCoder79在1.7.10上为lwjgl3ify编写,此项可以减少一点加载时间。偶尔,有人报告说这会在方块或GUI上引起奇怪的显示假象,这可能是钠(Sodium)模组的程序错误。",
|
||||
"modernfix.option.mixin.perf.jeresources_startup": "仅1.16。优化了JER(Just Enough Resources),让其不需要为同一职业多次创建村民实体,这在JEI启动时可以节省时间。",
|
||||
"modernfix.option.mixin.perf.kubejs": "仅1.16。对KubeJS进行了优化,以避免不必要的§bItemStack§r复制等,减少了数据包加载时间。",
|
||||
"modernfix.option.mixin.perf.model_optimizations": "全版本共有。通过优化以加快模型加载过程。",
|
||||
"modernfix.option.mixin.perf.nbt_memory_usage": "全版本共有。对复合 NBT 标签使用一个更加高效的支持映射(backing map),从而消除重复键名,对小型复合 NBT 也使用数组映射。这减少了在内存中存储许多复合 NBT 标签的开销。",
|
||||
"modernfix.option.mixin.perf.nuke_empty_chunk_sections": "仅 1.16。灵感来自氢(Hydrogen)模组。将存储充满空气的区块部分标记为空(empty),避免在内存中存储它们。",
|
||||
"modernfix.option.mixin.perf.reduce_blockstate_cache_rebuilds": "全版本共有。§l一项关键优化。§r较新的 Minecraft(1.12 以上)实现了一个方块状态缓存系统,它可以缓存方块状态的常用信息,譬如其是否为固体方块,它的碰撞箱形状等等。原版中重建此缓存非常快(只要一两秒钟),但在安装了许多模组后就相当慢了,因为游戏中多了很多其它的方块状态,它们的缓存都需要被其重建。\n\n在 Forge 的影响下,这个问题变得更加严重,因为缓存会在很多地方重建,但这些数据在下一次重建前几乎肯定不会被用到。至于在哪儿,比如,在到达主菜单之前(在“Freezing data”阶段),以及在加载世界时(会出现很多次!)。\n\n通过让缓存重建转为惰性,现代化修复解决了这个性能瓶颈问题。每个方块状态在第一次访问数据时都会重建其缓存。无论何时,原版或 Forge 试图重建所有方块状态缓存的行为都会被重定向,变成简单地使每个方块状态的缓存失效。\n\n此项优化不应该对启动后的 TPS 产生任何影响。",
|
||||
"modernfix.option.mixin.perf.nbt_memory_usage": "全版本共有。对复合NBT标签使用一个更加高效的支持映射(backing map),从而消除重复键名,对小型复合 NBT 也使用数组映射。这减少了在内存中存储许多复合NBT标签的开销。",
|
||||
"modernfix.option.mixin.perf.nuke_empty_chunk_sections": "仅1.16。灵感来自氢(Hydrogen)模组。将存储充满空气的区块部分标记为空(empty),避免在内存中存储它们。",
|
||||
"modernfix.option.mixin.perf.reduce_blockstate_cache_rebuilds": "全版本共有。§l一项关键优化。§r较新的Minecraft(1.12以上)实现了一个方块状态缓存系统,它可以缓存方块状态的常用信息,譬如其是否为固体方块,它的碰撞箱形状等等。原版中重建此缓存非常快(只要一两秒钟),但在安装了许多模组后就相当慢了,因为游戏中多了很多其它的方块状态,它们的缓存都需要被其重建。\n\n在Forge的影响下,这个问题变得更加严重,因为缓存会在很多地方重建,但这些数据在下一次重建前几乎肯定不会被用到。至于在哪儿,比如,在到达主菜单之前(在“Freezing data”阶段),以及在加载世界时(会出现很多次!)。\n\n通过让缓存重建转为惰性,现代化修复解决了这个性能瓶颈问题。每个方块状态在第一次访问数据时都会重建其缓存。无论何时,原版或Forge试图重建所有方块状态缓存的行为都会被重定向,变成简单地使每个方块状态的缓存失效。\n\n此项优化不应该对启动后的TPS产生任何影响。",
|
||||
"modernfix.option.mixin.perf.remove_biome_temperature_cache": "全版本共有。移除生物群系温度缓存,以减少内存占用,就像新版本的锂所做的那样。",
|
||||
"modernfix.option.mixin.perf.resourcepacks": "全版本共有。§l一项关键优化。§r高版本的启动严重受到文件系统访问的瓶颈限制。资源包经常接受到很多请求,要列出资源或检查一项给定的资源是否存在,而每次请求都会调用一个效率极低的文件 API。\n\n现代化修复通过简单地缓存模组和原版提供的所有资源的列表,完全消除了此处的大部分瓶颈。缓存在资源重载时会进行重建(除了原版资源,因为它们在游戏运行时不应改变)。\n\n高清修复不能正确加载它的连接纹理(CTM)资源,除此之外此补丁没有已知的兼容问题。不过,我不建议在任何情况下使用高清修复,因为它本身就会增加几分钟的启动时间,而且根本没有与现代化修复进行过任何测试。",
|
||||
"modernfix.option.mixin.perf.reuse_datapacks": "仅 1.16。试图尽可能跳过数据包重载,来加快单人世界切换/重进时的速度。可能会导致一些模组的兼容性问题,但目前默认启用。",
|
||||
"modernfix.option.mixin.perf.rewrite_registry": "全版本共有。§l目前处于半残状态。§r非常暴力地使用更快地版本替换了 Forge 注册系统的一些内部结构,但目前在加载一些整合包时会导致冻结。默认关闭,原因显而易见。",
|
||||
"modernfix.option.mixin.perf.skip_first_datapack_reload": "仅 1.16 & 1.19。§l一项关键优化。§r\n\n在 1.16 开发周期的中期,Forge 对游戏打了补丁,在加载现有世界时重载两次数据包,来解决生物群系 ID 转移的问题。不幸地是,数据包重载往往需要 30 秒以上的时间,所以这非常严重地影响了世界加载时间。\n\n基于未完成的 Forge PR #8163,现代化修复做了必要的修改来避免这种重载。\n\nForge 在 1.18 版本删除了此改动,但随后在 1.19 版本中§o又再次§r添加了一个类似补丁,来修复新建单人世界时无法加载模组数据包的问题。幸运的是,在 1.19 版本中此问题仅限于世界创建屏幕,现有的世界只需要重载一次。然而,在 1.19 版本中点击“创建新世界”时,这依然使卡顿峰值的长度翻倍,因此现代化修复再次做出修改,不执行多余的重载。",
|
||||
"modernfix.option.mixin.perf.resourcepacks": "全版本共有。§l一项关键优化。§r高版本的启动严重受到文件系统访问的瓶颈限制。资源包经常接受到很多请求,要列出资源或检查一项给定的资源是否存在,而每次请求都会调用一个效率极低的文件API。\n\n现代化修复通过简单地缓存模组和原版提供的所有资源的列表,完全消除了此处的大部分瓶颈。缓存在资源重载时会进行重建(除了原版资源,因为它们在游戏运行时不应改变)。\n\n高清修复不能正确加载它的连接纹理(CTM)资源,除此之外此补丁没有已知的兼容问题。不过,我不建议在任何情况下使用高清修复,因为它本身就会增加几分钟的启动时间,而且根本没有与现代化修复进行过任何测试。",
|
||||
"modernfix.option.mixin.perf.reuse_datapacks": "仅1.16。试图尽可能跳过数据包重载,来加快单人世界切换/重进时的速度。可能会导致一些模组的兼容性问题,但目前默认启用。",
|
||||
"modernfix.option.mixin.perf.rewrite_registry": "全版本共有。§l目前处于半残状态。§r非常暴力地使用更快地版本替换了Forge注册系统的一些内部结构,但目前在加载一些整合包时会导致冻结。默认关闭,原因显而易见。",
|
||||
"modernfix.option.mixin.perf.skip_first_datapack_reload": "仅1.16&1.19。§l一项关键优化。§r\n\n在1.16开发周期的中期,Forge对游戏打了补丁,在加载现有世界时重载两次数据包,来解决生物群系ID转移的问题。不幸地是,数据包重载往往需要30秒以上的时间,所以这非常严重地影响了世界加载时间。\n\n基于未完成的Forge PR#8163,现代化修复做了必要的修改来避免这种重载。\n\nForge在1.18版本删除了此改动,但随后在1.19版本中§o又再次§r添加了一个类似补丁,来修复新建单人世界时无法加载模组数据包的问题。幸运的是,在1.19版本中此问题仅限于世界创建屏幕,现有的世界只需要重载一次。然而,在1.19版本中点击“创建新世界”时,这依然使卡顿峰值的长度翻倍,因此现代化修复再次做出修改,不执行多余的重载。",
|
||||
"modernfix.option.mixin.perf.state_definition_construct": "全版本共有。只在安装铁氧体磁芯时启用。利用铁氧体磁芯处理方块状态,加快方块状态的创建速度。在你安装了添加大量方块状态的模组(例如家具模组)时,此项优化有助于加快启动速度。",
|
||||
"modernfix.option.mixin.perf.sync_executor_sleep": "全版本共有。主线程在等待模组加载工作线程结束时,不再占着一个 CPU 核心在那空转。",
|
||||
"modernfix.option.mixin.perf.thread_priorities": "全版本共有。调整工作线程和服务端线程的优先级,使其低于客户端线程。这有助于使 CPU 核心较少的电脑 FPS 更稳定,只要其使用的 Java 实现能尊重优先级。",
|
||||
"modernfix.option.mixin.perf.use_integrated_resources": "主要针对 1.16 版本。为 JER(Just Enough Resources)打补丁,使其在单人游戏中直接使用内置服务端的战利品表数据,而不是无意义地重载战利品表。可以减少几秒钟的 JEI 启动时间。",
|
||||
"modernfix.option.mixin.bugfix.concurrency": "这组补丁修复了 MC 和/或 Forge 中的一些并发问题。其中大部分问题都会导致在加载过程中出现罕见的、难以诊断的崩溃。",
|
||||
"modernfix.option.mixin.bugfix.edge_chunk_not_saved": "此项是 SuperCoder 的区块保存修复(Chunk Saving Fix)模组的移植(因为我当时没发现它其实有 Forge 版本)。",
|
||||
"modernfix.option.mixin.bugfix.mc218112": "在处理实体数据时抛出异常可能导致死锁,此项修复了这个问题。原版在应该解锁数据管理器的时候却不能正常解锁。问题追踪器链接:MC-218112,由 Mojang 在 1.17 中修复。",
|
||||
"modernfix.option.mixin.bugfix.packet_leak": "§l实验性功能§r,默认禁用。尝试修复在 1.16 版本上长时间游玩后出现的内存泄漏问题。",
|
||||
"modernfix.option.mixin.bugfix.paper_chunk_patches": "仅 1.18+。§l一项关键优化§r。移植了 Paper 服务端的一个补丁,修复了 1.17 版本中区块加载需要大量内存和产生许多 §bCompletableFuture§r 实例的问题。1.18 以上版本现在能够像 1.16 版本那样仅用 400MB 的内存加载世界。",
|
||||
"modernfix.option.mixin.bugfix.tf_cme_on_load": "给暮色森林模组打了补丁,对于非线程安全的客户端启动,执行时,不再使用 FML 工作线程,转用它本该用的主线程。",
|
||||
"modernfix.option.mixin.feature.branding": "将现代化修复相关信息添加到标题界面和 F3 屏幕中。",
|
||||
"modernfix.option.mixin.perf.sync_executor_sleep": "全版本共有。主线程在等待模组加载工作线程结束时,不再占着一个CPU核心在那空转。",
|
||||
"modernfix.option.mixin.perf.thread_priorities": "全版本共有。调整工作线程和服务端线程的优先级,使其低于客户端线程。这有助于使CPU核心较少的电脑FPS更稳定,只要其使用的Java实现能尊重优先级。",
|
||||
"modernfix.option.mixin.perf.use_integrated_resources": "主要针对1.16版本。为JER(Just Enough Resources)打补丁,使其在单人游戏中直接使用内置服务端的战利品表数据,而不是无意义地重载战利品表。可以减少几秒钟的JEI启动时间。",
|
||||
"modernfix.option.mixin.bugfix.concurrency": "这组补丁修复了MC和/或Forge中的一些并发问题。其中大部分问题都会导致在加载过程中出现罕见的、难以诊断的崩溃。",
|
||||
"modernfix.option.mixin.bugfix.edge_chunk_not_saved": "此项是SuperCoder的区块保存修复(Chunk Saving Fix)模组的移植(因为我当时没发现它其实有Forge版本)。",
|
||||
"modernfix.option.mixin.bugfix.mc218112": "在处理实体数据时抛出异常可能导致死锁,此项修复了这个问题。原版在应该解锁数据管理器的时候却不能正常解锁。问题追踪器链接:MC-218112,由Mojang在1.17中修复。",
|
||||
"modernfix.option.mixin.bugfix.packet_leak": "§l实验性功能§r,默认禁用。尝试修复在1.16版本上长时间游玩后出现的内存泄漏问题。",
|
||||
"modernfix.option.mixin.bugfix.paper_chunk_patches": "仅1.18+。§l一项关键优化§r。移植了Paper服务端的一个补丁,修复了1.17版本中区块加载需要大量内存和产生许多§bCompletableFuture§r实例的问题。1.18以上版本现在能够像1.16版本那样仅用400MB的内存加载世界。",
|
||||
"modernfix.option.mixin.bugfix.tf_cme_on_load": "给暮色森林模组打了补丁,对于非线程安全的客户端启动,执行时,不再使用FML工作线程,转用它本该用的主线程。",
|
||||
"modernfix.option.mixin.feature.branding": "将现代化修复相关信息添加到标题界面和F3屏幕中。",
|
||||
"modernfix.option.mixin.feature.direct_stack_trace": "通常关闭,启用后,在发生崩溃时,它会将原始堆栈踪迹强制转储到日志里。因为原版的崩溃报告系统偶尔不能正常工作,只能给出一个完全不相关的堆栈跟踪/报告。",
|
||||
"modernfix.option.mixin.feature.measure_time": "借助几个注入来测量世界加载时间、数据包重载时间、资源重载时间、启动时间,并添加必要的挂钩,以启用原版未使用的分析器逻辑,该逻辑用于分析资源重载过程。",
|
||||
"modernfix.option.mixin.feature.spam_thread_dump": "§l仅用于调试目的。§r使线程转储每 60 秒向日志输出一次数据。这可以帮助诊断加载/游戏过程中无法解释的冻结现象。"
|
||||
"modernfix.option.mixin.feature.spam_thread_dump": "§l仅用于调试目的。§r使线程转储每60秒向日志输出一次数据。这可以帮助诊断加载/游戏过程中无法解释的冻结现象。",
|
||||
"modernfix.option.mixin.bugfix.chunk_deadlock": "尝试预防区块系统死锁,或者,仍然发生死锁时,在日志中提供额外的调试信息。这些死锁通常表现为服务端无限期冻结(其表现例如实体不移动),而客户端继续正常工作。",
|
||||
"modernfix.option.mixin.bugfix.chunk_deadlock.valhesia": "为Valhesia Structures模组打补丁,修复其代码的问题,具体表现:频繁产生世界生成/区块加载死锁。",
|
||||
"modernfix.option.mixin.bugfix.cofh_core_crash": "修复了CoFH核心(CoFH Core)模组的一个多线程问题,具体表现:启动游戏时偶尔崩溃。",
|
||||
"modernfix.option.mixin.bugfix.ctm_resourceutil_cme": "修复了连接纹理(ConnectedTexturesMod)模组的一个多线程问题,具体表现:启动游戏时偶尔崩溃。",
|
||||
"modernfix.option.mixin.bugfix.ender_dragon_leak": "修复了一处原版内存泄漏,它由末影龙保留对先前客户端世界的引用而产生。",
|
||||
"modernfix.option.mixin.bugfix.entity_load_deadlock": "针对§b实体加入世界事件(EntityJoinWorldEvent/EntityJoinLevelEvent)§r,稍微推迟了实体加载,修复了许多会产生世界生成死锁的问题。不过,这应该不会在游戏中引起任何明显的行为变化。",
|
||||
"modernfix.option.mixin.bugfix.fix_config_crashes": "修复了Forge配置在启动游戏时偶尔损坏的问题。",
|
||||
"modernfix.option.mixin.bugfix.item_cache_flag": "修复了MC-258939(非原子缓存状态可能产生多线程崩溃)",
|
||||
"modernfix.option.mixin.bugfix.preserve_early_window_pos": "在控制权被从Forge的早期加载移交给Minecraft代码时,使游戏窗口保留其现有大小。修复了窗口被拖动后还会传送回屏幕中央等问题。",
|
||||
"modernfix.option.mixin.bugfix.refinedstorage.te_bug": "如果安装了精致存储模组,会修复它的一些问题,比如,外部存储总线偶尔无法显示抽屉内容。这是精致存储PR #3435的向后移植,仅适用于1.18及更高版本。",
|
||||
"modernfix.option.mixin.bugfix.remove_block_chunkloading": "修复了Forge上僵尸猪人使(0, 0)区块永久加载的问题。这是Forge PR #8583的向后移植。",
|
||||
"modernfix.option.mixin.bugfix.starlight_emptiness": "修复了星光偶尔崩溃的问题,崩溃元凶是空地图未初始化。这是星光(Starlight)1.18.x中相同修复的向后移植。",
|
||||
"modernfix.option.mixin.core": "现代化修复正常运作所需的核心补丁",
|
||||
"modernfix.option.mixin.devenv": "在开发环境中运行时,用于提高速度和/或测试目的的补丁",
|
||||
"modernfix.option.mixin.safety": "并发补丁,用于预防启动时崩溃",
|
||||
"modernfix.option.mixin.feature.integrated_server_watchdog": "将原版看门狗添加到单人游戏世界中,但只是打印出堆栈跟踪,而不会强制终止世界。此版本包括全栈看门狗的功能,但多人游戏仍然需要后者。",
|
||||
"modernfix.option.mixin.feature.snapshot_easter_egg": "在快照版本上运行时,添加复活节彩蛋功能(不影响任何原版视觉效果或行为)。",
|
||||
"modernfix.option.mixin.feature.spark_profile_launch": "如果安装了兼容版本的火花(Spark)模组,启用后将分析主菜单之前的完整启动序列。",
|
||||
"modernfix.option.mixin.feature.warn_missing_perf_mods": "一些性能模组被认为是必不可少且高度兼容的,如果没有安装这些模组,会在启动时显示警告",
|
||||
"modernfix.option.mixin.launch.class_search_cache": "将Forge的资源查找器(用于查找游戏和模组的代码)替换为明显更快的版本,从而加快启动速度",
|
||||
"modernfix.option.mixin.perf.clear_fabric_mapping_tables": "清除Fabric加载器中冗余或很少被模组使用的映射数据结构,来减少内存占用。出于兼容性原因,默认关闭。",
|
||||
"modernfix.option.mixin.perf.clear_mixin_classinfo": "在启动结束时强制加载所有mixin,然后清除mixin数据结构,使Mixin减少大半内存占用。出于兼容性原因,默认禁用。",
|
||||
"modernfix.option.mixin.perf.deduplicate_wall_shapes": "使大多数墙方块共享同一个形状对象,而不是每个墙方块都拥有属于自己的副本。当模组添加大量墙方块时,可以大大减少其带来的内存占用。",
|
||||
"modernfix.option.mixin.perf.dynamic_resources.ae2": "动态资源功能的兼容性补丁,用于应用能源2模组",
|
||||
"modernfix.option.mixin.perf.dynamic_resources.ctm": "动态资源功能的兼容性补丁,用于连接纹理(CTM)模组",
|
||||
"modernfix.option.mixin.perf.dynamic_resources.rs": "动态资源功能的兼容性补丁,用于精致存储模组",
|
||||
"modernfix.option.mixin.perf.dynamic_resources.supermartijncore": "动态资源功能的兼容性补丁,用于SuperMartijn642CoreLib模组",
|
||||
"modernfix.option.mixin.perf.dynamic_resources.diagonalfences": "动态资源功能的兼容性补丁,用于对角线栅栏(Diagonal Fences)模组",
|
||||
"modernfix.option.mixin.perf.faster_advancements": "重写进度检查逻辑,使其更快,且在大型整合包里不再会产生§b堆栈溢出错误(StackOverflowError)§r。这是Fabric进度调试功能的移植。",
|
||||
"modernfix.option.mixin.perf.patchouli_deduplicate_books": "针对帕秋莉手册模组,修复其书籍会存储许多带有NBT标签的空条目的问题,减少了内存占用。",
|
||||
"modernfix.option.mixin.perf.remove_spawn_chunks": "从游戏中完全删除出生点区块(spawn chunks)。它们彻底不再加载了,这点与Ksyxis不同。",
|
||||
"modernfix.option.mixin.perf.use_integrated_resources.jepb": "",
|
||||
"modernfix.option.mixin.perf.use_integrated_resources.jeresources": "",
|
||||
"modernfix.option.mixin.bugfix.blueprint_modif_memory_leak": "针对蓝图(Blueprint)模组,修复其§bObjectModificationManager§r泄漏原版资源的问题,减少了内存占用。尽管我已经贡献了修复代码(PR #195),但包含此修复代码的新版本尚未发布。",
|
||||
"modernfix.option.mixin.bugfix.removed_dimensions": "修复了删除维度模组后游戏无法加载世界的问题。这是Forge PR #8959的向后移植。",
|
||||
"modernfix.option.mixin.perf.compact_bit_storage": "某些传统服务器(例如Hypixel)会认为空区块包含方块,照常发送这些区块,从而浪费内存。此项修复了这个问题,显著减少了这些服务器上的内存占用。",
|
||||
"modernfix.option.mixin.perf.deduplicate_climate_parameters": "新的生物群系系统使用了气候参数(climate parameter)对象,对其进行去重,可以节省约2MB内存,但也在一定程度上减慢了数据包的重载速度。",
|
||||
"modernfix.option.mixin.perf.dynamic_entity_renderers": "实体模型在实体首次出现时构造,而不是在启动时构造。某些模组与此项不兼容,会导致§b实体渲染器(EntityRenderer)§r崩溃。",
|
||||
"modernfix.option.mixin.perf.twilightforest.structure_spawn_fix": "针对暮色森林模组,修复了其世界生成检查结构效率极低导致卡顿的问题",
|
||||
"modernfix.option.mixin.perf.fast_forge_dummies": "使用更快的代码路径,加快启动时Forge注册表的冻结速度",
|
||||
"modernfix.option.mixin.perf.tag_id_caching": "缓存位置对象,不再每次都重新创建它,这可以加快标签条目的使用速度",
|
||||
"modernfix.option.mixin.feature.disable_unihex_font": "删除Unicode字体,可以节省10MB内存,但会导致特殊字符不再渲染"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.google.common.cache.CacheBuilder;
|
|||
import com.google.common.cache.RemovalNotification;
|
||||
import com.google.common.collect.ForwardingMap;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.color.block.BlockColors;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.client.resources.model.*;
|
||||
|
|
@ -280,7 +281,7 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
|
|||
}
|
||||
@Redirect(method = "loadModel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/StateDefinition;getPossibleStates()Lcom/google/common/collect/ImmutableList;"))
|
||||
private ImmutableList<BlockState> loadOnlyRelevantBlockState(StateDefinition<Block, BlockState> stateDefinition, ResourceLocation location) {
|
||||
if(!(location instanceof ModelResourceLocation))
|
||||
if(!(location instanceof ModelResourceLocation) || Minecraft.getInstance().level == null)
|
||||
return stateDefinition.getPossibleStates();
|
||||
return ModelBakeryHelpers.getBlockStatesForMRL(stateDefinition, (ModelResourceLocation)location);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,15 +2,14 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.cofh_core_crash;
|
|||
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
||||
import org.embeddedt.modernfix.annotation.RequiresMod;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Pseudo;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.*;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Coerce;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* Fix getOrCreateFlag accessing the FLAGS map without synchronization by wrapping all calls to it
|
||||
|
|
@ -21,19 +20,36 @@ import java.util.function.Supplier;
|
|||
@RequiresMod("cofh_core")
|
||||
public class FlagManagerMixin {
|
||||
@Shadow @Final
|
||||
private static Object2ObjectOpenHashMap<String, Supplier<Boolean>> FLAGS;
|
||||
private static Object2ObjectOpenHashMap<String, ?> FLAGS;
|
||||
|
||||
@Shadow
|
||||
private Supplier<Boolean> getOrCreateFlag(String flag) {
|
||||
throw new AssertionError();
|
||||
@Unique
|
||||
private static final MethodHandle mfix$getOrCreateFlag;
|
||||
|
||||
static {
|
||||
// use this reflection dance to avoid depending on whether it's implemented via BooleanSupplier or Supplier<Boolean>
|
||||
try {
|
||||
Method m = MethodHandles.lookup().lookupClass().getDeclaredMethod("getOrCreateFlag", String.class);
|
||||
m.setAccessible(true);
|
||||
mfix$getOrCreateFlag = MethodHandles.lookup().unreflect(m);
|
||||
} catch(ReflectiveOperationException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Redirect(method = "*", at = @At(value = "INVOKE", target = "getOrCreateFlag"), require = 0)
|
||||
private Supplier<Boolean> getFlag(@Coerce Object flagHandler, String flag) {
|
||||
@Coerce
|
||||
private Object getFlag(@Coerce Object flagHandler, String flag) {
|
||||
if(flagHandler != this)
|
||||
throw new AssertionError("Redirect targeted bad getOrCreateFlag invocation");
|
||||
synchronized (FLAGS) {
|
||||
return this.getOrCreateFlag(flag);
|
||||
try {
|
||||
return mfix$getOrCreateFlag.invoke((Object)this, flag);
|
||||
} catch(Throwable e) {
|
||||
if(e instanceof RuntimeException)
|
||||
throw (RuntimeException)e;
|
||||
else
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.google.common.cache.Cache;
|
|||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.RemovalNotification;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.color.block.BlockColors;
|
||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
|
|
@ -256,7 +257,7 @@ public abstract class ModelBakeryMixin implements IExtendedModelBakery {
|
|||
}
|
||||
@Redirect(method = "loadModel", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/block/state/StateDefinition;getPossibleStates()Lcom/google/common/collect/ImmutableList;"))
|
||||
private ImmutableList<BlockState> loadOnlyRelevantBlockState(StateDefinition<Block, BlockState> stateDefinition, ResourceLocation location) {
|
||||
if(!(location instanceof ModelResourceLocation))
|
||||
if(!(location instanceof ModelResourceLocation) || Minecraft.getInstance().level == null)
|
||||
return stateDefinition.getPossibleStates();
|
||||
return ModelBakeryHelpers.getBlockStatesForMRL(stateDefinition, (ModelResourceLocation)location);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user