Add pattern terminal slot toggle functionality
This commit is contained in:
parent
80d281de95
commit
16e0243f28
|
|
@ -0,0 +1,124 @@
|
||||||
|
package com.extendedae_plus.mixin;
|
||||||
|
|
||||||
|
import appeng.client.gui.Icon;
|
||||||
|
import appeng.client.gui.AEBaseScreen;
|
||||||
|
import appeng.client.gui.style.ScreenStyle;
|
||||||
|
import appeng.client.gui.widgets.IconButton;
|
||||||
|
import com.glodblock.github.extendedae.client.gui.GuiExPatternTerminal;
|
||||||
|
import com.glodblock.github.extendedae.client.gui.GuiWirelessExPAT;
|
||||||
|
import com.glodblock.github.extendedae.container.ContainerExPatternTerminal;
|
||||||
|
import net.minecraft.client.gui.components.Tooltip;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Mixin(GuiExPatternTerminal.class)
|
||||||
|
public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<ContainerExPatternTerminal> {
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private IconButton toggleSlotsButton;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private boolean showSlots = true; // 默认显示槽位
|
||||||
|
|
||||||
|
public GuiExPatternTerminalMixin(ContainerExPatternTerminal menu, Inventory playerInventory, Component title, ScreenStyle style) {
|
||||||
|
super(menu, playerInventory, title, style);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "<init>", at = @At("TAIL"), remap = false)
|
||||||
|
private void injectConstructor(ContainerExPatternTerminal menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) {
|
||||||
|
// 创建切换槽位显示的按钮
|
||||||
|
this.toggleSlotsButton = new IconButton((b) -> {
|
||||||
|
System.out.println("ExtendedAE Plus: 按钮被点击,当前showSlots: " + this.showSlots);
|
||||||
|
this.showSlots = !this.showSlots; // 开关状态
|
||||||
|
System.out.println("ExtendedAE Plus: 切换后showSlots: " + this.showSlots);
|
||||||
|
|
||||||
|
// 通过反射调用refreshList方法 - 在GuiExPatternTerminal中
|
||||||
|
try {
|
||||||
|
java.lang.reflect.Method refreshMethod = this.getClass().getDeclaredMethod("refreshList");
|
||||||
|
refreshMethod.setAccessible(true);
|
||||||
|
refreshMethod.invoke(this);
|
||||||
|
System.out.println("ExtendedAE Plus: refreshList调用成功");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("ExtendedAE Plus: 调用refreshList失败: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}) {
|
||||||
|
@Override
|
||||||
|
protected Icon getIcon() {
|
||||||
|
return showSlots ? Icon.PATTERN_ACCESS_HIDE : Icon.PATTERN_ACCESS_SHOW;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 设置按钮提示文本
|
||||||
|
this.toggleSlotsButton.setTooltip(Tooltip.create(Component.translatable("gui.expatternprovider.toggle_slots")));
|
||||||
|
|
||||||
|
// 添加到左侧工具栏
|
||||||
|
this.addToLeftToolbar(this.toggleSlotsButton);
|
||||||
|
|
||||||
|
System.out.println("ExtendedAE Plus: 槽位切换按钮已添加到工具栏,默认显示模式: " + this.showSlots);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "refreshList", at = @At("HEAD"), remap = false)
|
||||||
|
private void onRefreshListStart(CallbackInfo ci) {
|
||||||
|
System.out.println("ExtendedAE Plus: refreshList开始执行 - 显示槽位: " + this.showSlots);
|
||||||
|
|
||||||
|
// 更新按钮图标
|
||||||
|
if (this.toggleSlotsButton != null) {
|
||||||
|
this.toggleSlotsButton.setTooltip(Tooltip.create(Component.translatable(
|
||||||
|
this.showSlots ? "gui.expatternprovider.hide_slots" : "gui.expatternprovider.show_slots"
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "refreshList", at = @At("TAIL"), remap = false)
|
||||||
|
private void onRefreshListEnd(CallbackInfo ci) {
|
||||||
|
System.out.println("ExtendedAE Plus: refreshList结束 - showSlots状态: " + this.showSlots);
|
||||||
|
|
||||||
|
// 在refreshList结束后,根据showSlots状态过滤SlotsRow
|
||||||
|
if (!this.showSlots) {
|
||||||
|
try {
|
||||||
|
// 通过反射访问rows字段 - 在GuiExPatternTerminal中
|
||||||
|
java.lang.reflect.Field rowsField = this.getClass().getDeclaredField("rows");
|
||||||
|
rowsField.setAccessible(true);
|
||||||
|
java.util.ArrayList<?> rows = (java.util.ArrayList<?>) rowsField.get(this);
|
||||||
|
|
||||||
|
System.out.println("ExtendedAE Plus: 找到rows字段,当前行数: " + rows.size());
|
||||||
|
|
||||||
|
// 移除所有SlotsRow,只保留GroupHeaderRow
|
||||||
|
int removedCount = 0;
|
||||||
|
for (int i = rows.size() - 1; i >= 0; i--) {
|
||||||
|
Object row = rows.get(i);
|
||||||
|
String className = row.getClass().getSimpleName();
|
||||||
|
System.out.println("ExtendedAE Plus: 检查行 " + i + ",类型: " + className);
|
||||||
|
if (className.equals("SlotsRow")) {
|
||||||
|
rows.remove(i);
|
||||||
|
removedCount++;
|
||||||
|
System.out.println("ExtendedAE Plus: 移除行 " + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("ExtendedAE Plus: 已隐藏 " + removedCount + " 个槽位行,剩余行数: " + rows.size());
|
||||||
|
|
||||||
|
// 强制刷新滚动条
|
||||||
|
try {
|
||||||
|
java.lang.reflect.Method resetScrollbarMethod = this.getClass().getDeclaredMethod("resetScrollbar");
|
||||||
|
resetScrollbarMethod.setAccessible(true);
|
||||||
|
resetScrollbarMethod.invoke(this);
|
||||||
|
System.out.println("ExtendedAE Plus: 滚动条已重置");
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("ExtendedAE Plus: 重置滚动条失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("ExtendedAE Plus: 访问rows字段失败: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
System.out.println("ExtendedAE Plus: showSlots为true,不隐藏槽位行");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,10 +5,12 @@
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"client": [
|
"client": [
|
||||||
"GuiExPatternProviderMixin",
|
"GuiExPatternProviderMixin",
|
||||||
"SlotGridLayoutMixin"
|
"SlotGridLayoutMixin",
|
||||||
|
"GuiExPatternTerminalMixin"
|
||||||
],
|
],
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"ContainerExPatternProviderMixin"
|
"ContainerExPatternProviderMixin",
|
||||||
|
"ContainerExPatternTerminalMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user