删除没用的ToolboxMenu添加

This commit is contained in:
C-H716 2025-10-30 18:31:16 +08:00
parent 4c207edea5
commit fe626c7a82
4 changed files with 18 additions and 48 deletions

View File

@ -1,7 +1,6 @@
package com.extendedae_plus.compat;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.menu.ToolboxMenu;
import net.minecraftforge.fml.ModList;
/**
@ -50,8 +49,6 @@ public class UpgradeSlotCompat {
* 兼容性升级菜单接口
*/
public interface IUpgradeableMenuCompat {
ToolboxMenu getCompatToolbox();
void setCompatToolbox(ToolboxMenu toolbox);
IUpgradeInventory getCompatUpgrades();
}
}

View File

@ -1,12 +1,11 @@
package com.extendedae_plus.mixin.ae2.compat;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.helpers.patternprovider.PatternProviderLogicHost;
import appeng.menu.AEBaseMenu;
import appeng.menu.ToolboxMenu;
import appeng.menu.implementations.PatternProviderMenu;
import com.extendedae_plus.compat.UpgradeSlotCompat;
import com.extendedae_plus.util.Logger;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.MenuType;
import org.spongepowered.asm.mixin.Mixin;
@ -15,19 +14,21 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import static com.extendedae_plus.util.Logger.EAP$LOGGER;
/**
* PatternProviderMenu的兼容性Mixin
* 优先级设置为500低于appflux的默认优先级避免冲突
*/
@Mixin(value = PatternProviderMenu.class, priority = 500, remap = false)
public abstract class PatternProviderCompatMixin extends AEBaseMenu implements UpgradeSlotCompat.IUpgradeableMenuCompat {
@Unique
private ToolboxMenu eap$compatToolbox;
@Unique
private IUpgradeInventory eap$compatUpgrades;
public PatternProviderCompatMixin(MenuType<?> menuType, int id, Inventory playerInventory, Object host) {
super(menuType, id, playerInventory, host);
}
@Inject(method = "<init>(Lnet/minecraft/world/inventory/MenuType;ILnet/minecraft/world/entity/player/Inventory;Lappeng/helpers/patternprovider/PatternProviderLogicHost;)V",
at = @At("TAIL"))
private void eap$initCompatUpgrades(MenuType<?> menuType, int id, Inventory playerInventory, PatternProviderLogicHost host, CallbackInfo ci) {
@ -35,36 +36,19 @@ public abstract class PatternProviderCompatMixin extends AEBaseMenu implements U
// 检测是否应该启用升级卡槽功能
if (UpgradeSlotCompat.shouldEnableUpgradeSlots()) {
// 直接初始化升级功能
this.eap$compatToolbox = new ToolboxMenu(this);
if (host instanceof appeng.api.upgrades.IUpgradeableObject upgradeableHost) {
if (host instanceof IUpgradeableObject upgradeableHost) {
this.eap$compatUpgrades = upgradeableHost.getUpgrades();
this.setupUpgrades(this.eap$compatUpgrades);
}
}
} catch (Exception e) {
// 静默处理异常确保不会因为升级功能导致崩溃
Logger.EAP$LOGGER.error("PatternProviderMenu兼容性升级初始化失败", e);
EAP$LOGGER.error("PatternProviderMenu兼容性升级初始化失败", e);
}
}
@Override
public ToolboxMenu getCompatToolbox() {
return this.eap$compatToolbox;
}
@Override
public void setCompatToolbox(ToolboxMenu toolbox) {
this.eap$compatToolbox = toolbox;
}
@Override
public IUpgradeInventory getCompatUpgrades() {
return this.eap$compatUpgrades;
}
// 构造函数Mixin要求
public PatternProviderCompatMixin(MenuType<?> menuType, int id, Inventory playerInventory, Object host) {
super(menuType, id, playerInventory, host);
}
}

View File

@ -4,7 +4,6 @@ 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;
@ -28,6 +27,9 @@ import java.util.List;
*/
@Mixin(value = PatternProviderScreen.class, priority = 500, remap = false)
public abstract class PatternProviderScreenCompatMixin<C extends PatternProviderMenu> extends AEBaseScreen<C> {
public PatternProviderScreenCompatMixin(C menu, Inventory playerInventory, Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
}
@Inject(method = "<init>", at = @At("TAIL"))
private void eap$initCompatUpgrades(PatternProviderMenu menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) {
@ -42,7 +44,7 @@ public abstract class PatternProviderScreenCompatMixin<C extends PatternProvider
Logger.EAP$LOGGER.error("PatternProviderScreen兼容性升级面板初始化失败", e);
}
}
@Unique
private void eap$addUpgradePanelDirect(PatternProviderMenu menu, ScreenStyle style) {
try {
@ -50,14 +52,6 @@ public abstract class PatternProviderScreenCompatMixin<C extends PatternProvider
this.widgets.add("upgrades", new UpgradesPanel(
menu.getSlots(SlotSemantics.UPGRADE),
this::eap$getCompatibleUpgrades));
// 添加工具箱面板如果菜单实现了兼容接口
if (menu instanceof UpgradeSlotCompat.IUpgradeableMenuCompat compatMenu) {
var toolbox = compatMenu.getCompatToolbox();
if (toolbox != null && toolbox.isPresent()) {
this.widgets.add("toolbox", new ToolboxPanel(style, toolbox.getName()));
}
}
} catch (Exception e) {
Logger.EAP$LOGGER.error("直接添加升级面板失败", e);
}
@ -67,7 +61,7 @@ public abstract class PatternProviderScreenCompatMixin<C extends PatternProvider
private List<Component> eap$getCompatibleUpgrades() {
var list = new ArrayList<Component>();
list.add(GuiText.CompatibleUpgrades.text());
try {
if (menu instanceof UpgradeSlotCompat.IUpgradeableMenuCompat compatMenu) {
var upgrades = compatMenu.getCompatUpgrades();
@ -78,12 +72,7 @@ public abstract class PatternProviderScreenCompatMixin<C extends PatternProvider
} catch (Exception e) {
Logger.EAP$LOGGER.error("获取兼容升级列表失败", e);
}
return list;
}
// 构造函数Mixin要求
public PatternProviderScreenCompatMixin(C menu, Inventory playerInventory, Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
}
}

View File

@ -28,7 +28,7 @@ public class InterfaceLogicUpgradesMixin {
private IUpgradeInventory upgrades;
@Shadow
protected void onUpgradesChanged() {}
private void onUpgradesChanged() {}
/**
* 在InterfaceLogic构造函数末尾注入增加升级槽数量