删除日志,调整小部分mixin类,去掉没用的Accessor

This commit is contained in:
C-H716 2025-09-27 19:42:17 +08:00
parent 2e30d48925
commit be48565e75
15 changed files with 35 additions and 177 deletions

View File

@ -2,7 +2,6 @@ package com.extendedae_plus.compat;
import appeng.api.upgrades.IUpgradeInventory; import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject; import appeng.api.upgrades.IUpgradeableObject;
import appeng.api.upgrades.UpgradeInventories;
import appeng.client.gui.style.ScreenStyle; import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.ToolboxPanel; import appeng.client.gui.widgets.ToolboxPanel;
import appeng.client.gui.widgets.UpgradesPanel; import appeng.client.gui.widgets.UpgradesPanel;
@ -41,15 +40,7 @@ public class UpgradeSlotCompat {
*/ */
public static boolean shouldEnableUpgradeSlots() { public static boolean shouldEnableUpgradeSlots() {
boolean appfluxExists = isAppfluxPresent(); boolean appfluxExists = isAppfluxPresent();
ExtendedAELogger.LOGGER.info("ExtendedAE-appflux模组检测: {}", appfluxExists ? "存在" : "不存在"); return !appfluxExists;
if (appfluxExists) {
ExtendedAELogger.LOGGER.info("检测到ExtendedAE-appflux模组跳过我们的升级卡槽功能");
return false;
} else {
ExtendedAELogger.LOGGER.info("未检测到ExtendedAE-appflux模组启用我们的升级卡槽功能");
return true;
}
} }
/** /**
@ -100,8 +91,6 @@ public class UpgradeSlotCompat {
if (menu instanceof IUpgradeableMenuCompat compatMenu) { if (menu instanceof IUpgradeableMenuCompat compatMenu) {
compatMenu.setCompatToolbox(toolbox); compatMenu.setCompatToolbox(toolbox);
} }
ExtendedAELogger.LOGGER.debug("成功为PatternProviderMenu初始化升级功能");
return true; return true;
} }
} catch (Exception e) { } catch (Exception e) {
@ -147,8 +136,6 @@ public class UpgradeSlotCompat {
ToolboxPanel toolboxPanel = new ToolboxPanel(style, toolbox.getName()); ToolboxPanel toolboxPanel = new ToolboxPanel(style, toolbox.getName());
addMethod.invoke(widgets, "toolbox", toolboxPanel); addMethod.invoke(widgets, "toolbox", toolboxPanel);
} }
ExtendedAELogger.LOGGER.debug("成功为PatternProviderScreen添加升级面板");
return true; return true;
} catch (NoSuchMethodException e) { } catch (NoSuchMethodException e) {
// 尝试其他可能的方法签名 // 尝试其他可能的方法签名
@ -173,8 +160,6 @@ public class UpgradeSlotCompat {
ToolboxPanel toolboxPanel = new ToolboxPanel(style, toolbox.getName()); ToolboxPanel toolboxPanel = new ToolboxPanel(style, toolbox.getName());
putMethod.invoke(widgets, "toolbox", toolboxPanel); putMethod.invoke(widgets, "toolbox", toolboxPanel);
} }
ExtendedAELogger.LOGGER.debug("成功为PatternProviderScreen添加升级面板使用put方法");
return true; return true;
} catch (Exception e2) { } catch (Exception e2) {
ExtendedAELogger.LOGGER.error("反射调用widgets方法失败", e2); ExtendedAELogger.LOGGER.error("反射调用widgets方法失败", e2);

View File

@ -1,6 +1,5 @@
package com.extendedae_plus.mixin; package com.extendedae_plus.mixin;
import net.minecraftforge.fml.ModList;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo; import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
@ -27,7 +26,6 @@ public class MixinConditions implements IMixinConfigPlugin {
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
// 对于升级相关的Mixin检查appflux是否存在 // 对于升级相关的Mixin检查appflux是否存在
if (mixinClassName.contains("PatternProviderMenuUpgradesMixin") || if (mixinClassName.contains("PatternProviderMenuUpgradesMixin") ||
mixinClassName.contains("PatternProviderScreenUpgradesMixin") ||
mixinClassName.contains("PatternProviderLogicUpgradesMixin") || mixinClassName.contains("PatternProviderLogicUpgradesMixin") ||
mixinClassName.contains("PatternProviderLogicHostUpgradesMixin")) { mixinClassName.contains("PatternProviderLogicHostUpgradesMixin")) {

View File

@ -1,10 +0,0 @@
package com.extendedae_plus.mixin.ae2.accessor;
import appeng.client.gui.AEBaseScreen;
import appeng.menu.AEBaseMenu;
import org.spongepowered.asm.mixin.Mixin;
@Mixin(AEBaseScreen.class)
public interface AEBaseScreenInvoker<T extends AEBaseMenu> {
// 空接口避免在 AEBaseScreen 上声明不存在方法的 Invoker 导致编译错误
}

View File

@ -1,11 +1,14 @@
package com.extendedae_plus.mixin.ae2.accessor; package com.extendedae_plus.mixin.ae2.accessor;
import appeng.api.crafting.IPatternDetails;
import appeng.api.networking.IManagedGridNode; import appeng.api.networking.IManagedGridNode;
import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.helpers.patternprovider.PatternProviderLogicHost; import appeng.helpers.patternprovider.PatternProviderLogicHost;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.List;
@Mixin(PatternProviderLogic.class) @Mixin(PatternProviderLogic.class)
public interface PatternProviderLogicAccessor { public interface PatternProviderLogicAccessor {
@Accessor(value = "host", remap = false) @Accessor(value = "host", remap = false)
@ -13,4 +16,7 @@ public interface PatternProviderLogicAccessor {
@Accessor(value = "mainNode", remap = false) @Accessor(value = "mainNode", remap = false)
IManagedGridNode eap$mainNode(); IManagedGridNode eap$mainNode();
@Accessor(value = "patterns" , remap = false)
List<IPatternDetails> eap$patterns();
} }

View File

@ -1,14 +0,0 @@
package com.extendedae_plus.mixin.ae2.accessor;
import appeng.api.stacks.AEKey;
import appeng.helpers.patternprovider.PatternProviderLogic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Set;
@Mixin(PatternProviderLogic.class)
public interface PatternProviderLogicPatternInputsAccessor {
@Accessor(value = "patternInputs",remap = false)
Set<AEKey> eap$patternInputs();
}

View File

@ -1,14 +0,0 @@
package com.extendedae_plus.mixin.ae2.accessor;
import appeng.api.crafting.IPatternDetails;
import appeng.helpers.patternprovider.PatternProviderLogic;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.List;
@Mixin(value = PatternProviderLogic.class, remap = false)
public interface PatternProviderLogicPatternsAccessor {
@Accessor("patterns")
List<IPatternDetails> eap$patterns();
}

View File

@ -6,7 +6,7 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(PatternProviderMenu.class) @Mixin(PatternProviderMenu.class)
public interface PatternProviderMenuAdvancedAccessor { public interface PatternProviderMenuAccessor {
@Accessor(value = "logic", remap = false) @Accessor(value = "logic", remap = false)
PatternProviderLogic eap$logic(); PatternProviderLogic eap$logic();
} }

View File

@ -16,11 +16,11 @@ import appeng.menu.slot.AppEngSlot;
import com.extendedae_plus.api.IExPatternPageAccessor; import com.extendedae_plus.api.IExPatternPageAccessor;
import com.extendedae_plus.content.ClientPatternHighlightStore; import com.extendedae_plus.content.ClientPatternHighlightStore;
import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.init.ModNetwork;
import com.extendedae_plus.mixin.ae2.accessor.AEBaseScreenAccessor;
import com.extendedae_plus.network.crafting.CraftingMonitorJumpC2SPacket; import com.extendedae_plus.network.crafting.CraftingMonitorJumpC2SPacket;
import com.extendedae_plus.network.crafting.CraftingMonitorOpenProviderC2SPacket; import com.extendedae_plus.network.crafting.CraftingMonitorOpenProviderC2SPacket;
import com.extendedae_plus.util.GuiUtil; import com.extendedae_plus.util.GuiUtil;
import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider; import com.glodblock.github.extendedae.client.gui.GuiExPatternProvider;
import com.mojang.logging.LogUtils;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
@ -40,17 +40,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(AEBaseScreen.class) @Mixin(AEBaseScreen.class)
public abstract class AEBaseScreenMixin { public abstract class AEBaseScreenMixin {
@Unique
private ScreenStyle eap$getStyle(Object self) {
try {
var f = self.getClass().getDeclaredField("style");
f.setAccessible(true);
Object v = f.get(self);
if (v instanceof ScreenStyle s) return s;
} catch (Throwable ignored) {}
return null;
}
/** /**
* AEBaseScreen mouseClicked 入口拦截 CraftingCPUScreen Shift+左键 * AEBaseScreen mouseClicked 入口拦截 CraftingCPUScreen Shift+左键
* 读取鼠标下的 AEKey 并发送 CraftingMonitorJumpC2SPacket * 读取鼠标下的 AEKey 并发送 CraftingMonitorJumpC2SPacket
@ -75,14 +64,9 @@ public abstract class AEBaseScreenMixin {
if (key == null) { if (key == null) {
return; return;
} }
// Debug: 标记一次发送
try {
LogUtils.getLogger().info("EAP: Send CraftingMonitorJumpC2SPacket: {}", key);
} catch (Throwable ignored2) {}
ModNetwork.CHANNEL.sendToServer(new CraftingMonitorJumpC2SPacket(key)); ModNetwork.CHANNEL.sendToServer(new CraftingMonitorJumpC2SPacket(key));
cir.setReturnValue(true); cir.setReturnValue(true);
} catch (Throwable ignored) { } catch (Throwable ignored) {}
}
} }
/** /**
@ -109,14 +93,9 @@ public abstract class AEBaseScreenMixin {
if (key == null) { if (key == null) {
return; return;
} }
// Debug: 标记一次发送打开供应器UI
try {
LogUtils.getLogger().info("EAP: Send CraftingMonitorOpenProviderC2SPacket: {}", key);
} catch (Throwable ignored2) {}
ModNetwork.CHANNEL.sendToServer(new CraftingMonitorOpenProviderC2SPacket(key)); ModNetwork.CHANNEL.sendToServer(new CraftingMonitorOpenProviderC2SPacket(key));
cir.setReturnValue(true); cir.setReturnValue(true);
} catch (Throwable ignored) { } catch (Throwable ignored) {}
}
} }
@Unique @Unique
@ -289,7 +268,7 @@ public abstract class AEBaseScreenMixin {
String pageText = "" + cur + "" + "/" + max + ""; String pageText = "" + cur + "" + "/" + max + "";
ScreenStyle style = eap$getStyle(self); ScreenStyle style = ((AEBaseScreenAccessor<?>) this).eap$getStyle();
int color = 0xFFFFFFFF; int color = 0xFFFFFFFF;
if (style != null) { if (style != null) {
try { try {
@ -307,11 +286,9 @@ public abstract class AEBaseScreenMixin {
guiGraphics.drawString(font, pageText, lineWidth + padding, 0, color, false); guiGraphics.drawString(font, pageText, lineWidth + padding, 0, color, false);
guiGraphics.pose().popPose(); guiGraphics.pose().popPose();
} }
} catch (Throwable ignored) { } catch (Throwable ignored) {}
}
} }
@Shadow(remap = false) @Shadow(remap = false)
protected void setTextContent(String id, Component content) {}; protected void setTextContent(String id, Component content) {};

View File

@ -4,13 +4,13 @@ import appeng.client.gui.AEBaseScreen;
import appeng.client.gui.implementations.InterfaceScreen; import appeng.client.gui.implementations.InterfaceScreen;
import appeng.menu.AEBaseMenu; import appeng.menu.AEBaseMenu;
import appeng.menu.SlotSemantics; import appeng.menu.SlotSemantics;
import appeng.menu.implementations.InterfaceMenu;
import com.extendedae_plus.ae.client.gui.NewIcon; import com.extendedae_plus.ae.client.gui.NewIcon;
import com.extendedae_plus.init.ModNetwork; import com.extendedae_plus.init.ModNetwork;
import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor; import com.extendedae_plus.mixin.accessor.AbstractContainerScreenAccessor;
import com.extendedae_plus.mixin.accessor.ScreenAccessor; import com.extendedae_plus.mixin.accessor.ScreenAccessor;
import com.extendedae_plus.network.meInterface.InterfaceAdjustConfigAmountC2SPacket; import com.extendedae_plus.network.meInterface.InterfaceAdjustConfigAmountC2SPacket;
import com.glodblock.github.extendedae.client.button.ActionEPPButton; import com.glodblock.github.extendedae.client.button.ActionEPPButton;
import com.mojang.logging.LogUtils;
import net.minecraft.world.inventory.Slot; import net.minecraft.world.inventory.Slot;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.Unique;
@ -46,7 +46,6 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (!eap$isSupportedInterfaceScreen()) { if (!eap$isSupportedInterfaceScreen()) {
return; return;
} }
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] init tail reached, preparing scale buttons."); } catch (Throwable ignored) {}
// 避免重复创建 // 避免重复创建
if (eap$x2Button == null) { if (eap$x2Button == null) {
eap$x2Button = new ActionEPPButton((b) -> { eap$x2Button = new ActionEPPButton((b) -> {
@ -108,7 +107,6 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
// 初次定位 // 初次定位
eap$relayoutButtons(); eap$relayoutButtons();
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] buttons added and laid out."); } catch (Throwable ignored) {}
} }
@Inject(method = "containerTick", at = @At("TAIL")) @Inject(method = "containerTick", at = @At("TAIL"))
@ -121,32 +119,26 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (eap$divideBy2Button != null && !accessor.eap$getRenderables().contains(eap$divideBy2Button)) { if (eap$divideBy2Button != null && !accessor.eap$getRenderables().contains(eap$divideBy2Button)) {
accessor.eap$getRenderables().add(eap$divideBy2Button); accessor.eap$getRenderables().add(eap$divideBy2Button);
accessor.eap$getChildren().add(eap$divideBy2Button); accessor.eap$getChildren().add(eap$divideBy2Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added divide2 button to renderables."); } catch (Throwable ignored) {}
} }
if (eap$x2Button != null && !accessor.eap$getRenderables().contains(eap$x2Button)) { if (eap$x2Button != null && !accessor.eap$getRenderables().contains(eap$x2Button)) {
accessor.eap$getRenderables().add(eap$x2Button); accessor.eap$getRenderables().add(eap$x2Button);
accessor.eap$getChildren().add(eap$x2Button); accessor.eap$getChildren().add(eap$x2Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added x2 button to renderables."); } catch (Throwable ignored) {}
} }
if (eap$divideBy5Button != null && !accessor.eap$getRenderables().contains(eap$divideBy5Button)) { if (eap$divideBy5Button != null && !accessor.eap$getRenderables().contains(eap$divideBy5Button)) {
accessor.eap$getRenderables().add(eap$divideBy5Button); accessor.eap$getRenderables().add(eap$divideBy5Button);
accessor.eap$getChildren().add(eap$divideBy5Button); accessor.eap$getChildren().add(eap$divideBy5Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added divide5 button to renderables."); } catch (Throwable ignored) {}
} }
if (eap$x5Button != null && !accessor.eap$getRenderables().contains(eap$x5Button)) { if (eap$x5Button != null && !accessor.eap$getRenderables().contains(eap$x5Button)) {
accessor.eap$getRenderables().add(eap$x5Button); accessor.eap$getRenderables().add(eap$x5Button);
accessor.eap$getChildren().add(eap$x5Button); accessor.eap$getChildren().add(eap$x5Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added x5 button to renderables."); } catch (Throwable ignored) {}
} }
if (eap$divideBy10Button != null && !accessor.eap$getRenderables().contains(eap$divideBy10Button)) { if (eap$divideBy10Button != null && !accessor.eap$getRenderables().contains(eap$divideBy10Button)) {
accessor.eap$getRenderables().add(eap$divideBy10Button); accessor.eap$getRenderables().add(eap$divideBy10Button);
accessor.eap$getChildren().add(eap$divideBy10Button); accessor.eap$getChildren().add(eap$divideBy10Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added divide10 button to renderables."); } catch (Throwable ignored) {}
} }
if (eap$x10Button != null && !accessor.eap$getRenderables().contains(eap$x10Button)) { if (eap$x10Button != null && !accessor.eap$getRenderables().contains(eap$x10Button)) {
accessor.eap$getRenderables().add(eap$x10Button); accessor.eap$getRenderables().add(eap$x10Button);
accessor.eap$getChildren().add(eap$x10Button); accessor.eap$getChildren().add(eap$x10Button);
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] re-added x10 button to renderables."); } catch (Throwable ignored) {}
} }
// 尺寸变化时重新定位 // 尺寸变化时重新定位
int curLeft = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getLeftPos(); int curLeft = ((AbstractContainerScreenAccessor<?>) (Object) this).eap$getLeftPos();
@ -159,7 +151,6 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
eap$lastImageWidth = curImgW; eap$lastImageWidth = curImgW;
eap$lastImageHeight = curImgH; eap$lastImageHeight = curImgH;
eap$relayoutButtons(); eap$relayoutButtons();
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] relayout due to bounds change: left={}, top={}, w={}, h={}", curLeft, curTop, curImgW, curImgH); } catch (Throwable ignored) {}
} }
// 每帧根据 hoveredSlot 刷新最近一次的配置槽索引 // 每帧根据 hoveredSlot 刷新最近一次的配置槽索引
eap$updateLastConfigFromHover(); eap$updateLastConfigFromHover();
@ -177,7 +168,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
// 获取菜单与配置槽列表 // 获取菜单与配置槽列表
var screen = (AEBaseScreen<?>) (Object) this; var screen = (AEBaseScreen<?>) (Object) this;
var menu = screen.getMenu(); var menu = screen.getMenu();
if (!(menu instanceof appeng.menu.implementations.InterfaceMenu interfaceMenu)) { if (!(menu instanceof InterfaceMenu interfaceMenu)) {
return; return;
} }
var configSlots = interfaceMenu.getSlots(SlotSemantics.CONFIG); var configSlots = interfaceMenu.getSlots(SlotSemantics.CONFIG);
@ -212,10 +203,8 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
slotField = slotFieldObj; slotField = slotFieldObj;
} else if (eap$lastConfigIndex >= 0 && eap$lastConfigIndex < configSlots.size()) { } else if (eap$lastConfigIndex >= 0 && eap$lastConfigIndex < configSlots.size()) {
slotField = eap$lastConfigIndex; slotField = eap$lastConfigIndex;
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] Using last hovered config index: {}", slotField); } catch (Throwable ignored) {}
} }
if (slotField < 0) { if (slotField < 0) {
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] No hovered slot and no last config index; ignoring adjust."); } catch (Throwable ignored) {}
return; return;
} }
@ -282,7 +271,7 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
} }
var screen = (AEBaseScreen<?>) (Object) this; var screen = (AEBaseScreen<?>) (Object) this;
var menu = screen.getMenu(); var menu = screen.getMenu();
if (!(menu instanceof appeng.menu.implementations.InterfaceMenu interfaceMenu)) { if (!(menu instanceof InterfaceMenu interfaceMenu)) {
return; return;
} }
var configSlots = interfaceMenu.getSlots(SlotSemantics.CONFIG); var configSlots = interfaceMenu.getSlots(SlotSemantics.CONFIG);
@ -310,7 +299,6 @@ public abstract class InterfaceScreenMixin<T extends AEBaseMenu> {
if (idx != null && idx >= 0) { if (idx != null && idx >= 0) {
if (eap$lastConfigIndex != idx) { if (eap$lastConfigIndex != idx) {
eap$lastConfigIndex = idx; eap$lastConfigIndex = idx;
try { LogUtils.getLogger().info("[EAP][InterfaceMixin] lastConfigIndex updated: {}", eap$lastConfigIndex); } catch (Throwable ignored) {}
} }
} }
} catch (Throwable ignored) {} } catch (Throwable ignored) {}

View File

@ -16,7 +16,6 @@ public class PatternProviderCloseMixin {
if (((Object) this) instanceof PatternProviderScreen) { if (((Object) this) instanceof PatternProviderScreen) {
ClientPatternHighlightStore.clearAll(); ClientPatternHighlightStore.clearAll();
} }
} catch (Throwable ignored) { } catch (Throwable ignored) {}
}
} }
} }

View File

@ -1,54 +0,0 @@
package com.extendedae_plus.mixin.ae2.client.gui;
import appeng.api.upgrades.Upgrades;
import appeng.client.gui.AEBaseScreen;
import appeng.client.gui.implementations.PatternProviderScreen;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.ToolboxPanel;
import appeng.client.gui.widgets.UpgradesPanel;
import appeng.core.localization.GuiText;
import appeng.menu.SlotSemantics;
import appeng.menu.implementations.PatternProviderMenu;
import com.extendedae_plus.api.bridge.IUpgradableMenu;
import com.extendedae_plus.compat.UpgradeSlotCompat;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
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 java.util.ArrayList;
import java.util.List;
@Mixin(value = PatternProviderScreen.class, priority = 2000, remap = false)
public abstract class PatternProviderScreenUpgradesMixin<C extends PatternProviderMenu> extends AEBaseScreen<C> {
@Inject(method = "<init>", at = @At("TAIL"))
private void eap$initUpgrades(PatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) {
// 只有在应该启用升级卡槽时才添加升级面板
if (!UpgradeSlotCompat.shouldAddUpgradePanelToScreen()) {
return;
}
this.widgets.add("upgrades", new UpgradesPanel(
menu.getSlots(SlotSemantics.UPGRADE),
this::eap$getCompatibleUpgrades));
if (((IUpgradableMenu) menu).getToolbox() != null && ((IUpgradableMenu) menu).getToolbox().isPresent()) {
this.widgets.add("toolbox", new ToolboxPanel(style, ((IUpgradableMenu) menu).getToolbox().getName()));
}
}
@Unique
private List<Component> eap$getCompatibleUpgrades() {
var list = new ArrayList<Component>();
list.add(GuiText.CompatibleUpgrades.text());
list.addAll(Upgrades.getTooltipLinesForMachine(((IUpgradableMenu) menu).getUpgrades().getUpgradableItem()));
return list;
}
public PatternProviderScreenUpgradesMixin(C menu, Inventory playerInventory, Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
}
}

View File

@ -5,7 +5,7 @@ import appeng.crafting.pattern.AEProcessingPattern;
import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogic;
import com.extendedae_plus.api.smartDoubling.ISmartDoublingAwarePattern; import com.extendedae_plus.api.smartDoubling.ISmartDoublingAwarePattern;
import com.extendedae_plus.api.smartDoubling.ISmartDoublingHolder; import com.extendedae_plus.api.smartDoubling.ISmartDoublingHolder;
import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicPatternsAccessor; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicAccessor;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -33,7 +33,7 @@ public class PatternProviderLogicDoublingMixin implements ISmartDoublingHolder {
this.eap$smartDoubling = value; this.eap$smartDoubling = value;
// 立即将开关状态应用到当前 Provider 的样板上避免等待下一次 updatePatterns // 立即将开关状态应用到当前 Provider 的样板上避免等待下一次 updatePatterns
try { try {
var list = ((PatternProviderLogicPatternsAccessor) this).eap$patterns(); var list = ((PatternProviderLogicAccessor) this).eap$patterns();
for (IPatternDetails details : list) { for (IPatternDetails details : list) {
if (details instanceof AEProcessingPattern proc && proc instanceof ISmartDoublingAwarePattern aware) { if (details instanceof AEProcessingPattern proc && proc instanceof ISmartDoublingAwarePattern aware) {
aware.eap$setAllowScaling(value); aware.eap$setAllowScaling(value);
@ -60,7 +60,7 @@ public class PatternProviderLogicDoublingMixin implements ISmartDoublingHolder {
@Inject(method = "updatePatterns", at = @At("TAIL")) @Inject(method = "updatePatterns", at = @At("TAIL"))
private void eap$applySmartDoublingToPatterns(CallbackInfo ci) { private void eap$applySmartDoublingToPatterns(CallbackInfo ci) {
try { try {
var list = ((PatternProviderLogicPatternsAccessor) this).eap$patterns(); var list = ((PatternProviderLogicAccessor) this).eap$patterns();
boolean allow = this.eap$smartDoubling; boolean allow = this.eap$smartDoubling;
for (IPatternDetails details : list) { for (IPatternDetails details : list) {
if (details instanceof AEProcessingPattern proc && proc instanceof ISmartDoublingAwarePattern aware) { if (details instanceof AEProcessingPattern proc && proc instanceof ISmartDoublingAwarePattern aware) {

View File

@ -5,7 +5,7 @@ import appeng.api.config.YesNo;
import appeng.menu.implementations.PatternProviderMenu; import appeng.menu.implementations.PatternProviderMenu;
import com.extendedae_plus.api.IAdvancedBlocking; import com.extendedae_plus.api.IAdvancedBlocking;
import com.extendedae_plus.mixin.advancedae.accessor.AdvPatternProviderMenuAdvancedAccessor; import com.extendedae_plus.mixin.advancedae.accessor.AdvPatternProviderMenuAdvancedAccessor;
import com.extendedae_plus.mixin.ae2.accessor.PatternProviderMenuAdvancedAccessor; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderMenuAccessor;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
@ -34,7 +34,7 @@ public class ToggleAdvancedBlockingC2SPacket {
var containerMenu = player.containerMenu; var containerMenu = player.containerMenu;
if (containerMenu instanceof PatternProviderMenu menu) { if (containerMenu instanceof PatternProviderMenu menu) {
var accessor = (PatternProviderMenuAdvancedAccessor) menu; var accessor = (PatternProviderMenuAccessor) menu;
var logic = accessor.eap$logic(); var logic = accessor.eap$logic();
if (logic instanceof IAdvancedBlocking holder) { if (logic instanceof IAdvancedBlocking holder) {
boolean current = holder.eap$getAdvancedBlocking(); boolean current = holder.eap$getAdvancedBlocking();

View File

@ -3,7 +3,7 @@ package com.extendedae_plus.network.provider;
import appeng.menu.implementations.PatternProviderMenu; import appeng.menu.implementations.PatternProviderMenu;
import com.extendedae_plus.api.smartDoubling.ISmartDoublingHolder; import com.extendedae_plus.api.smartDoubling.ISmartDoublingHolder;
import com.extendedae_plus.mixin.advancedae.accessor.AdvPatternProviderMenuAdvancedAccessor; import com.extendedae_plus.mixin.advancedae.accessor.AdvPatternProviderMenuAdvancedAccessor;
import com.extendedae_plus.mixin.ae2.accessor.PatternProviderMenuAdvancedAccessor; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderMenuAccessor;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent; import net.minecraftforge.network.NetworkEvent;
@ -31,7 +31,7 @@ public class ToggleSmartDoublingC2SPacket {
if (player == null) return; if (player == null) return;
var containerMenu = player.containerMenu; var containerMenu = player.containerMenu;
if (containerMenu instanceof PatternProviderMenu menu) { if (containerMenu instanceof PatternProviderMenu menu) {
var accessor = (PatternProviderMenuAdvancedAccessor) menu; var accessor = (PatternProviderMenuAccessor) menu;
var logic = accessor.eap$logic(); var logic = accessor.eap$logic();
if (logic instanceof ISmartDoublingHolder holder) { if (logic instanceof ISmartDoublingHolder holder) {
boolean current = holder.eap$getSmartDoubling(); boolean current = holder.eap$getSmartDoubling();

View File

@ -11,7 +11,6 @@
"advancedae.client.gui.SmallAdvPatternProviderScreenMixin", "advancedae.client.gui.SmallAdvPatternProviderScreenMixin",
"ae2.QuartzCuttingKnifeItemMixin", "ae2.QuartzCuttingKnifeItemMixin",
"ae2.accessor.AEBaseScreenAccessor", "ae2.accessor.AEBaseScreenAccessor",
"ae2.accessor.AEBaseScreenInvoker",
"ae2.accessor.MEStorageScreenAccessor", "ae2.accessor.MEStorageScreenAccessor",
"ae2.accessor.PatternAccessTermScreenAccessor", "ae2.accessor.PatternAccessTermScreenAccessor",
"ae2.accessor.PatternAccessTermScreenSlotsRowAccessor", "ae2.accessor.PatternAccessTermScreenSlotsRowAccessor",
@ -20,8 +19,8 @@
"ae2.client.gui.PatternEncodingTermScreenMixin", "ae2.client.gui.PatternEncodingTermScreenMixin",
"ae2.client.gui.PatternProviderCloseMixin", "ae2.client.gui.PatternProviderCloseMixin",
"ae2.client.gui.PatternProviderScreenMixin", "ae2.client.gui.PatternProviderScreenMixin",
"ae2.compat.PatternProviderScreenCompatMixin",
"ae2.client.gui.SlotGridLayoutMixin", "ae2.client.gui.SlotGridLayoutMixin",
"ae2.compat.PatternProviderScreenCompatMixin",
"ae2.menu.CraftConfirmMenuGoBackMixin", "ae2.menu.CraftConfirmMenuGoBackMixin",
"extendedae.accessor.GuiExPatternTerminalAccessor", "extendedae.accessor.GuiExPatternTerminalAccessor",
"extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor", "extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor",
@ -45,43 +44,41 @@
"ae2.CraftingCalculationMixin", "ae2.CraftingCalculationMixin",
"ae2.CraftingCPUClusterMixin", "ae2.CraftingCPUClusterMixin",
"ae2.EncodedPatternItemMixin", "ae2.EncodedPatternItemMixin",
"ae2.InterfaceLogicUpgradesMixin",
"ae2.accessor.MEStorageMenuAccessor", "ae2.accessor.MEStorageMenuAccessor",
"ae2.accessor.PatternEncodingTermMenuAccessor", "ae2.accessor.PatternEncodingTermMenuAccessor",
"ae2.accessor.PatternProviderLogicAccessor", "ae2.accessor.PatternProviderLogicAccessor",
"ae2.accessor.PatternProviderLogicPatternInputsAccessor", "ae2.accessor.PatternProviderMenuAccessor",
"ae2.accessor.PatternProviderLogicPatternsAccessor",
"ae2.accessor.PatternProviderMenuAdvancedAccessor",
"ae2.autopattern.CraftingServiceGetProvidersMixin", "ae2.autopattern.CraftingServiceGetProvidersMixin",
"ae2.autopattern.CraftingTreeNodeAccessor", "ae2.autopattern.CraftingTreeNodeAccessor",
"ae2.autopattern.CraftingTreeNodeMixin", "ae2.autopattern.CraftingTreeNodeMixin",
"ae2.autopattern.CraftingTreeProcessMixin", "ae2.autopattern.CraftingTreeProcessMixin",
"ae2.autopattern.PatternProviderLogicContainsRedirectMixin", "ae2.autopattern.PatternProviderLogicContainsRedirectMixin",
"ae2.compat.PatternProviderCompatMixin",
"ae2.compat.PatternProviderLogicCompatMixin",
"ae2.compat.PatternProviderLogicHostCompatMixin",
"ae2.helpers.InterfaceLogicChannelCardMixin",
"ae2.helpers.InterfaceLogicTickerMixin",
"ae2.helpers.PatternProviderLogicAdvancedMixin", "ae2.helpers.PatternProviderLogicAdvancedMixin",
"ae2.helpers.PatternProviderLogicDoublingMixin", "ae2.helpers.PatternProviderLogicDoublingMixin",
"ae2.helpers.patternprovider.PatternProviderLogicTickerMixin",
"ae2.menu.ContainerPatternEncodingTermMenuMixin", "ae2.menu.ContainerPatternEncodingTermMenuMixin",
"ae2.menu.MEStorageMenuMixin", "ae2.menu.MEStorageMenuMixin",
"ae2.menu.PatternEncodingTermMenuMixin", "ae2.menu.PatternEncodingTermMenuMixin",
"ae2.menu.PatternProviderMenuAdvancedMixin", "ae2.menu.PatternProviderMenuAdvancedMixin",
"ae2.menu.PatternProviderMenuDoublingMixin", "ae2.menu.PatternProviderMenuDoublingMixin",
"ae2.compat.PatternProviderLogicCompatMixin",
"ae2.compat.PatternProviderLogicHostCompatMixin",
"ae2.compat.PatternProviderCompatMixin",
"appflux.AppfluxPatternProviderLogicMixin",
"ae2.helpers.patternprovider.PatternProviderLogicTickerMixin",
"ae2.parts.AEBasePartClientSyncMixin", "ae2.parts.AEBasePartClientSyncMixin",
"ae2.parts.automation.IOBusPartChannelCardMixin", "ae2.parts.automation.IOBusPartChannelCardMixin",
"ae2.parts.automation.IOBusPartTickerChannelCardMixin", "ae2.parts.automation.IOBusPartTickerChannelCardMixin",
"ae2.parts.storagebus.StorageBusPartChannelCardMixin", "ae2.parts.storagebus.StorageBusPartChannelCardMixin",
"ae2.parts.storagebus.StorageBusPartTickerChannelCardMixin", "ae2.parts.storagebus.StorageBusPartTickerChannelCardMixin",
"ae2WTlib.ContainerUWirelessExPatternTerminalMixin", "ae2WTlib.ContainerUWirelessExPatternTerminalMixin",
"appflux.AppfluxPatternProviderLogicMixin",
"extendedae.common.PartExPatternProviderMixin", "extendedae.common.PartExPatternProviderMixin",
"extendedae.common.TileExPatternProviderMixin", "extendedae.common.TileExPatternProviderMixin",
"extendedae.container.ContainerExPatternProviderMixin", "extendedae.container.ContainerExPatternProviderMixin",
"extendedae.container.ContainerExPatternTerminalMixin", "extendedae.container.ContainerExPatternTerminalMixin",
"extendedae.container.ContainerWirelessExPatternTerminalMixin", "extendedae.container.ContainerWirelessExPatternTerminalMixin"
"ae2.helpers.InterfaceLogicChannelCardMixin",
"ae2.helpers.InterfaceLogicTickerMixin",
"ae2.InterfaceLogicUpgradesMixin"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1