From 396328d33fbc582c9a6d1499d09c7cec64e18681 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sat, 30 Aug 2025 22:01:47 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../CraftingServiceGetProvidersMixin.java | 2 +- .../autopattern/CraftingTreeNodeAccessor.java | 2 +- .../autopattern/CraftingTreeNodeMixin.java | 2 +- .../autopattern/CraftingTreeProcessMixin.java | 17 +++--- ...ernProviderLogicContainsRedirectMixin.java | 2 +- .../{ => client/gui}/AEBaseScreenMixin.java | 10 ++-- .../gui}/PatternEncodingTermScreenMixin.java | 2 +- .../gui}/PatternProviderScreenMixin.java | 2 +- .../{ => client/gui}/SlotGridLayoutMixin.java | 3 +- .../PatternProviderLogicAdvancedMixin.java | 2 +- .../PatternProviderLogicDoublingMixin.java | 10 ++-- ...ContainerPatternEncodingTermMenuMixin.java | 2 +- .../ae2/{ => menu}/MEStorageMenuMixin.java | 2 +- .../PatternEncodingTermMenuMixin.java | 2 +- .../PatternProviderMenuAdvancedMixin.java | 2 +- .../PatternProviderMenuDoublingMixin.java | 2 +- .../{ => client}/HighlightButtonMixin.java | 2 +- .../gui}/GuiExPatternProviderMixin.java | 9 +-- .../gui}/GuiExPatternTerminalMixin.java | 20 +++---- .../PartExPatternProviderMixin.java | 2 +- .../TileExPatternProviderMixin.java | 2 +- .../ContainerExPatternProviderMixin.java | 2 +- .../ContainerExPatternTerminalMixin.java | 15 +++-- ...ntainerWirelessExPatternTerminalMixin.java | 2 +- .../EncodePatternTransferHandlerMixin.java | 2 +- .../{ae2 => jei}/EncodingHelperMixin.java | 2 +- .../resources/extendedae_plus.mixins.json | 56 +++++++++---------- 28 files changed, 87 insertions(+), 93 deletions(-) rename src/main/java/com/extendedae_plus/mixin/{ => ae2}/autopattern/CraftingServiceGetProvidersMixin.java (95%) rename src/main/java/com/extendedae_plus/mixin/{ => ae2}/autopattern/CraftingTreeNodeAccessor.java (85%) rename src/main/java/com/extendedae_plus/mixin/{ => ae2}/autopattern/CraftingTreeNodeMixin.java (96%) rename src/main/java/com/extendedae_plus/mixin/{ => ae2}/autopattern/CraftingTreeProcessMixin.java (88%) rename src/main/java/com/extendedae_plus/mixin/{ => ae2}/autopattern/PatternProviderLogicContainsRedirectMixin.java (96%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => client/gui}/AEBaseScreenMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => client/gui}/PatternEncodingTermScreenMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => client/gui}/PatternProviderScreenMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => client/gui}/SlotGridLayoutMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => helpers}/PatternProviderLogicAdvancedMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => helpers}/PatternProviderLogicDoublingMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => menu}/ContainerPatternEncodingTermMenuMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => menu}/MEStorageMenuMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => menu}/PatternEncodingTermMenuMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => menu}/PatternProviderMenuAdvancedMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/ae2/{ => menu}/PatternProviderMenuDoublingMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => client}/HighlightButtonMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => client/gui}/GuiExPatternProviderMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => client/gui}/GuiExPatternTerminalMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => common}/PartExPatternProviderMixin.java (94%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => common}/TileExPatternProviderMixin.java (94%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => container}/ContainerExPatternProviderMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => container}/ContainerExPatternTerminalMixin.java (99%) rename src/main/java/com/extendedae_plus/mixin/extendedae/{ => container}/ContainerWirelessExPatternTerminalMixin.java (97%) rename src/main/java/com/extendedae_plus/mixin/{ae2 => jei}/EncodePatternTransferHandlerMixin.java (98%) rename src/main/java/com/extendedae_plus/mixin/{ae2 => jei}/EncodingHelperMixin.java (97%) diff --git a/gradle.properties b/gradle.properties index f099302..231efe7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G loom.platform = forge # Mod properties -mod_version = 1.4.0 +mod_version = 1.4.1_beta maven_group = com.extendedae_plus archives_name = extendedae_plus diff --git a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingServiceGetProvidersMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingServiceGetProvidersMixin.java similarity index 95% rename from src/main/java/com/extendedae_plus/mixin/autopattern/CraftingServiceGetProvidersMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingServiceGetProvidersMixin.java index 5ae4d03..ccc4812 100644 --- a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingServiceGetProvidersMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingServiceGetProvidersMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.autopattern; +package com.extendedae_plus.mixin.ae2.autopattern; import appeng.api.crafting.IPatternDetails; import appeng.me.service.CraftingService; diff --git a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeAccessor.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeAccessor.java similarity index 85% rename from src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeAccessor.java rename to src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeAccessor.java index b6a274f..3f4794a 100644 --- a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeAccessor.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeAccessor.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.autopattern; +package com.extendedae_plus.mixin.ae2.autopattern; import appeng.api.stacks.AEKey; import appeng.crafting.CraftingTreeNode; diff --git a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeMixin.java similarity index 96% rename from src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeMixin.java index d792687..b2651d5 100644 --- a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeNodeMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeNodeMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.autopattern; +package com.extendedae_plus.mixin.ae2.autopattern; import appeng.api.stacks.KeyCounter; import appeng.crafting.CraftingTreeNode; diff --git a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeProcessMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java similarity index 88% rename from src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeProcessMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java index 9311e06..ea52af5 100644 --- a/src/main/java/com/extendedae_plus/mixin/autopattern/CraftingTreeProcessMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.autopattern; +package com.extendedae_plus.mixin.ae2.autopattern; import appeng.api.crafting.IPatternDetails; import appeng.api.networking.crafting.ICraftingProvider; @@ -10,9 +10,9 @@ import appeng.crafting.CraftingTreeProcess; import appeng.crafting.pattern.AEProcessingPattern; import appeng.me.service.CraftingService; import com.extendedae_plus.api.SmartDoublingAwarePattern; +import com.extendedae_plus.config.ModConfigs; import com.extendedae_plus.content.ScaledProcessingPattern; import com.extendedae_plus.util.PatternScaler; -import com.extendedae_plus.config.ModConfigs; import com.extendedae_plus.util.RequestedAmountHolder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -66,16 +66,15 @@ public abstract class CraftingTreeProcessMixin { CraftingService craftingService = (CraftingService) cc; Iterable providers = craftingService.getProviders(original); - // 计算 provider 数量;尝试用反射读取内部 providers 列表以避免消费迭代器 + // 计算 provider 数量;避免直接反射目标类字段,优先使用 mixin Accessor 暴露的列表 int size; try { - var cls = providers.getClass(); - var f = cls.getDeclaredField("providers"); // private ArrayList - f.setAccessible(true); - List list = (List) f.get(providers); + // 使用 NetworkCraftingProvidersAccessor(通过 Mixin 生成)来获取内部列表 + var acc = (NetworkCraftingProvidersAccessor) providers; + var list = acc.eap$getProvidersList(); size = list == null ? 0 : list.size(); - } catch (Exception ex) { - // 反射失败回退为遍历计数(会消费迭代器) + } catch (ClassCastException ccx) { + // 访问器不可用:回退为遍历计数(会消费迭代器) size = (int) StreamSupport.stream(providers.spliterator(), false).count(); } diff --git a/src/main/java/com/extendedae_plus/mixin/autopattern/PatternProviderLogicContainsRedirectMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java similarity index 96% rename from src/main/java/com/extendedae_plus/mixin/autopattern/PatternProviderLogicContainsRedirectMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java index bd1500f..3aa18e7 100644 --- a/src/main/java/com/extendedae_plus/mixin/autopattern/PatternProviderLogicContainsRedirectMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.autopattern; +package com.extendedae_plus.mixin.ae2.autopattern; import appeng.api.crafting.IPatternDetails; import appeng.helpers.patternprovider.PatternProviderLogic; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/AEBaseScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/ae2/AEBaseScreenMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java index 4194d24..880b6c0 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/AEBaseScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/AEBaseScreenMixin.java @@ -1,20 +1,20 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.client.gui; +import appeng.api.stacks.AEKey; import appeng.client.Point; import appeng.client.gui.AEBaseScreen; import appeng.client.gui.StackWithBounds; -import appeng.client.gui.me.crafting.CraftingCPUScreen; import appeng.client.gui.TextOverride; +import appeng.client.gui.me.crafting.CraftingCPUScreen; import appeng.client.gui.style.PaletteColor; import appeng.client.gui.style.ScreenStyle; import appeng.client.gui.style.Text; import appeng.client.gui.style.TextAlignment; -import appeng.api.stacks.AEKey; import appeng.menu.slot.AppEngSlot; import com.extendedae_plus.api.ExPatternPageAccessor; import com.extendedae_plus.network.CraftingMonitorJumpC2SPacket; -import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.CraftingMonitorOpenProviderC2SPacket; +import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.util.GuiUtil; import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider; import com.mojang.logging.LogUtils; @@ -24,13 +24,13 @@ import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.contents.TranslatableContents; import net.minecraft.world.inventory.Slot; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(AEBaseScreen.class) public abstract class AEBaseScreenMixin { diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermScreenMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java index b0985a3..7119000 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternEncodingTermScreenMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.client.gui; import appeng.client.gui.AEBaseScreen; import appeng.client.gui.Icon; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderScreenMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderScreenMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java index b0d383d..883fc2a 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderScreenMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/PatternProviderScreenMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.client.gui; import appeng.api.config.Settings; import appeng.api.config.YesNo; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/SlotGridLayoutMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/SlotGridLayoutMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/SlotGridLayoutMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/client/gui/SlotGridLayoutMixin.java index e101c32..aa2267c 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/SlotGridLayoutMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/client/gui/SlotGridLayoutMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.client.gui; import appeng.client.Point; import appeng.client.gui.layout.SlotGridLayout; @@ -8,6 +8,7 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import java.lang.reflect.Field; @Mixin(SlotGridLayout.class) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicAdvancedMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicAdvancedMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java index dcd67d3..dd422f1 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicAdvancedMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.helpers; import appeng.api.crafting.IPatternDetails; import appeng.api.crafting.IPatternDetails.IInput; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicDoublingMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicDoublingMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java index eaf1aac..bad4e05 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderLogicDoublingMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java @@ -1,11 +1,11 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.helpers; -import appeng.helpers.patternprovider.PatternProviderLogic; -import com.extendedae_plus.api.SmartDoublingHolder; -import com.extendedae_plus.api.SmartDoublingAwarePattern; -import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicPatternsAccessor; import appeng.api.crafting.IPatternDetails; import appeng.crafting.pattern.AEProcessingPattern; +import appeng.helpers.patternprovider.PatternProviderLogic; +import com.extendedae_plus.api.SmartDoublingAwarePattern; +import com.extendedae_plus.api.SmartDoublingHolder; +import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicPatternsAccessor; import net.minecraft.nbt.CompoundTag; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/menu/ContainerPatternEncodingTermMenuMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/menu/ContainerPatternEncodingTermMenuMixin.java index 056f2b9..c334559 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/menu/ContainerPatternEncodingTermMenuMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.menu; import appeng.api.crafting.PatternDetailsHelper; import appeng.menu.me.items.PatternEncodingTermMenu; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/MEStorageMenuMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/menu/MEStorageMenuMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/MEStorageMenuMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/menu/MEStorageMenuMixin.java index 5668fbd..f37c56e 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/MEStorageMenuMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/menu/MEStorageMenuMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.menu; import appeng.api.config.Setting; import appeng.api.util.IConfigManager; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermMenuMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternEncodingTermMenuMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermMenuMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternEncodingTermMenuMixin.java index 546bea0..a9cc70a 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternEncodingTermMenuMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternEncodingTermMenuMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.menu; import appeng.api.inventories.InternalInventory; import appeng.api.networking.energy.IEnergySource; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuAdvancedMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuAdvancedMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuAdvancedMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuAdvancedMixin.java index 719fcaa..5e8fade 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuAdvancedMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuAdvancedMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.menu; import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogicHost; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuDoublingMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuDoublingMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuDoublingMixin.java rename to src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuDoublingMixin.java index ee21660..0e184f4 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/PatternProviderMenuDoublingMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/menu/PatternProviderMenuDoublingMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.ae2.menu; import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogicHost; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/HighlightButtonMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/HighlightButtonMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/extendedae/HighlightButtonMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/client/HighlightButtonMixin.java index 7235312..6cda455 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/HighlightButtonMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/HighlightButtonMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.client; import com.glodblock.github.extendedae.client.button.HighlightButton; import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternProviderMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternProviderMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java index 3894e71..c4286d4 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternProviderMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternProviderMixin.java @@ -1,22 +1,19 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.client.gui; import appeng.client.gui.Icon; import appeng.client.gui.implementations.PatternProviderScreen; -import appeng.client.gui.style.PaletteColor; import appeng.client.gui.style.ScreenStyle; import appeng.menu.SlotSemantics; import com.extendedae_plus.NewIcon; -import com.glodblock.github.extendedae.client.button.ActionEPPButton; import com.extendedae_plus.api.ExPatternButtonsAccessor; import com.extendedae_plus.config.ModConfigs; +import com.glodblock.github.extendedae.client.button.ActionEPPButton; import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider; import com.glodblock.github.extendedae.container.ContainerExPatternProvider; import com.glodblock.github.extendedae.network.EPPNetworkHandler; import com.glodblock.github.glodium.network.packet.CGenericPacket; -import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.inventory.Slot; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -24,7 +21,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.lang.reflect.Field; -import java.util.List; + import static com.extendedae_plus.util.ExtendedAELogger.LOGGER; @Mixin(GuiExPatternProvider.class) diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternTerminalMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java index 94655ab..9f8ac0f 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/GuiExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.client.gui; import appeng.api.crafting.PatternDetailsHelper; import appeng.client.gui.AEBaseScreen; @@ -9,23 +9,25 @@ import appeng.client.gui.style.ScreenStyle; import appeng.client.gui.widgets.AETextField; import appeng.client.gui.widgets.IconButton; import appeng.menu.AEBaseMenu; -import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.OpenProviderUiC2SPacket; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; +import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Tooltip; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Rect2i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; -import net.minecraft.resources.ResourceLocation; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; import org.spongepowered.asm.mixin.Shadow; @@ -37,11 +39,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import java.util.Set; import java.util.HashMap; import java.util.Map; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; +import java.util.Set; @Pseudo @Mixin(value = GuiExPatternTerminal.class) diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/PartExPatternProviderMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/common/PartExPatternProviderMixin.java similarity index 94% rename from src/main/java/com/extendedae_plus/mixin/extendedae/PartExPatternProviderMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/common/PartExPatternProviderMixin.java index e3af45d..d2077cf 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/PartExPatternProviderMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/common/PartExPatternProviderMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.common; import com.extendedae_plus.config.ModConfigs; import com.glodblock.github.extendedae.common.parts.PartExPatternProvider; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/TileExPatternProviderMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/common/TileExPatternProviderMixin.java similarity index 94% rename from src/main/java/com/extendedae_plus/mixin/extendedae/TileExPatternProviderMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/common/TileExPatternProviderMixin.java index 1b15747..bb7ac07 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/TileExPatternProviderMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/common/TileExPatternProviderMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.common; import com.extendedae_plus.config.ModConfigs; import com.glodblock.github.extendedae.common.tileentities.TileExPatternProvider; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternProviderMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternProviderMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java index 82df68e..94fe85a 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternProviderMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.container; import appeng.api.crafting.PatternDetailsHelper; import appeng.api.stacks.GenericStack; diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternTerminalMixin.java similarity index 99% rename from src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternTerminalMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternTerminalMixin.java index fde3756..e824e45 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternTerminalMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.container; import appeng.api.util.IConfigurableObject; import appeng.menu.guisync.GuiSync; @@ -6,23 +6,24 @@ import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; import com.glodblock.github.extendedae.container.ContainerExPatternTerminal; import com.glodblock.github.glodium.network.packet.sync.IActionHolder; import com.glodblock.github.glodium.network.packet.sync.Paras; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.network.chat.Component; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; -import net.minecraft.world.MenuProvider; import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraft.core.registries.Registries; import net.minecraftforge.network.NetworkHooks; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -32,8 +33,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Map; import java.util.function.Consumer; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; @Mixin(ContainerExPatternTerminal.class) public abstract class ContainerExPatternTerminalMixin implements IActionHolder { diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerWirelessExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerWirelessExPatternTerminalMixin.java similarity index 97% rename from src/main/java/com/extendedae_plus/mixin/extendedae/ContainerWirelessExPatternTerminalMixin.java rename to src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerWirelessExPatternTerminalMixin.java index a87909d..4355a40 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/ContainerWirelessExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerWirelessExPatternTerminalMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.extendedae; +package com.extendedae_plus.mixin.extendedae.container; import com.extendedae_plus.util.ExtendedAEPatternUploadUtil; import com.glodblock.github.extendedae.common.me.itemhost.HostWirelessExPAT; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/EncodePatternTransferHandlerMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java similarity index 98% rename from src/main/java/com/extendedae_plus/mixin/ae2/EncodePatternTransferHandlerMixin.java rename to src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java index c71d818..820b3ce 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/EncodePatternTransferHandlerMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodePatternTransferHandlerMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.jei; import appeng.integration.modules.jei.transfer.EncodePatternTransferHandler; import appeng.integration.modules.jeirei.EncodingHelper; diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/EncodingHelperMixin.java b/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java similarity index 97% rename from src/main/java/com/extendedae_plus/mixin/ae2/EncodingHelperMixin.java rename to src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java index 4990054..2fb05c0 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/EncodingHelperMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/jei/EncodingHelperMixin.java @@ -1,4 +1,4 @@ -package com.extendedae_plus.mixin.ae2; +package com.extendedae_plus.mixin.jei; import appeng.api.stacks.AEFluidKey; import appeng.api.stacks.AEItemKey; diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index c2149b2..dbdae71 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -7,55 +7,53 @@ "PickFromWirelessMixin", "accessor.AbstractContainerScreenAccessor", "accessor.ScreenAccessor", - "ae2.AEBaseScreenMixin", - "ae2.PatternEncodingTermScreenMixin", - "ae2.PatternProviderScreenMixin", "ae2.QuartzCuttingKnifeItemMixin", - "ae2.SlotGridLayoutMixin", "ae2.accessor.AEBaseScreenAccessor", "ae2.accessor.AEBaseScreenInvoker", "ae2.accessor.MEStorageScreenAccessor", "ae2.accessor.PatternAccessTermScreenAccessor", "ae2.accessor.PatternAccessTermScreenSlotsRowAccessor", - "extendedae.GuiExPatternProviderMixin", - "extendedae.GuiExPatternTerminalMixin", - "extendedae.HighlightButtonMixin", + "ae2.client.gui.AEBaseScreenMixin", + "ae2.client.gui.PatternEncodingTermScreenMixin", + "ae2.client.gui.PatternProviderScreenMixin", + "ae2.client.gui.SlotGridLayoutMixin", "extendedae.accessor.GuiExPatternTerminalAccessor", "extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor", - "ae2.EncodePatternTransferHandlerMixin", - "ae2.EncodingHelperMixin", - "jei.accessor.BookmarkOverlayAccessor", + "extendedae.client.HighlightButtonMixin", + "extendedae.client.gui.GuiExPatternProviderMixin", + "extendedae.client.gui.GuiExPatternTerminalMixin", "hooks.ModelBakeryMixin", - "jei.EncodePatternTransferHandlerMixin" + "jei.EncodePatternTransferHandlerMixin", + "jei.EncodingHelperMixin", + "jei.accessor.BookmarkOverlayAccessor" ], "mixins": [ "ae2.AEProcessingPatternMixin", - "ae2.ContainerPatternEncodingTermMenuMixin", "ae2.CraftingCPUClusterMixin", - "ae2.MEStorageMenuMixin", - "ae2.PatternEncodingTermMenuMixin", - "ae2.PatternProviderLogicAdvancedMixin", - "ae2.PatternProviderLogicDoublingMixin", - "ae2.PatternProviderMenuAdvancedMixin", - "ae2.PatternProviderMenuDoublingMixin", "ae2.accessor.MEStorageMenuAccessor", "ae2.accessor.PatternEncodingTermMenuAccessor", "ae2.accessor.PatternProviderLogicAccessor", "ae2.accessor.PatternProviderLogicPatternInputsAccessor", "ae2.accessor.PatternProviderLogicPatternsAccessor", "ae2.accessor.PatternProviderMenuAdvancedAccessor", + "ae2.autopattern.CraftingServiceGetProvidersMixin", + "ae2.autopattern.CraftingTreeNodeAccessor", + "ae2.autopattern.CraftingTreeNodeMixin", + "ae2.autopattern.CraftingTreeProcessMixin", + "ae2.autopattern.PatternProviderLogicContainsRedirectMixin", + "ae2.helpers.PatternProviderLogicAdvancedMixin", + "ae2.helpers.PatternProviderLogicDoublingMixin", + "ae2.menu.ContainerPatternEncodingTermMenuMixin", + "ae2.menu.MEStorageMenuMixin", + "ae2.menu.PatternEncodingTermMenuMixin", + "ae2.menu.PatternProviderMenuAdvancedMixin", + "ae2.menu.PatternProviderMenuDoublingMixin", "ae2WTlib.ContainerUWirelessExPatternTerminalMixin", - "autopattern.CraftingProviderListAccessor", - "autopattern.CraftingServiceGetProvidersMixin", - "autopattern.CraftingTreeNodeAccessor", - "autopattern.CraftingTreeNodeMixin", - "autopattern.CraftingTreeProcessMixin", - "autopattern.PatternProviderLogicContainsRedirectMixin", - "extendedae.ContainerExPatternProviderMixin", - "extendedae.ContainerExPatternTerminalMixin", - "extendedae.ContainerWirelessExPatternTerminalMixin", - "extendedae.PartExPatternProviderMixin", - "extendedae.TileExPatternProviderMixin" + "extendedae.common.PartExPatternProviderMixin", + "extendedae.common.TileExPatternProviderMixin", + "extendedae.container.ContainerExPatternProviderMixin", + "extendedae.container.ContainerExPatternTerminalMixin", + "extendedae.container.ContainerWirelessExPatternTerminalMixin" ], "injectors": { "defaultRequire": 1 From 289cf5b3e2057044b7270bc6226d9db2ed116842 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sat, 30 Aug 2025 23:10:36 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E6=A0=B7=E6=9D=BF?= =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=99=A8=E8=BD=AE=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae2/autopattern/CraftingTreeProcessMixin.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) 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 ea52af5..68e510e 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 @@ -66,15 +66,16 @@ public abstract class CraftingTreeProcessMixin { CraftingService craftingService = (CraftingService) cc; Iterable 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 + 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(); } From d50b18812b7629827da8e9e58e27770cb9e9ec34 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sun, 31 Aug 2025 00:14:35 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E8=B0=83=E6=95=B4ME=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=A0=B7=E6=9D=BF=E7=BB=88=E7=AB=AFUI=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extendedae/client/gui/GuiExPatternTerminalMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java index 9f8ac0f..df08740 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java @@ -548,8 +548,8 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen } // 放置按钮:位于名称文本右侧,与原类 choiceButton 锚点相邻,向右偏移 20px - int bx = this.leftPos + GUI_PADDING_X + TEXT_MAX_WIDTH - 40; - int by = this.topPos + GUI_PADDING_Y + GUI_HEADER_HEIGHT + i * ROW_HEIGHT - 3; + int bx = this.leftPos + GUI_PADDING_X + TEXT_MAX_WIDTH - 11; + int by = this.topPos + GUI_PADDING_Y + GUI_HEADER_HEIGHT + i * ROW_HEIGHT - 2; Button btn = eap$openUIButtons.get(rowIndex); if (btn == null) { From 9fa9a41a4f9df7ec15e52af354c908537a4cd415 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sun, 31 Aug 2025 02:56:58 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=AF=B9advanced?= =?UTF-8?q?ae=E4=BE=9B=E5=BA=94=E5=99=A8=E7=9A=84=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E7=BF=BB=E5=80=8D=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 ++ ...ernProviderLogicContainsRedirectMixin.java | 2 +- ...ernProviderLogicContainsRedirectMixin.java | 40 +++++++++++++++++++ .../client/gui/GuiExPatternTerminalMixin.java | 23 +++++------ .../CraftingMonitorOpenProviderC2SPacket.java | 8 ++-- .../resources/extendedae_plus.mixins.json | 1 + 6 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java diff --git a/build.gradle b/build.gradle index 007bfa3..d87ef60 100644 --- a/build.gradle +++ b/build.gradle @@ -106,6 +106,9 @@ dependencies { //mae2 // modRuntimeOnly "curse.maven:modern-ae2-additions-1028068:6342203" modCompileOnly "curse.maven:modern-ae2-additions-1028068:6342203" + + //advancedae + modCompileOnly "curse.maven:advancedae-1084104:5957960" } allprojects { diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java index 3aa18e7..d6dc2a5 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/PatternProviderLogicContainsRedirectMixin.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.Redirect; import java.util.List; -/** +/**适配 * Redirect PatternProviderLogic.pushPattern 中对 List.contains 的调用, * 在遇到缩放样板时回退匹配到原始样板实例。 */ diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java new file mode 100644 index 0000000..858c992 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java @@ -0,0 +1,40 @@ +package com.extendedae_plus.mixin.ae2.autopattern.adaptation; + +import appeng.api.crafting.IPatternDetails; +import com.extendedae_plus.content.ScaledProcessingPattern; +import net.pedroksl.advanced_ae.common.logic.AdvPatternProviderLogic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.List; + +/**适配 + * Redirect PatternProviderLogic.pushPattern 中对 List.contains 的调用, + * 在遇到缩放样板时回退匹配到原始样板实例。 + */ +@Pseudo +@Mixin(value = AdvPatternProviderLogic.class, remap = false) +public class AdvPatternProviderLogicContainsRedirectMixin { + + @Redirect(method = "pushPattern", + at = @At( + value = "INVOKE", + target = "Ljava/util/List;contains(Ljava/lang/Object;)Z") + ) + private boolean eap$patternsContains(List list, Object o) { + try { + if (o instanceof ScaledProcessingPattern scaled) { + IPatternDetails base = scaled.getOriginal(); + if (base != null && list.indexOf(base) != -1) { + return true; + } + } + // 使用 indexOf 避免再次触发对 List.contains 的 redirect(防止递归) + return list.indexOf(o) != -1; + } catch (Throwable t) { + return list.indexOf(o) != -1; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java index df08740..01622c1 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/client/gui/GuiExPatternTerminalMixin.java @@ -9,6 +9,7 @@ import appeng.client.gui.style.ScreenStyle; import appeng.client.gui.widgets.AETextField; import appeng.client.gui.widgets.IconButton; import appeng.menu.AEBaseMenu; +import com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor; import com.extendedae_plus.network.ModNetwork; import com.extendedae_plus.network.OpenProviderUiC2SPacket; import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal; @@ -39,9 +40,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.lang.reflect.Constructor; import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; +import java.util.*; @Pseudo @Mixin(value = GuiExPatternTerminal.class) @@ -218,12 +217,11 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen private void eap$tryOpenProviderUI(int rowIndex) { try { // 使用 Accessor 获取 rows,避免取到父类导致失败 - com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor acc = - (com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor) (Object) this; - java.util.ArrayList rows = acc.getRows(); + GuiExPatternTerminalAccessor acc = (GuiExPatternTerminalAccessor) this; + ArrayList rows = acc.getRows(); // 找到该分组对应的第一个 PatternContainerRecord - Class cls = com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal.class; + Class cls = GuiExPatternTerminal.class; var byGroupField = cls.getDeclaredField("byGroup"); byGroupField.setAccessible(true); Object byGroup = byGroupField.get(this); // HashMultimap @@ -234,7 +232,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen Object group = groupField.get(headerRow); // 调用 byGroup.get(group),再取第一个元素 - java.util.Collection containers = (java.util.Collection) byGroup.getClass().getMethod("get", Object.class).invoke(byGroup, group); + Collection containers = (Collection) byGroup.getClass().getMethod("get", Object.class).invoke(byGroup, group); if (containers == null || containers.isEmpty()) { return; } @@ -245,7 +243,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen var infoMapField = cls.getDeclaredField("infoMap"); infoMapField.setAccessible(true); @SuppressWarnings("unchecked") - java.util.HashMap infoMap = (java.util.HashMap) infoMapField.get(this); + HashMap infoMap = (HashMap) infoMapField.get(this); Object info = infoMap.get(serverId); if (info == null) { // 无位置信息,提示 @@ -299,7 +297,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen // 通过反射调用refreshList方法 - 先尝试当前类,失败后尝试父类 try { - java.lang.reflect.Method refreshMethod = null; + Method refreshMethod = null; try { // 先尝试在当前类中查找 refreshMethod = this.getClass().getDeclaredMethod("refreshList"); @@ -514,13 +512,12 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen // 动态放置/创建每个组标题后的“打开UI”按钮 try { // 使用 Accessor 获取必要的字段,避免反射失败 - com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor acc = - (com.extendedae_plus.mixin.extendedae.accessor.GuiExPatternTerminalAccessor) (Object) this; + GuiExPatternTerminalAccessor acc = (GuiExPatternTerminalAccessor) this; java.util.ArrayList rows = acc.getRows(); int currentScroll = acc.getScrollbar().getCurrentScroll(); // 直接引用目标类以获取其静态常量 - Class cls = com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal.class; + Class cls = GuiExPatternTerminal.class; int GUI_PADDING_X = getIntConst(cls, "GUI_PADDING_X", 22); int GUI_PADDING_Y = getIntConst(cls, "GUI_PADDING_Y", 6); int GUI_HEADER_HEIGHT = getIntConst(cls, "GUI_HEADER_HEIGHT", 51); diff --git a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java index 216546c..b1329fe 100644 --- a/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/CraftingMonitorOpenProviderC2SPacket.java @@ -8,12 +8,12 @@ import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogicHost; import appeng.me.service.CraftingService; import appeng.menu.AEBaseMenu; -import appeng.menu.me.crafting.CraftingCPUMenu; import appeng.menu.locator.MenuLocators; +import appeng.menu.me.crafting.CraftingCPUMenu; +import appeng.parts.AEBasePart; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicAccessor; import com.mojang.logging.LogUtils; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.network.NetworkEvent; @@ -94,7 +94,7 @@ public class CraftingMonitorOpenProviderC2SPacket { // 直接打开供应器自身的 UI(调用 Host 默认方法) try { // 部件与方块实体分别选择定位器 - if (host instanceof appeng.parts.AEBasePart part) { + if (host instanceof AEBasePart part) { host.openMenu(player, MenuLocators.forPart(part)); } else { host.openMenu(player, MenuLocators.forBlockEntity(pbe)); @@ -112,4 +112,6 @@ public class CraftingMonitorOpenProviderC2SPacket { }); context.setPacketHandled(true); } + + } diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index dbdae71..e001c30 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -41,6 +41,7 @@ "ae2.autopattern.CraftingTreeNodeMixin", "ae2.autopattern.CraftingTreeProcessMixin", "ae2.autopattern.PatternProviderLogicContainsRedirectMixin", + "ae2.autopattern.adaptation.AdvPatternProviderLogicContainsRedirectMixin", "ae2.helpers.PatternProviderLogicAdvancedMixin", "ae2.helpers.PatternProviderLogicDoublingMixin", "ae2.menu.ContainerPatternEncodingTermMenuMixin", From 6219c0b43462c3e74b5246c8970ee1a7ced22820 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sun, 31 Aug 2025 19:00:48 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=8D=A1=E5=AF=B9=E4=BE=9B=E5=BA=94=E5=99=A8=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E9=98=BB=E6=8C=A1=E3=80=81=E6=99=BA=E8=83=BD=E5=80=8D?= =?UTF-8?q?=E5=A2=9E=E8=AE=BE=E7=BD=AE=E5=A4=8D=E5=88=B6=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PatternProviderLogicAdvancedMixin.java | 27 +++++++++++++++--- .../PatternProviderLogicDoublingMixin.java | 28 ++++++++++++++++--- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java index dd422f1..5cff7ca 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java @@ -8,7 +8,9 @@ import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderTarget; import com.extendedae_plus.api.AdvancedBlockingHolder; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -17,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Collections; -@Mixin(PatternProviderLogic.class) +@Mixin(value = PatternProviderLogic.class, remap = false) public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder { @Unique private static final String EPP_ADV_BLOCKING_KEY = "epp_advanced_blocking"; @@ -35,12 +37,12 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder this.eap$advancedBlocking = value; } - @Inject(method = "writeToNBT", at = @At("TAIL"), remap = false) + @Inject(method = "writeToNBT", at = @At("TAIL")) private void eap$writeAdvancedToNbt(CompoundTag tag, CallbackInfo ci) { tag.putBoolean(EPP_ADV_BLOCKING_KEY, this.eap$advancedBlocking); } - @Inject(method = "readFromNBT", at = @At("TAIL"), remap = false) + @Inject(method = "readFromNBT", at = @At("TAIL")) private void eap$readAdvancedFromNbt(CompoundTag tag, CallbackInfo ci) { if (tag.contains(EPP_ADV_BLOCKING_KEY)) { this.eap$advancedBlocking = tag.getBoolean(EPP_ADV_BLOCKING_KEY); @@ -48,7 +50,7 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder } // 在 pushPattern 中,重定向对 adapter.containsPatternInput(...) 的调用 - @Redirect(method = "pushPattern", at = @At(value = "INVOKE", target = "Lappeng/helpers/patternprovider/PatternProviderTarget;containsPatternInput(Ljava/util/Set;)Z"), remap = false) + @Redirect(method = "pushPattern", at = @At(value = "INVOKE", target = "Lappeng/helpers/patternprovider/PatternProviderTarget;containsPatternInput(Ljava/util/Set;)Z")) private boolean eap$redirectBlockingContains(PatternProviderTarget adapter, java.util.Set patternInputs, IPatternDetails patternDetails, @@ -87,4 +89,21 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder } return true; // 每个输入槽都至少匹配了一个候选输入 } + + @Shadow public void saveChanges() {} + + @Inject(method = "exportSettings(Lnet/minecraft/nbt/CompoundTag;)V", at = @At("TAIL")) + private void onExportSettings(CompoundTag output, CallbackInfo ci) { + System.out.println(this.eap$advancedBlocking); + output.putBoolean("eap_advanced_blocking", this.eap$advancedBlocking); + } + + @Inject(method = "importSettings(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/entity/player/Player;)V", at = @At("TAIL")) + private void onImportSettings(CompoundTag input, Player player, CallbackInfo ci) { + if (input.contains("eap_advanced_blocking")) { + this.eap$advancedBlocking = input.getBoolean("eap_advanced_blocking"); + // 持久化到 world + this.saveChanges(); + } + } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java index bad4e05..462506f 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java @@ -7,13 +7,15 @@ import com.extendedae_plus.api.SmartDoublingAwarePattern; import com.extendedae_plus.api.SmartDoublingHolder; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicPatternsAccessor; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(PatternProviderLogic.class) +@Mixin(value = PatternProviderLogic.class, remap = false) public class PatternProviderLogicDoublingMixin implements SmartDoublingHolder { @Unique private static final String EPP_SMART_DOUBLING_KEY = "epp_smart_doubling"; @@ -43,19 +45,19 @@ public class PatternProviderLogicDoublingMixin implements SmartDoublingHolder { } } - @Inject(method = "writeToNBT", at = @At("TAIL"), remap = false) + @Inject(method = "writeToNBT", at = @At("TAIL")) private void eap$writeSmartDoublingToNbt(CompoundTag tag, CallbackInfo ci) { tag.putBoolean(EPP_SMART_DOUBLING_KEY, this.eap$smartDoubling); } - @Inject(method = "readFromNBT", at = @At("TAIL"), remap = false) + @Inject(method = "readFromNBT", at = @At("TAIL")) private void eap$readSmartDoublingFromNbt(CompoundTag tag, CallbackInfo ci) { if (tag.contains(EPP_SMART_DOUBLING_KEY)) { this.eap$smartDoubling = tag.getBoolean(EPP_SMART_DOUBLING_KEY); } } - @Inject(method = "updatePatterns", at = @At("TAIL"), remap = false) + @Inject(method = "updatePatterns", at = @At("TAIL")) private void eap$applySmartDoublingToPatterns(CallbackInfo ci) { try { var list = ((PatternProviderLogicPatternsAccessor) this).eap$patterns(); @@ -68,4 +70,22 @@ public class PatternProviderLogicDoublingMixin implements SmartDoublingHolder { } catch (Throwable ignored) { } } + + @Shadow + public void saveChanges() {} + + @Inject(method = "exportSettings(Lnet/minecraft/nbt/CompoundTag;)V", at = @At("TAIL")) + private void onExportSettings(CompoundTag output, CallbackInfo ci) { + System.out.println(this.eap$smartDoubling); + output.putBoolean("eap_smart_doubling", this.eap$smartDoubling); + } + + @Inject(method = "importSettings(Lnet/minecraft/nbt/CompoundTag;Lnet/minecraft/world/entity/player/Player;)V", at = @At("TAIL")) + private void onImportSettings(CompoundTag input, Player player, CallbackInfo ci) { + if (input.contains("eap_smart_doubling")) { + this.eap$smartDoubling = input.getBoolean("eap_smart_doubling"); + // 持久化到 world + this.saveChanges(); + } + } }