AE2 VM:旧版

AE2 VM:旧版

基于堆栈的虚拟机合成计算器,适用于1.12.2版本的AE2 Extended Life —— 针对指数级递归请求的毫秒级响应

技术

AE2 VM: Legacy 是 Tao 的 AE2-VM 的非官方分支,原本面向现代 Minecraft(NeoForge 1.21.1),现已移植到 Minecraft 1.12.2,可运行于 Cleanroom 或 Forge + MixinBooter 之上,并基于 AE2 Unofficial Extended Life 运行。原始架构的全部功劳归 Tao 所有;详见下方致谢。

功能简介

AE2 VM 用预编译的样板字节码 + 基于栈的虚拟机 + JIT 打包缓存取代了 Applied Energistics 2 的递归合成树遍历。那些会让原版规划器卡上数分钟的合成请求——深度嵌套、指数级递归的样板——现在可以在毫秒级完成规划(上游基准:约 90 秒 → 约 38 毫秒,约 2,400 倍)。栈溢出在结构上就不可能发生:整条流水线中不存在任何递归。

为何既快又正确

  • O(样板 + 边) 的需求传播 —— 在样板图上进行传播,而非逐节点展开;JIT 打包将每个样板捕获一次,并以 O(1) 缩放重放
  • 全程使用 BigInteger 运算 —— 10^9 级别的链条、数量为 1 的边界情况,均无溢出
  • 库存感知规划 —— 优先消耗网络库存,缺口才进行合成;催化剂反馈循环、耐久工具与转换环均获得精确语义
  • 放大合成环 —— 每轮净增长的循环配方(一种自供给循环,其产出大于投入)会被检测出来,通过代数方法求解出材料最少数量,并折叠进单一规划中;副产物中间体、外部输入、以副产物为根的订单以及耦合环链均已覆盖,启动所需流动资金也会被精确报告
  • 多样板分配求解器 —— 当某个产物有多个样板时,混合拆分(5 次合成 = 4×A + 1×B)会通过代数方法求解,并编码为虚拟样板;这修复了上游遗留的唯一误报(自 v1.9.6 起存在)
  • 处处设防 —— 死循环预剪枝、防过期样板的 JIT 缓存键、对实时库存重新校验的规划记忆化,以及针对环求解器的材料闭包采纳门槛:求解器只可能被拒绝,绝不会让规划变差
  • 兼容性 —— 支持 AE2FC 流体样板、AE2CT 显示树、第三方缩放样板包装器,当虚拟机无法处理某个请求时会自动回退到原版规划树

性能

全部 39 个参考套件场景 × 3 种库存模式均受支持(SUPPORTED),零不稳定性,外加 37/37 项边界检查;深度链微基准在 10^9 规模下规划 Fibonacci-32 链条约需 0.6 毫秒(热态中位数)。每次发布后,最新的基准测试结果都会自动发布到 wiki。

快速上手

  1. 安装 Minecraft 1.12.2,搭配 Cleanroom 加载器(推荐),或 Forge + MixinBooter
  2. 安装 AE2 Unofficial Extended Life(本模组与所有 1.12.2 版本的 AE2UEL 均兼容)
  3. 将本模组的 jar 放入 mods/ 目录——完成。

虚拟机会自动接管合成计算,无需任何设置或配置。照常编码 AE2 样板,在终端发起合成请求,虚拟机便会透明地加速计算。若要恢复原版规划,请在 config/ae2_vm_112-common.toml 中将 proxyEnabled=false。

支持的配方:任意深度的合成样板(分子装配机)与处理样板,包括 AE2 附加包中常见的超大型配方。计算在后台线程运行——不会造成服务端主线程卡顿。

关于 Forge 路线:本模组不使用任何 Cleanroom 专属 API,且发布的是 Java 8 字节码,因此预期开箱即用。此路线未纳入我们的自动化测试——欢迎反馈。

需求

 
需求 版本
Minecraft 1.12.2
加载器 Cleanroom(推荐)或 Forge + MixinBooter
Applied Energistics 2 AE2 Unofficial Extended Life(任意 1.12.2 版本)
 

链接

致谢与许可

本模组是 Tao 的 AE2-VM 的分支——合成虚拟机架构、指令语义与测试基线均源自该项目(LGPL-3.0)。同时感谢 NNYYOONNIIOO 及贡献者(AE2-Quick-Calculation,集成外壳参考),Circulate233(RandomComplement,构建系统参考),moakiee(TB-ThirdParty,仅用于测试的参考规划器),Applied Energistics 2 的 AlgorithmX2 等人,以及 1.12 平台的 AE2UEL 团队。

本移植版与上游相同,以 LGPL-3.0 许可发布。