适用于 MCSR:使用 mods.tildejustin.dev
如果你正在为常规 Fabric(而非 Ornithe)寻找适用于 1.14 至 1.15.2 的 OptiFabric,请查看 OptiFabric Origins
旧版 OptiFabric
适用于 Legacy Fabric (1.3.1-1.13.2) 和 Ornithe (b1.7.3-1.14.4) 的 OptiFabric
- Legacy Fabric 安装程序及官方 MultiMC 实例:https://legacyfabric.net/downloads.html
- Ornithe 安装程序(可生成 MultiMC 实例):https://ornithemc.net
- 适用于 Ornithe 和 Legacy Fabric 的合法速通 MultiMC 实例(原版 LWJGL,无额外库或模组):Minecraft-Java-Edition-Speedrunning/legacy-fabric-instance-generator/releases
基于 RedLime 的 OptiFabric-Pre1.14 的工作,该版本是 hYdos 的 OptiFabric 1.8.9 的分支,而后者又是 modmuss 的原始 OptiFabric 的衍生版本。
安装
此模组需要在模组文件夹中放置一个 OptiFine jar 文件,与 OptiFabric 一同使用。对于 1.7.2 及更高版本,可从 OptiFine 官方网站 获取;对于更早的版本,可从 SpeedyCube64 的 Pre-1.9 Optifine 存档 或 OptiFine 历史记录帖 中获取。
工作原理
此模组使用 Minecraft-Java-Edition-Speedrunning/fabric-asm,这是 Cat Core 的 Fabric-ASM/no-guava 的一个小衍生版本,而后者本身是 Chocohead 的 fabric-asm 的更新版本。fabric-asm 允许更极端的 ASM 修改,且使用的分支不依赖 guava 或 apache commons,这些库在旧版 Minecraft 中未提供。
步骤
- 模组在当前模组文件夹中查找 OptiFine 安装程序或模组 jar 或 zip 文件。
- 如果找到安装程序 jar,它会在自己的临时类加载器中运行提取任务。
- OptiFine 模组 jar 是一组需要替换 Minecraft 提供的类的类。
- OptiFine 的替换类更改了一些 lambda 方法的名称,因此它会根据原始 Minecraft jar 猜测旧名称。
- 将 OptiFine 重映射为 intermediary。
- 将修补后的类移出,因为它们在类路径上重复存在没有太大意义。
- 将 OptiFine 添加到类路径。
- 为每个需要替换的类注册修补 tweaker。
- 用提取的类替换目标类,同时进行更多修复,并将其设为 public(由于访问问题)。
- 希望它能正常工作。
注意事项
- 此模组在开发或命名环境中无法正常工作。在 Legacy Fabric 的情况下,某些版本的 yarn 构建已损坏,因此目前无法工作;feather 更好,但仍存在问题。
- accessWideners 是基于 tiny remapper 的 checkPackageAccess 选项的输出创建的,但它们不太可能 100% 完整。如果你遇到与无效访问相关的崩溃,请报告,可能可以修复。
类排除器
这是一个偶尔有用的隐藏功能,用于在重映射 jar 时移除文件。为此,它会读取 .minecraft/config/ 中的 optifabric-excluded-classes.json 文件(如果存在),并期望该文件包含版本(字段名)到可移除类(或纹理等任何内容,它只是一个文件名)数组的映射。
下面提供了一个示例文件内容,用于恢复 1.3.2 光照中移除的性能分析器。如果你尝试为其创建排除器条目的 OptiFine 版本已在你的实例中加载过,请删除 .minecraft 中 .optifine 文件夹内的对应文件夹以强制重新缓存。
{
"OptiFine_1.3.2_L_B2": [
"ik.class"
]
}