From 289cf5b3e2057044b7270bc6226d9db2ed116842 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sat, 30 Aug 2025 23:10:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E6=A0=B7=E6=9D=BF=E4=BE=9B?= =?UTF-8?q?=E5=BA=94=E5=99=A8=E8=BD=AE=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae2/autopattern/CraftingTreeProcessMixin.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java index ea52af5..68e510e 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java @@ -66,15 +66,16 @@ public abstract class CraftingTreeProcessMixin { CraftingService craftingService = (CraftingService) cc; Iterable providers = craftingService.getProviders(original); - // 计算 provider 数量;避免直接反射目标类字段,优先使用 mixin Accessor 暴露的列表 + // 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器 int size; try { - // 使用 NetworkCraftingProvidersAccessor(通过 Mixin 生成)来获取内部列表 - var acc = (NetworkCraftingProvidersAccessor) providers; - var list = acc.eap$getProvidersList(); + var cls = providers.getClass(); + var f = cls.getDeclaredField("providers"); // private ArrayList + f.setAccessible(true); + List list = (List) f.get(providers); size = list == null ? 0 : list.size(); - } catch (ClassCastException ccx) { - // 访问器不可用:回退为遍历计数(会消费迭代器) + } catch (Exception ex) { + // 反射失败回退为遍历计数(会消费迭代器) size = (int) StreamSupport.stream(providers.spliterator(), false).count(); }