From 6187e6a7bb267a58e5a67420aad120cd6bc9c5b5 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sun, 19 Jul 2020 20:04:08 +0200 Subject: [PATCH] Started refactoring number entry dialogs to use shared code. --- .../implementations/CraftAmountScreen.java | 4 +- .../implementations/LevelEmitterScreen.java | 128 ++---------------- .../implementations/NumberEntryWidget.java | 111 +++++++++++++++ .../gui/implementations/PriorityScreen.java | 2 +- .../appeng/client/gui/widgets/NumberBox.java | 77 +++++++++-- .../LevelEmitterContainer.java | 10 +- .../client/gui/FluidLevelEmitterScreen.java | 2 +- 7 files changed, 200 insertions(+), 134 deletions(-) create mode 100644 src/main/java/appeng/client/gui/implementations/NumberEntryWidget.java diff --git a/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java b/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java index 629b7ac80..0dde00f28 100644 --- a/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java +++ b/src/main/java/appeng/client/gui/implementations/CraftAmountScreen.java @@ -69,7 +69,7 @@ public class CraftAmountScreen extends AEBaseScreen { subGui.addBackButton(this::addButton, 154, 0); this.amountToCraft = new NumberBox(this.font, this.guiLeft + 62, this.guiTop + 57, 59, this.font.FONT_HEIGHT, - Integer.class); + Integer.class, value -> {}); this.amountToCraft.setEnableBackgroundDrawing(false); this.amountToCraft.setMaxStringLength(16); this.amountToCraft.setTextColor(0xFFFFFF); @@ -80,7 +80,7 @@ public class CraftAmountScreen extends AEBaseScreen { private void confirm(Button button) { NetworkHandler.instance() - .sendToServer(new CraftRequestPacket(Integer.parseInt(this.amountToCraft.getText()), hasShiftDown())); + .sendToServer(new CraftRequestPacket((int) this.amountToCraft.getValue(), hasShiftDown())); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/LevelEmitterScreen.java b/src/main/java/appeng/client/gui/implementations/LevelEmitterScreen.java index 78954efce..aa37aac34 100644 --- a/src/main/java/appeng/client/gui/implementations/LevelEmitterScreen.java +++ b/src/main/java/appeng/client/gui/implementations/LevelEmitterScreen.java @@ -18,8 +18,6 @@ package appeng.client.gui.implementations; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; @@ -29,28 +27,16 @@ import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.config.Upgrades; import appeng.api.config.YesNo; -import appeng.client.gui.widgets.NumberBox; import appeng.client.gui.widgets.ServerSettingToggleButton; import appeng.client.gui.widgets.SettingToggleButton; import appeng.container.implementations.LevelEmitterContainer; -import appeng.core.AEConfig; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.ConfigValuePacket; public class LevelEmitterScreen extends UpgradeableScreen { - private NumberBox level; - - private Button plus1; - private Button plus10; - private Button plus100; - private Button plus1000; - private Button minus1; - private Button minus10; - private Button minus100; - private Button minus1000; - + private NumberEntryWidget level; private SettingToggleButton levelMode; private SettingToggleButton craftingMode; @@ -62,16 +48,15 @@ public class LevelEmitterScreen extends UpgradeableScreen public void init() { super.init(); - this.level = new NumberBox(this.font, this.guiLeft + 24, this.guiTop + 43, 79, this.font.FONT_HEIGHT, - Long.class); - this.level.setEnableBackgroundDrawing(false); - this.level.setMaxStringLength(16); - this.level.setTextColor(0xFFFFFF); - this.level.setVisible(true); - this.level.setFocused2(true); + this.level = new NumberEntryWidget(this, 20, 17, 79, this::onLevelChange); + this.level.addButtons(children::add, this::addButton); container.setTextField(this.level); } + private void onLevelChange(long level) { + NetworkHandler.instance().sendToServer(new ConfigValuePacket("LevelEmitter.Value", String.valueOf(level))); + } + @Override protected void addButtons() { this.levelMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.LEVEL_TYPE, @@ -82,29 +67,6 @@ public class LevelEmitterScreen extends UpgradeableScreen FuzzyMode.IGNORE_ALL); this.craftingMode = new ServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_VIA_REDSTONE, YesNo.NO); - - final int a = AEConfig.instance().levelByStackAmounts(0); - final int b = AEConfig.instance().levelByStackAmounts(1); - final int c = AEConfig.instance().levelByStackAmounts(2); - final int d = AEConfig.instance().levelByStackAmounts(3); - - this.addButton(this.plus1 = new Button(this.guiLeft + 20, this.guiTop + 17, 22, 20, "+" + a, btn -> addQty(a))); - this.addButton( - this.plus10 = new Button(this.guiLeft + 48, this.guiTop + 17, 28, 20, "+" + b, btn -> addQty(b))); - this.addButton( - this.plus100 = new Button(this.guiLeft + 82, this.guiTop + 17, 32, 20, "+" + c, btn -> addQty(c))); - this.addButton( - this.plus1000 = new Button(this.guiLeft + 120, this.guiTop + 17, 38, 20, "+" + d, btn -> addQty(d))); - - this.addButton( - this.minus1 = new Button(this.guiLeft + 20, this.guiTop + 59, 22, 20, "-" + a, btn -> addQty(-a))); - this.addButton( - this.minus10 = new Button(this.guiLeft + 48, this.guiTop + 59, 28, 20, "-" + b, btn -> addQty(-b))); - this.addButton( - this.minus100 = new Button(this.guiLeft + 82, this.guiTop + 59, 32, 20, "-" + c, btn -> addQty(-c))); - this.addButton( - this.minus1000 = new Button(this.guiLeft + 120, this.guiTop + 59, 38, 20, "-" + d, btn -> addQty(-d))); - this.addButton(this.levelMode); this.addButton(this.redstoneMode); this.addButton(this.craftingMode); @@ -115,15 +77,7 @@ public class LevelEmitterScreen extends UpgradeableScreen final boolean notCraftingMode = this.bc.getInstalledUpgrades(Upgrades.CRAFTING) == 0; // configure enabled status... - this.level.setEnabled(notCraftingMode); - this.plus1.active = notCraftingMode; - this.plus10.active = notCraftingMode; - this.plus100.active = notCraftingMode; - this.plus1000.active = notCraftingMode; - this.minus1.active = notCraftingMode; - this.minus10.active = notCraftingMode; - this.minus100.active = notCraftingMode; - this.minus1000.active = notCraftingMode; + this.level.setActive(notCraftingMode); this.levelMode.active = notCraftingMode; this.redstoneMode.active = notCraftingMode; @@ -160,70 +114,14 @@ public class LevelEmitterScreen extends UpgradeableScreen return GuiText.LevelEmitter; } - private void addQty(final long i) { - try { - String Out = this.level.getText(); - - boolean Fixed = false; - while (Out.startsWith("0") && Out.length() > 1) { - Out = Out.substring(1); - Fixed = true; - } - - if (Fixed) { - this.level.setText(Out); - } - - if (Out.isEmpty()) { - Out = "0"; - } - - long result = Long.parseLong(Out); - result += i; - if (result < 0) { - result = 0; - } - - this.level.setText(Out = Long.toString(result)); - - NetworkHandler.instance().sendToServer(new ConfigValuePacket("LevelEmitter.Value", Out)); - } catch (final NumberFormatException e) { - // nope.. - this.level.setText("0"); - } - } - @Override public boolean charTyped(char character, int key) { - // Forward entered characters to the number-text-field - return level.charTyped(character, key); + return super.charTyped(character, key); } - @Override - public boolean keyPressed(int keyCode, int scanCode, int p_keyPressed_3_) { - if (!this.checkHotbarKeys(InputMappings.getInputByCode(keyCode, scanCode))) { - if (keyCode == 211 || keyCode == 205 || keyCode == 203 || keyCode == 14) { - String Out = this.level.getText(); - - boolean Fixed = false; - while (Out.startsWith("0") && Out.length() > 1) { - Out = Out.substring(1); - Fixed = true; - } - - if (Fixed) { - this.level.setText(Out); - } - - if (Out.isEmpty()) { - Out = "0"; - } - - NetworkHandler.instance().sendToServer(new ConfigValuePacket("LevelEmitter.Value", Out)); - return true; - } - } - - return super.keyPressed(keyCode, scanCode, p_keyPressed_3_); + public void tick() { + super.tick(); + this.level.tick(); } + } diff --git a/src/main/java/appeng/client/gui/implementations/NumberEntryWidget.java b/src/main/java/appeng/client/gui/implementations/NumberEntryWidget.java new file mode 100644 index 000000000..b113c7102 --- /dev/null +++ b/src/main/java/appeng/client/gui/implementations/NumberEntryWidget.java @@ -0,0 +1,111 @@ +package appeng.client.gui.implementations; + +import appeng.client.gui.AEBaseScreen; +import appeng.client.gui.widgets.NumberBox; +import appeng.core.AEConfig; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.IGuiEventListener; +import net.minecraft.client.gui.widget.button.Button; + +import java.util.function.Consumer; +import java.util.function.LongConsumer; + +/** + * A utility widget that consists of a text-field to enter a number with attached buttons to + * increment/decrement the number in fixed intervals. + */ +public class NumberEntryWidget { + + private final AEBaseScreen parent; + + private final int x; + private final int y; + + private final NumberBox level; + private Button plus1; + private Button plus10; + private Button plus100; + private Button plus1000; + private Button minus1; + private Button minus10; + private Button minus100; + private Button minus1000; + + public NumberEntryWidget(AEBaseScreen parent, int x, int y, int width, LongConsumer changeListener) { + this.parent = parent; + this.x = x; + this.y = y; + + FontRenderer font = parent.getMinecraft().fontRenderer; + this.level = new NumberBox(font, parent.getGuiLeft() + x + 5, parent.getGuiTop() + y + 27, width, font.FONT_HEIGHT, + Long.class, changeListener); + this.level.setEnableBackgroundDrawing(false); + this.level.setMaxStringLength(16); + this.level.setTextColor(0xFFFFFF); + this.level.setVisible(true); + this.level.setFocused2(true); + parent.setFocusedDefault(this.level); + } + + public void setActive(boolean active) { + this.level.setEnabled(active); + this.plus1.active = active; + this.plus10.active = active; + this.plus100.active = active; + this.plus1000.active = active; + this.minus1.active = active; + this.minus10.active = active; + this.minus100.active = active; + this.minus1000.active = active; + } + + public void addButtons(Consumer addChildren, Consumer