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(); }