回滚样板供应器轮询
This commit is contained in:
parent
396328d33f
commit
289cf5b3e2
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user