diff --git a/.gitignore b/.gitignore index f9db07c..f33e946 100644 --- a/.gitignore +++ b/.gitignore @@ -86,7 +86,7 @@ classes/ *.zip # Reference source code (should not be tracked) -# ExtendedAE-1.20-1.4.2-forge/ +ExtendedAE-1.20-1.4.2-forge/ GTLCore/ # Gradle wrapper (optional - some prefer to commit this) diff --git a/src/main/java/com/extendedae_plus/mixin/ContainerExPatternTerminalMixin.java b/src/main/java/com/extendedae_plus/mixin/ContainerExPatternTerminalMixin.java new file mode 100644 index 0000000..b22205a --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ContainerExPatternTerminalMixin.java @@ -0,0 +1,32 @@ +package com.extendedae_plus.mixin; + +import appeng.menu.guisync.GuiSync; +import com.glodblock.github.extendedae.container.ContainerExPatternTerminal; +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; + +@Mixin(ContainerExPatternTerminal.class) +public abstract class ContainerExPatternTerminalMixin { + + @GuiSync(11452) + @Unique + public boolean hidePatternSlots = false; + + @Unique + public boolean isHidePatternSlots() { + return this.hidePatternSlots; + } + + @Unique + public void setHidePatternSlots(boolean hide) { + this.hidePatternSlots = hide; + } + + @Unique + public void toggleHidePatternSlots() { + this.hidePatternSlots = !this.hidePatternSlots; + } +} \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/SlotGridLayoutMixin.java b/src/main/java/com/extendedae_plus/mixin/SlotGridLayoutMixin.java new file mode 100644 index 0000000..4d2bb52 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/SlotGridLayoutMixin.java @@ -0,0 +1,38 @@ +package com.extendedae_plus.mixin; + +import appeng.client.gui.layout.SlotGridLayout; +import appeng.client.Point; +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.CallbackInfoReturnable; + +@Mixin(SlotGridLayout.class) +public abstract class SlotGridLayoutMixin { + + @Unique + private static final int SLOTS_PER_PAGE = 36; + + @Inject(method = "getRowBreakPosition", at = @At("HEAD"), cancellable = true, remap = false) + private static void onGetRowBreakPosition(int x, int y, int semanticIdx, int cols, CallbackInfoReturnable cir) { + // 只处理BREAK_AFTER_9COLS布局 + if (cols != 9) { + return; + } + + // 计算当前页码 + int currentPage = semanticIdx / SLOTS_PER_PAGE; + + // 计算在当前页中的位置 + int slotInPage = semanticIdx % SLOTS_PER_PAGE; + int row = slotInPage / 9; // 0-3 + int col = slotInPage % 9; // 0-8 + + // 计算目标位置(始终在前4行) + int targetX = x + col * 18; + int targetY = y + row * 18; + + cir.setReturnValue(new Point(targetX, targetY)); + } +} \ No newline at end of file