feat: 倍增优化
This commit is contained in:
parent
f74d611962
commit
9cc0fbc31e
|
|
@ -12,7 +12,7 @@ import net.minecraftforge.network.NetworkDirection;
|
|||
import net.minecraftforge.network.NetworkRegistry;
|
||||
import net.minecraftforge.network.simple.SimpleChannel;
|
||||
|
||||
public class ModNetwork {
|
||||
public final class ModNetwork {
|
||||
private static final String PROTOCOL_VERSION = "1";
|
||||
public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder
|
||||
.named(new ResourceLocation(ExtendedAEPlus.MODID, "main"))
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import static com.glodblock.github.extendedae.common.EPPItemAndBlock.*;
|
|||
/**
|
||||
*
|
||||
*/
|
||||
public class UpgradeCards {
|
||||
public final class UpgradeCards {
|
||||
public UpgradeCards(final FMLCommonSetupEvent event) {
|
||||
event.enqueueWork(() -> {
|
||||
// 现有:把 Entity Ticker 的部件注册为处理 SPEED/ENERGY 卡的宿主
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package com.extendedae_plus.mixin.ae2.autopattern;
|
||||
|
||||
import appeng.api.networking.crafting.ICraftingProvider;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(targets = "appeng.me.service.helpers.NetworkCraftingProviders$CraftingProviderList")
|
||||
public interface CraftingProviderListAccessor {
|
||||
@Accessor(value = "providers",remap = false)
|
||||
List<ICraftingProvider> getProviders();
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import static com.extendedae_plus.util.Logger.EAP$LOGGER;
|
||||
|
||||
|
|
@ -69,21 +68,10 @@ public abstract class CraftingTreeProcessMixin {
|
|||
perProvider = requested;
|
||||
if (perProvider <= 0) perProvider = 1L;
|
||||
} else {
|
||||
CraftingService craftingService = (CraftingService) cc;
|
||||
Iterable<ICraftingProvider> providers = craftingService.getProviders(original);
|
||||
|
||||
// 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器
|
||||
int size;
|
||||
try {
|
||||
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 (Exception ex) {
|
||||
// 反射失败回退为遍历计数(会消费迭代器)
|
||||
size = (int) StreamSupport.stream(providers.spliterator(), false).count();
|
||||
}
|
||||
// 计算 provider 数量
|
||||
Iterable<ICraftingProvider> providerIterable = ((CraftingService) cc).getProviders(original);
|
||||
List<ICraftingProvider> providerList = ((CraftingProviderListAccessor) providerIterable).getProviders();
|
||||
int size = providerList == null ? 0 : providerList.size();
|
||||
|
||||
// 将 requested 在 providers 间均分,向上取整保证每个 provider 分配整数且总量不少于 requested
|
||||
if (size > 0) {
|
||||
|
|
@ -97,7 +85,6 @@ public abstract class CraftingTreeProcessMixin {
|
|||
return scaled != null ? scaled : original;
|
||||
} catch (Exception e) {
|
||||
EAP$LOGGER.warn("构建倍增样板出错", e);
|
||||
e.printStackTrace();
|
||||
return original;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
"ae2.accessor.PatternEncodingTermMenuAccessor",
|
||||
"ae2.accessor.PatternProviderLogicAccessor",
|
||||
"ae2.accessor.PatternProviderMenuAccessor",
|
||||
"ae2.autopattern.CraftingProviderListAccessor",
|
||||
"ae2.autopattern.CraftingServiceGetProvidersMixin",
|
||||
"ae2.autopattern.CraftingTreeNodeAccessor",
|
||||
"ae2.autopattern.CraftingTreeNodeMixin",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user