删除日志,调整小部分mixin类,去掉没用的Accessor
This commit is contained in:
parent
2e30d48925
commit
be48565e75
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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")) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 导致编译错误
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
@ -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) {};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {}
|
||||||
|
|
|
||||||
|
|
@ -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) {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user