From 9cc0fbc31e3b30ab3707cc72f278c71fa4ce610b Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Wed, 22 Oct 2025 12:59:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=80=8D=E5=A2=9E=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/extendedae_plus/init/ModNetwork.java | 2 +- .../extendedae_plus/init/UpgradeCards.java | 2 +- .../CraftingProviderListAccessor.java | 13 ++++++++++++ .../autopattern/CraftingTreeProcessMixin.java | 21 ++++--------------- .../resources/extendedae_plus.mixins.json | 1 + 5 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingProviderListAccessor.java diff --git a/src/main/java/com/extendedae_plus/init/ModNetwork.java b/src/main/java/com/extendedae_plus/init/ModNetwork.java index 3480871..2fa6456 100644 --- a/src/main/java/com/extendedae_plus/init/ModNetwork.java +++ b/src/main/java/com/extendedae_plus/init/ModNetwork.java @@ -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")) diff --git a/src/main/java/com/extendedae_plus/init/UpgradeCards.java b/src/main/java/com/extendedae_plus/init/UpgradeCards.java index 747cecb..e6df658 100644 --- a/src/main/java/com/extendedae_plus/init/UpgradeCards.java +++ b/src/main/java/com/extendedae_plus/init/UpgradeCards.java @@ -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 卡的宿主 diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingProviderListAccessor.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingProviderListAccessor.java new file mode 100644 index 0000000..21239d0 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingProviderListAccessor.java @@ -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 getProviders(); +} diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java index 605caae..aa866ab 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java @@ -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 providers = craftingService.getProviders(original); - - // 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器 - int size; - try { - var cls = providers.getClass(); - var f = cls.getDeclaredField("providers"); // private ArrayList - 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 providerIterable = ((CraftingService) cc).getProviders(original); + List 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; } } diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 0c79801..de44f4e 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -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",