回滚样板供应器轮询
This commit is contained in:
parent
396328d33f
commit
289cf5b3e2
|
|
@ -66,15 +66,16 @@ public abstract class CraftingTreeProcessMixin {
|
||||||
CraftingService craftingService = (CraftingService) cc;
|
CraftingService craftingService = (CraftingService) cc;
|
||||||
Iterable<ICraftingProvider> providers = craftingService.getProviders(original);
|
Iterable<ICraftingProvider> providers = craftingService.getProviders(original);
|
||||||
|
|
||||||
// 计算 provider 数量;避免直接反射目标类字段,优先使用 mixin Accessor 暴露的列表
|
// 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器
|
||||||
int size;
|
int size;
|
||||||
try {
|
try {
|
||||||
// 使用 NetworkCraftingProvidersAccessor(通过 Mixin 生成)来获取内部列表
|
var cls = providers.getClass();
|
||||||
var acc = (NetworkCraftingProvidersAccessor) providers;
|
var f = cls.getDeclaredField("providers"); // private ArrayList<ICraftingProvider>
|
||||||
var list = acc.eap$getProvidersList();
|
f.setAccessible(true);
|
||||||
|
List<?> list = (List<?>) f.get(providers);
|
||||||
size = list == null ? 0 : list.size();
|
size = list == null ? 0 : list.size();
|
||||||
} catch (ClassCastException ccx) {
|
} catch (Exception ex) {
|
||||||
// 访问器不可用:回退为遍历计数(会消费迭代器)
|
// 反射失败回退为遍历计数(会消费迭代器)
|
||||||
size = (int) StreamSupport.stream(providers.spliterator(), false).count();
|
size = (int) StreamSupport.stream(providers.spliterator(), false).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user