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.NetworkRegistry;
|
||||||
import net.minecraftforge.network.simple.SimpleChannel;
|
import net.minecraftforge.network.simple.SimpleChannel;
|
||||||
|
|
||||||
public class ModNetwork {
|
public final class ModNetwork {
|
||||||
private static final String PROTOCOL_VERSION = "1";
|
private static final String PROTOCOL_VERSION = "1";
|
||||||
public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder
|
public static final SimpleChannel CHANNEL = NetworkRegistry.ChannelBuilder
|
||||||
.named(new ResourceLocation(ExtendedAEPlus.MODID, "main"))
|
.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) {
|
public UpgradeCards(final FMLCommonSetupEvent event) {
|
||||||
event.enqueueWork(() -> {
|
event.enqueueWork(() -> {
|
||||||
// 现有:把 Entity Ticker 的部件注册为处理 SPEED/ENERGY 卡的宿主
|
// 现有:把 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 org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.StreamSupport;
|
|
||||||
|
|
||||||
import static com.extendedae_plus.util.Logger.EAP$LOGGER;
|
import static com.extendedae_plus.util.Logger.EAP$LOGGER;
|
||||||
|
|
||||||
|
|
@ -69,21 +68,10 @@ public abstract class CraftingTreeProcessMixin {
|
||||||
perProvider = requested;
|
perProvider = requested;
|
||||||
if (perProvider <= 0) perProvider = 1L;
|
if (perProvider <= 0) perProvider = 1L;
|
||||||
} else {
|
} else {
|
||||||
CraftingService craftingService = (CraftingService) cc;
|
// 计算 provider 数量
|
||||||
Iterable<ICraftingProvider> providers = craftingService.getProviders(original);
|
Iterable<ICraftingProvider> providerIterable = ((CraftingService) cc).getProviders(original);
|
||||||
|
List<ICraftingProvider> providerList = ((CraftingProviderListAccessor) providerIterable).getProviders();
|
||||||
// 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器
|
int size = providerList == null ? 0 : providerList.size();
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 将 requested 在 providers 间均分,向上取整保证每个 provider 分配整数且总量不少于 requested
|
// 将 requested 在 providers 间均分,向上取整保证每个 provider 分配整数且总量不少于 requested
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
|
|
@ -97,7 +85,6 @@ public abstract class CraftingTreeProcessMixin {
|
||||||
return scaled != null ? scaled : original;
|
return scaled != null ? scaled : original;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
EAP$LOGGER.warn("构建倍增样板出错", e);
|
EAP$LOGGER.warn("构建倍增样板出错", e);
|
||||||
e.printStackTrace();
|
|
||||||
return original;
|
return original;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@
|
||||||
"ae2.accessor.PatternEncodingTermMenuAccessor",
|
"ae2.accessor.PatternEncodingTermMenuAccessor",
|
||||||
"ae2.accessor.PatternProviderLogicAccessor",
|
"ae2.accessor.PatternProviderLogicAccessor",
|
||||||
"ae2.accessor.PatternProviderMenuAccessor",
|
"ae2.accessor.PatternProviderMenuAccessor",
|
||||||
|
"ae2.autopattern.CraftingProviderListAccessor",
|
||||||
"ae2.autopattern.CraftingServiceGetProvidersMixin",
|
"ae2.autopattern.CraftingServiceGetProvidersMixin",
|
||||||
"ae2.autopattern.CraftingTreeNodeAccessor",
|
"ae2.autopattern.CraftingTreeNodeAccessor",
|
||||||
"ae2.autopattern.CraftingTreeNodeMixin",
|
"ae2.autopattern.CraftingTreeNodeMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user