回滚样板供应器轮询

This commit is contained in:
C-H716 2025-08-30 23:10:36 +08:00
parent 396328d33f
commit 289cf5b3e2

View File

@ -66,15 +66,16 @@ public abstract class CraftingTreeProcessMixin {
CraftingService craftingService = (CraftingService) cc;
Iterable<ICraftingProvider> 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<ICraftingProvider>
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();
}