概述
为 Forge+Bukkit 混合环境提供一系列优化、修复和实用功能。
功能
通用
修复 Forge JarDiscoverer 无法正确处理 Java 9 以上版本引入的 Multi-release Jar 和 module-info.class 的问题;
使用 Mixin 替换 夸克(Quark)中不稳定的实体 ASM 修改;
修复原版 Authlib 在查询 Forge 虚拟玩家信息(包含不合法字符的都会触发)时内部 NPE 崩溃的问题;
修复 天境(The Aether)1.5.3.3 版本以后史维特(Swet)AI 失效的问题;
为 天境(The Aether)反向移植高版本中 史维特(Swet)缓慢溶解的机制;
使用增量更新替代原版 PlayerChunkMap 中的 O(N2) 遍历,降低跑图时的重复计算开销;
可自定义将指定方法替换为无操作,用于移除主线程网络 IO 请求等。
客户端
替换 工业时代2(Industrial Craft 2)音频管理器中耗时的反射为直接调用;
在 体素地图(VoxelMap)的地图上绘制附近的领地(服务端需开启发送领地数据)。
服务端
修复 意志坚定(Tough As Nails)和 坚定意志(Simple Difficulty)以及其他同类模组在玩家重生后口渴值不重置的问题;
修复 交错次元(The Betweenlands)中玩家死亡后的戒指复制问题;
修复 暮色森林(The Twilight Forest)中湮灭立方、链锤等其他实体无视受保护区域破坏方块的问题;
修复 神秘时代 6 中腐化可以在受保护区域蔓延的问题;
修复 神秘时代 6 中咒波裂隙无视保护破坏地形的问题;
修复 更多附魔 中缴械附魔无视区域保护强制掉落物品的问题;
修复 植物魔法(Botania)中手掌花可放置被禁用方块的问题;
修复 工业时代2(Industrial Craft 2)中采矿机无视保护破坏方块的问题;
修复 工业时代2(Industrial Craft 2)中爆炸物无视保护破坏地形的问题;
移除 工业先锋(Industrial Foregoing)中黑洞存储控制器(弃用)的合成表;
修复 科技复兴(Tech Reborn)中核弹无视保护破坏地形的问题;
为 应用能源2 (AE2)中的空间塔提供 API,让 Bukkit 插件轻松与其交互;
修复 科技枪(Tech Guns)中爆炸无视保护破坏地形的问题;
修复 稀有精英怪(AtomicStryker's Infernal Mobs)中精英怪可以在受保护区域放置蜘蛛网的问题;
修复 史诗攻城(Epic Siege)中怪物 AI 会在领地内挖掘/放置方块,以及蜘蛛受攻击后在领地内结网的问题;
修复 巫术:新生 中大量魔咒(飞来咒、牵引咒、除你武器等)可以绕过保护生效的问题;
自动修改 实用拓展(Actually Additions)的配置文件来适应服务端环境;
强制禁用 实用拓展(Actually Additions)中潜在影响平衡性的彩蛋;
阻止 通用机械(Mekanism)的数字型采矿机挖掘方块实体;
修复 REID(Roughly Enough IDs)对 Bukkit API 的支持;
在 LoliASM 安装时自动对插件侧的堆栈跟踪进行反混淆;
将 Forge 的爆炸事件传递至 Bukkit(例:将会修复 EFLN(匠魂 2)爆炸无法被 Bukkit 保护插件取消的问题);
覆盖 Mohist 糟糕的爆炸处理;
增强对插件对模组虚拟玩家的兼容性;
无监听器注册情况下跳过事件;
强制禁用 Timings v1 来减少不必要的性能消耗;
将 Forge 权限交由 Bukkit 插件进行处理;
模组内置 Bukkit 插件进行功能增强;
跨类加载器访问支持,允许 Forge 模组运行时跨越类加载器访问 Bukkit 插件(详见 GitHub);
反向移植来自高版本的 Bukkit API;
内置插件 ASM 修复补丁,运行时修复插件兼容性;
Bukkit 插件 Mixin 支持,允许使用 Forge 模组编写 Mixin 注入 Bukkit 插件;
扩展 Forge 的错误恢复系统(removeErroringEntities 和 removeErroringTileEntities),发生错误时发送管理员或进行全服通告,新增保护 tickPlayer 过程,出错时踢出对应玩家而不是直接崩溃;
修复部分 Forge 遗留 bug(服务器启动时客户端 ping 列表显示“服务端版本已过期”,修复后支持在启动期间自定义加载MOTD);
为服务端注入中文本地化文件,支持加载模组内提供的本地化语言文件。
配置文件位于 ${服务端根目录}/config/hybridfix.cfg。
命令
/hybridfix dumpitem - 显示手持物品的详细信息并输出对应的 /give 命令;
/hybridfix dumpentity - 显示准星瞄准实体的详细信息;
/hybridfix dumpblock [far] [ignoreliquid] - 显示准星瞄准方块的详细信息;
/hybridfix eraseentity - 强力移除指向的实体;
/hybridfix version - 显示模组版本信息;
/mods - 类似 /plugins,展示当前加载的所有模组。
权限
hybridfix.command.use - 访问 hybridfix 下的命令;
hybridfix.command.eraseentity.use - 访问 /hybridfix eraseentity
hybridfix.command.mods.use - 访问 /mods。
内置插件扩展
得益于内置了 Bukkit 插件,HybridFix 可以在运行时从 Forge 侧对插件进行修复。
当前修补的插件:
Residence
Citizens
WorldGuard
运行时插件 ASM 补丁
HybridFix 使用 ASM 在运行时动态注入插件类来修复一些插件的兼容性
修复的插件:
Residence:使其 6.0.0.0 以上版本可以在 1.12.2 运行。
通用:由于高版本 Bukkit API 的变动,InventoryView 从原来的抽象类变成了接口,这导致一些理论支持 1.12.2 的插件不再兼容。HybridFix 在运行时将对 InventoryView 的 INVOKEINTERFACE 指令替换为 INVOKEVIRTUAL 来避免 IncompatibleClassChangeError。
注意:命令与权限均在 Bukkit 侧注册,这意味着可以直接使用权限管理插件配置权限。
注意
此模组只会在混合端(Forge+Bukkit)环境中运行,安装在 Forge 服务端无任何效果,部分修复可选装客户端来同步服务端变化。



