99 lines
3.8 KiB
Java
99 lines
3.8 KiB
Java
package thaumicenergistics.common.container;
|
|
|
|
import net.minecraft.client.gui.GuiGraphics;
|
|
import net.minecraft.network.chat.Component;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.world.entity.player.Inventory;
|
|
import thaumcraft.api.aspects.Aspect;
|
|
import appeng.api.config.RedstoneMode;
|
|
import appeng.api.config.Settings;
|
|
import appeng.client.gui.NumberEntryType;
|
|
import appeng.client.gui.implementations.UpgradeableScreen;
|
|
import appeng.client.gui.style.ScreenStyle;
|
|
import appeng.client.gui.widgets.NumberEntryWidget;
|
|
import appeng.client.gui.widgets.ServerSettingToggleButton;
|
|
import appeng.client.gui.widgets.SettingToggleButton;
|
|
import thaumicenergistics.ThaumicEnergistics;
|
|
|
|
/**
|
|
* 源质发信器 Screen — 与 AE2 原版 StorageLevelEmitterScreen 逻辑一致。
|
|
*/
|
|
public class GuiEssentiaLevelEmitter extends UpgradeableScreen<ContainerEssentiaLevelEmitter> {
|
|
|
|
private static final ResourceLocation ASPECT_SLOT_BG =
|
|
ThaumicEnergistics.id("textures/gui/essentia_terminal.png");
|
|
|
|
private final SettingToggleButton<RedstoneMode> redstoneMode;
|
|
private final NumberEntryWidget level;
|
|
private long lastReportingValue;
|
|
|
|
private static final int ASPECT_SLOT_X = 137;
|
|
private static final int ASPECT_SLOT_Y = 40;
|
|
|
|
public GuiEssentiaLevelEmitter(ContainerEssentiaLevelEmitter menu, Inventory playerInventory,
|
|
Component title, ScreenStyle style) {
|
|
super(menu, playerInventory, title, style);
|
|
|
|
this.redstoneMode = new ServerSettingToggleButton<>(
|
|
Settings.REDSTONE_EMITTER, RedstoneMode.HIGH_SIGNAL);
|
|
this.addToLeftToolbar(this.redstoneMode);
|
|
|
|
this.level = widgets.addNumberEntryWidget("level", NumberEntryType.of(menu.getConfiguredKey()));
|
|
this.level.setTextFieldStyle(style.getWidget("levelInput"));
|
|
this.level.setLongValue(this.menu.reportingValue);
|
|
this.level.setOnChange(this::saveReportingValue);
|
|
this.level.setOnConfirm(this::onClose);
|
|
this.lastReportingValue = this.menu.reportingValue;
|
|
}
|
|
|
|
@Override
|
|
protected void updateBeforeRender() {
|
|
super.updateBeforeRender();
|
|
|
|
// 更新数字输入类型(筛选可能已改变)
|
|
this.level.setType(NumberEntryType.of(menu.getConfiguredKey()));
|
|
this.level.setActive(true);
|
|
|
|
if (this.lastReportingValue != this.menu.reportingValue) {
|
|
this.lastReportingValue = this.menu.reportingValue;
|
|
this.level.setLongValue(this.menu.reportingValue);
|
|
}
|
|
|
|
this.redstoneMode.set(this.menu.getRedStoneMode());
|
|
this.redstoneMode.setVisibility(true);
|
|
}
|
|
|
|
@Override
|
|
public void drawFG(GuiGraphics guiGraphics, int offsetX, int offsetY, int mouseX, int mouseY) {
|
|
super.drawFG(guiGraphics, offsetX, offsetY, mouseX, mouseY);
|
|
|
|
Aspect aspect = this.menu.getTrackedAspect();
|
|
if (aspect != null) {
|
|
guiGraphics.drawString(this.font, aspect.getName(),
|
|
ASPECT_SLOT_X + 20, ASPECT_SLOT_Y + 4, 0xFFFFFF, false);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean mouseClicked(double mouseX, double mouseY, int button) {
|
|
// 右键点击筛选槽清零 reportingValue
|
|
if (isPointInRegion(ASPECT_SLOT_X, ASPECT_SLOT_Y, 16, 16, mouseX, mouseY)) {
|
|
if (button == 1) {
|
|
this.menu.setReportingValue(0);
|
|
return true;
|
|
}
|
|
}
|
|
return super.mouseClicked(mouseX, mouseY, button);
|
|
}
|
|
|
|
private void saveReportingValue() {
|
|
this.level.getLongValue().ifPresent(menu::setReportingValue);
|
|
}
|
|
|
|
private boolean isPointInRegion(int x, int y, int w, int h, double mx, double my) {
|
|
int left = this.leftPos + x;
|
|
int top = this.topPos + y;
|
|
return mx >= left && mx < left + w && my >= top && my < top + h;
|
|
}
|
|
}
|