From fd7ed5bbf0660e714ff224e4dce42a3488511987 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Sun, 14 Jun 2020 18:00:02 +0200 Subject: [PATCH] GUI Refactoring and consolidation --- .../java/appeng/api/config/ActionItems.java | 2 +- .../appeng/api/config/ItemSubstitution.java | 30 -- .../java/appeng/api/config/SearchBoxMode.java | 13 +- src/api/java/appeng/api/config/Settings.java | 2 - .../gui/implementations/GuiCellWorkbench.java | 60 +-- .../gui/implementations/GuiCondenser.java | 20 +- .../gui/implementations/GuiCraftingTerm.java | 5 +- .../implementations/GuiFormationPlane.java | 15 +- .../client/gui/implementations/GuiIOPort.java | 27 +- .../gui/implementations/GuiInterface.java | 14 +- .../gui/implementations/GuiLevelEmitter.java | 30 +- .../client/gui/implementations/GuiMAC.java | 6 +- .../gui/implementations/GuiMEMonitorable.java | 166 +++---- .../gui/implementations/GuiNetworkStatus.java | 14 +- .../gui/implementations/GuiPatternTerm.java | 16 +- .../gui/implementations/GuiSpatialIOPort.java | 16 +- .../gui/implementations/GuiStorageBus.java | 29 +- .../gui/implementations/GuiUpgradeable.java | 57 +-- .../gui/implementations/GuiWireless.java | 14 +- .../client/gui/widgets/CommonButtons.java | 23 + .../client/gui/widgets/GuiActionButton.java | 115 +++++ .../client/gui/widgets/GuiIconButton.java | 156 +++++++ .../client/gui/widgets/GuiImgButton.java | 407 ------------------ .../widgets/GuiServerSettingToggleButton.java | 49 +++ .../gui/widgets/GuiSettingToggleButton.java | 324 ++++++++++++++ .../ContainerCellWorkbench.java | 3 +- .../ContainerMEMonitorable.java | 2 +- src/main/java/appeng/core/AEConfig.java | 8 +- .../core/sync/packets/PacketConfigButton.java | 2 +- .../client/gui/GuiFluidLevelEmitter.java | 4 +- .../fluids/client/gui/GuiFluidStorageBus.java | 33 +- .../fluids/client/gui/GuiFluidTerminal.java | 55 +-- .../container/ContainerFluidTerminal.java | 4 +- .../fluids/helper/DualityFluidInterface.java | 5 +- .../fluids/parts/PartFluidLevelEmitter.java | 3 +- .../java/appeng/helpers/DualityInterface.java | 3 +- .../tools/powered/ToolWirelessTerminal.java | 1 - .../PartAbstractFormationPlane.java | 3 +- .../parts/automation/PartLevelEmitter.java | 2 +- .../parts/automation/PartUpgradeable.java | 3 +- .../parts/misc/PartSharedStorageBus.java | 3 +- .../appeng/parts/misc/PartStorageBus.java | 3 +- .../parts/reporting/AbstractPartTerminal.java | 3 +- .../tile/crafting/TileMolecularAssembler.java | 2 +- .../appeng/tile/misc/TileCellWorkbench.java | 2 +- .../java/appeng/tile/misc/TileCondenser.java | 5 +- .../java/appeng/tile/misc/TileInscriber.java | 3 +- .../appeng/tile/misc/TileSecurityStation.java | 2 +- .../java/appeng/tile/storage/TileChest.java | 6 +- .../java/appeng/tile/storage/TileIOPort.java | 2 +- src/main/java/appeng/util/EnumCycler.java | 70 +++ .../java/appeng/util/IConfigManagerHost.java | 3 +- src/main/java/appeng/util/Platform.java | 129 ++---- 53 files changed, 1000 insertions(+), 974 deletions(-) delete mode 100644 src/api/java/appeng/api/config/ItemSubstitution.java create mode 100644 src/main/java/appeng/client/gui/widgets/CommonButtons.java create mode 100644 src/main/java/appeng/client/gui/widgets/GuiActionButton.java create mode 100644 src/main/java/appeng/client/gui/widgets/GuiIconButton.java delete mode 100644 src/main/java/appeng/client/gui/widgets/GuiImgButton.java create mode 100644 src/main/java/appeng/client/gui/widgets/GuiServerSettingToggleButton.java create mode 100644 src/main/java/appeng/client/gui/widgets/GuiSettingToggleButton.java create mode 100644 src/main/java/appeng/util/EnumCycler.java diff --git a/src/api/java/appeng/api/config/ActionItems.java b/src/api/java/appeng/api/config/ActionItems.java index 9cb6fbf28..3421abbb7 100644 --- a/src/api/java/appeng/api/config/ActionItems.java +++ b/src/api/java/appeng/api/config/ActionItems.java @@ -26,5 +26,5 @@ package appeng.api.config; public enum ActionItems { - WRENCH, CLOSE, STASH, ENCODE, SUBSTITUTION + WRENCH, CLOSE, STASH, ENCODE, ENABLE_SUBSTITUTION, DISABLE_SUBSTITUTION } \ No newline at end of file diff --git a/src/api/java/appeng/api/config/ItemSubstitution.java b/src/api/java/appeng/api/config/ItemSubstitution.java deleted file mode 100644 index 330dba7da..000000000 --- a/src/api/java/appeng/api/config/ItemSubstitution.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2015 AlgorithmX2 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -package appeng.api.config; - - -public enum ItemSubstitution -{ - ENABLED, DISABLED; -} diff --git a/src/api/java/appeng/api/config/SearchBoxMode.java b/src/api/java/appeng/api/config/SearchBoxMode.java index c6fdd5a3f..05a368ec1 100644 --- a/src/api/java/appeng/api/config/SearchBoxMode.java +++ b/src/api/java/appeng/api/config/SearchBoxMode.java @@ -26,5 +26,16 @@ package appeng.api.config; public enum SearchBoxMode { - AUTOSEARCH, AUTOSEARCH_KEEP, MANUAL_SEARCH, MANUAL_SEARCH_KEEP, JEI_AUTOSEARCH, JEI_AUTOSEARCH_KEEP, JEI_MANUAL_SEARCH, JEI_MANUAL_SEARCH_KEEP + AUTOSEARCH(false), AUTOSEARCH_KEEP(false), MANUAL_SEARCH(false), MANUAL_SEARCH_KEEP(false), JEI_AUTOSEARCH(true), JEI_AUTOSEARCH_KEEP(true), JEI_MANUAL_SEARCH(true), JEI_MANUAL_SEARCH_KEEP(true); + + private final boolean requiresJei; + + SearchBoxMode(boolean requiresJei) { + this.requiresJei = requiresJei; + } + + public boolean isRequiresJei() { + return requiresJei; + } + } diff --git a/src/api/java/appeng/api/config/Settings.java b/src/api/java/appeng/api/config/Settings.java index aa030321a..69c83625d 100644 --- a/src/api/java/appeng/api/config/Settings.java +++ b/src/api/java/appeng/api/config/Settings.java @@ -53,8 +53,6 @@ public enum Settings SEARCH_MODE( EnumSet.allOf( SearchBoxMode.class ) ), - ACTIONS( EnumSet.allOf( ActionItems.class ) ), - IO_DIRECTION( EnumSet.of( RelativeDirection.LEFT, RelativeDirection.RIGHT ) ), BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ), diff --git a/src/main/java/appeng/client/gui/implementations/GuiCellWorkbench.java b/src/main/java/appeng/client/gui/implementations/GuiCellWorkbench.java index 4ca0bc101..eebb36dff 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCellWorkbench.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCellWorkbench.java @@ -19,9 +19,7 @@ package appeng.client.gui.implementations; -import java.io.IOException; - -import net.minecraft.client.gui.widget.button.Button; +import appeng.client.gui.widgets.GuiActionButton; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.client.gui.GuiUtils; @@ -35,20 +33,17 @@ import appeng.api.config.FuzzyMode; import appeng.api.config.Settings; import appeng.api.config.Upgrades; import appeng.api.implementations.items.IUpgradeModule; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiToggleButton; import appeng.container.implementations.ContainerCellWorkbench; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; import appeng.core.sync.packets.PacketValueConfig; -import appeng.util.Platform; public class GuiCellWorkbench extends GuiUpgradeable { - private GuiImgButton clear; - private GuiImgButton partition; private GuiToggleButton copyMode; public GuiCellWorkbench(ContainerCellWorkbench container, PlayerInventory playerInventory, ITextComponent title) { @@ -59,16 +54,11 @@ public class GuiCellWorkbench extends GuiUpgradeable @Override protected void addButtons() { - this.clear = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.ACTIONS, ActionItems.CLOSE, this::actionPerformed ); - this.partition = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH, this::actionPerformed ); - this.copyMode = new GuiToggleButton( this.guiLeft - 18, this.guiTop + 48, 11 * 16 + 5, 12 * 16 + 5, GuiText.CopyMode.getLocal(), GuiText.CopyModeDesc - .getLocal(), this::actionPerformed ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); - - this.addButton( this.fuzzyMode ); - this.addButton( this.partition ); - this.addButton( this.clear ); - this.addButton( this.copyMode ); + this.fuzzyMode = this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 68, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::toggleFuzzyMode ) ); + this.addButton(new GuiActionButton(this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, act1 -> action("Partition"))); + this.addButton(new GuiActionButton(this.guiLeft - 18, this.guiTop + 8, ActionItems.CLOSE, act -> action("Clear"))); + this.copyMode = this.addButton( new GuiToggleButton( this.guiLeft - 18, this.guiTop + 48, 11 * 16 + 5, 12 * 16 + 5, GuiText.CopyMode.getLocal(), GuiText.CopyModeDesc + .getLocal(), act -> action("CopyMode") ) ); } @Override @@ -166,33 +156,13 @@ public class GuiCellWorkbench extends GuiUpgradeable return GuiText.CellWorkbench; } - @Override - protected void actionPerformed( final Button btn ) - { - if( btn == this.copyMode ) - { - NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "CopyMode" ) ); - } - else if( btn == this.partition ) - { - NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Partition" ) ); - } - else if( btn == this.clear ) - { - NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Clear" ) ); - } - else if( btn == this.fuzzyMode ) - { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - - FuzzyMode fz = (FuzzyMode) this.fuzzyMode.getCurrentValue(); - fz = Platform.rotateEnum( fz, backwards, Settings.FUZZY_MODE.getPossibleValues() ); - - NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Fuzzy", fz.name() ) ); - } - else - { - super.actionPerformed( btn ); - } + private void action(String type) { + NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", type ) ); } + + private void toggleFuzzyMode(GuiSettingToggleButton button, boolean backwards) { + FuzzyMode fz = button.getNextValue(backwards); + NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Fuzzy", fz.name() ) ); + } + } diff --git a/src/main/java/appeng/client/gui/implementations/GuiCondenser.java b/src/main/java/appeng/client/gui/implementations/GuiCondenser.java index 9110d0079..81f283510 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCondenser.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCondenser.java @@ -19,6 +19,8 @@ package appeng.client.gui.implementations; +import appeng.api.config.CondenserOutput; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.client.gui.GuiUtils; @@ -26,20 +28,17 @@ import net.minecraft.entity.player.PlayerInventory; import appeng.api.config.Settings; import appeng.client.gui.AEBaseGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiProgressBar; import appeng.client.gui.widgets.GuiProgressBar.Direction; import appeng.container.implementations.ContainerCondenser; import appeng.core.localization.GuiText; -import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; public class GuiCondenser extends AEBaseGui { - private GuiProgressBar pb; - private GuiImgButton mode; + private GuiSettingToggleButton mode; public GuiCondenser(ContainerCondenser container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -51,15 +50,10 @@ public class GuiCondenser extends AEBaseGui { super.init(); - this.pb = new GuiProgressBar( this.container, "guis/condenser.png", 120 + this.guiLeft, 25 + this.guiTop, 178, 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy - .getLocal() ); + this.mode = new GuiServerSettingToggleButton<>( 128 + this.guiLeft, 52 + this.guiTop, Settings.CONDENSER_OUTPUT, this.container.getOutput()); - this.mode = new GuiImgButton( 128 + this.guiLeft, 52 + this.guiTop, Settings.CONDENSER_OUTPUT, this.container.getOutput(), btn -> { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( Settings.CONDENSER_OUTPUT, backwards ) ); - } ); - - this.addButton( this.pb ); + this.addButton(new GuiProgressBar(this.container, "guis/condenser.png", 120 + this.guiLeft, 25 + this.guiTop, 178, 25, 6, 18, Direction.VERTICAL, GuiText.StoredEnergy + .getLocal())); this.addButton( this.mode ); } diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftingTerm.java b/src/main/java/appeng/client/gui/implementations/GuiCraftingTerm.java index f348f30f3..2a2c11323 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftingTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftingTerm.java @@ -19,11 +19,12 @@ package appeng.client.gui.implementations; +import appeng.client.gui.widgets.GuiActionButton; import net.minecraft.entity.player.PlayerInventory; import appeng.api.config.ActionItems; import appeng.api.config.Settings; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.container.implementations.ContainerCraftingTerm; import appeng.container.slot.SlotCraftingMatrix; import appeng.core.localization.GuiText; @@ -63,7 +64,7 @@ public class GuiCraftingTerm extends GuiMEMonitorable public void init() { super.init(); - GuiImgButton clearBtn = this.addButton( new GuiImgButton( this.guiLeft + 92, this.guiTop + this.ySize - 156, Settings.ACTIONS, ActionItems.STASH, btn -> clear() )); + GuiActionButton clearBtn = this.addButton( new GuiActionButton( this.guiLeft + 92, this.guiTop + this.ySize - 156, ActionItems.STASH, btn -> clear() )); clearBtn.setHalfSize( true ); } diff --git a/src/main/java/appeng/client/gui/implementations/GuiFormationPlane.java b/src/main/java/appeng/client/gui/implementations/GuiFormationPlane.java index f5c34d459..23ac13217 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiFormationPlane.java +++ b/src/main/java/appeng/client/gui/implementations/GuiFormationPlane.java @@ -22,13 +22,13 @@ package appeng.client.gui.implementations; import appeng.api.config.FuzzyMode; import appeng.api.config.Settings; import appeng.api.config.YesNo; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiTabButton; import appeng.container.implementations.ContainerFormationPlane; import appeng.container.implementations.ContainerPriority; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import appeng.core.sync.packets.PacketSwitchGuis; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; @@ -37,7 +37,7 @@ import net.minecraft.util.text.ITextComponent; public class GuiFormationPlane extends GuiUpgradeable { - private GuiImgButton placeMode; + private GuiSettingToggleButton placeMode; public GuiFormationPlane(ContainerFormationPlane container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -47,8 +47,8 @@ public class GuiFormationPlane extends GuiUpgradeable @Override protected void addButtons() { - this.placeMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.PLACE_BLOCK, YesNo.YES, btn -> selectNextPlaceMode() ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); + this.placeMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 28, Settings.PLACE_BLOCK, YesNo.YES ); + this.fuzzyMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); this.addButton( new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui() ) ); @@ -83,9 +83,4 @@ public class GuiFormationPlane extends GuiUpgradeable NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) ); } - private void selectNextPlaceMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.placeMode.getSetting(), backwards ) ); - } - } diff --git a/src/main/java/appeng/client/gui/implementations/GuiIOPort.java b/src/main/java/appeng/client/gui/implementations/GuiIOPort.java index 60299a2e2..0835ce6aa 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiIOPort.java +++ b/src/main/java/appeng/client/gui/implementations/GuiIOPort.java @@ -25,11 +25,10 @@ import appeng.api.config.OperationMode; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.definitions.IDefinitions; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.container.implementations.ContainerIOPort; import appeng.core.localization.GuiText; -import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; @@ -37,8 +36,8 @@ import net.minecraft.util.text.ITextComponent; public class GuiIOPort extends GuiUpgradeable { - private GuiImgButton fullMode; - private GuiImgButton operationMode; + private GuiSettingToggleButton fullMode; + private GuiSettingToggleButton operationMode; public GuiIOPort(ContainerIOPort container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -48,13 +47,13 @@ public class GuiIOPort extends GuiUpgradeable @Override protected void addButtons() { - this.redstoneMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE, this::actionPerformed); - this.fullMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.FULLNESS_MODE, FullnessMode.EMPTY, btn -> selectNextFullMode() ); - this.operationMode = new GuiImgButton( this.guiLeft + 80, this.guiTop + 17, Settings.OPERATION_MODE, OperationMode.EMPTY, btn -> selectNextOperationMode() ); + this.fullMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 8, Settings.FULLNESS_MODE, FullnessMode.EMPTY ); + this.operationMode = new GuiServerSettingToggleButton<>( this.guiLeft + 80, this.guiTop + 17, Settings.OPERATION_MODE, OperationMode.EMPTY ); this.addButton( this.operationMode ); - this.addButton( this.redstoneMode ); this.addButton( this.fullMode ); + this.redstoneMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 28, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); + addButton(this.redstoneMode); } @Override @@ -97,14 +96,4 @@ public class GuiIOPort extends GuiUpgradeable return "guis/io_port.png"; } - private void selectNextFullMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.fullMode.getSetting(), backwards ) ); - } - - private void selectNextOperationMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.operationMode.getSetting(), backwards ) ); - } - } diff --git a/src/main/java/appeng/client/gui/implementations/GuiInterface.java b/src/main/java/appeng/client/gui/implementations/GuiInterface.java index 77b15b934..77cc1f35a 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiInterface.java +++ b/src/main/java/appeng/client/gui/implementations/GuiInterface.java @@ -21,7 +21,8 @@ package appeng.client.gui.implementations; import appeng.api.config.Settings; import appeng.api.config.YesNo; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiTabButton; import appeng.client.gui.widgets.GuiToggleButton; import appeng.container.implementations.ContainerInterface; @@ -37,7 +38,7 @@ import net.minecraft.util.text.ITextComponent; public class GuiInterface extends GuiUpgradeable { - private GuiImgButton blockMode; + private GuiSettingToggleButton blockMode; private GuiToggleButton interfaceMode; public GuiInterface(ContainerInterface container, PlayerInventory playerInventory, ITextComponent title) { @@ -50,7 +51,7 @@ public class GuiInterface extends GuiUpgradeable { this.addButton( new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui() ) ); - this.blockMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.BLOCK, YesNo.NO, btn -> selectNextBlockMode() ); + this.blockMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 8, Settings.BLOCK, YesNo.NO ); this.addButton( this.blockMode); this.interfaceMode = new GuiToggleButton( this.guiLeft - 18, this.guiTop + 26, 84, 85, GuiText.InterfaceTerminal @@ -90,13 +91,8 @@ public class GuiInterface extends GuiUpgradeable NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) ); } - private void selectNextBlockMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.blockMode.getSetting(), backwards ) ); - } - private void selectNextInterfaceMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); + final boolean backwards = getMinecraft().mouseHelper.isRightDown(); NetworkHandler.instance().sendToServer( new PacketConfigButton( Settings.INTERFACE_TERMINAL, backwards ) ); } diff --git a/src/main/java/appeng/client/gui/implementations/GuiLevelEmitter.java b/src/main/java/appeng/client/gui/implementations/GuiLevelEmitter.java index 2d38286b8..4995bf1aa 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiLevelEmitter.java +++ b/src/main/java/appeng/client/gui/implementations/GuiLevelEmitter.java @@ -19,8 +19,7 @@ package appeng.client.gui.implementations; -import java.io.IOException; - +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.util.InputMappings; import net.minecraft.util.text.ITextComponent; @@ -33,14 +32,12 @@ 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.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiNumberBox; import appeng.container.implementations.ContainerLevelEmitter; import appeng.core.AEConfig; -import appeng.core.AELog; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import appeng.core.sync.packets.PacketValueConfig; @@ -58,8 +55,8 @@ public class GuiLevelEmitter extends GuiUpgradeable private Button minus100; private Button minus1000; - private GuiImgButton levelMode; - private GuiImgButton craftingMode; + private GuiSettingToggleButton levelMode; + private GuiSettingToggleButton craftingMode; public GuiLevelEmitter(ContainerLevelEmitter container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -82,10 +79,10 @@ public class GuiLevelEmitter extends GuiUpgradeable @Override protected void addButtons() { - this.levelMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL, btn -> selectNextLevelMode() ); - this.redstoneMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL, this::actionPerformed ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); - this.craftingMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_VIA_REDSTONE, YesNo.NO, btn -> selectNextCraftingMode() ); + this.levelMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 8, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL ); + this.redstoneMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 28, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL ); + this.fuzzyMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + this.craftingMode = new GuiServerSettingToggleButton<>( 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 ); @@ -104,7 +101,6 @@ public class GuiLevelEmitter extends GuiUpgradeable this.addButton( this.levelMode ); this.addButton( this.redstoneMode ); - this.addButton( this.fuzzyMode ); this.addButton( this.craftingMode ); } @@ -165,16 +161,6 @@ public class GuiLevelEmitter extends GuiUpgradeable return GuiText.LevelEmitter; } - private void selectNextCraftingMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.craftingMode.getSetting(), backwards ) ); - } - - private void selectNextLevelMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.levelMode.getSetting(), backwards ) ); - } - private void addQty( final long i ) { try diff --git a/src/main/java/appeng/client/gui/implementations/GuiMAC.java b/src/main/java/appeng/client/gui/implementations/GuiMAC.java index 15a6cacdc..053d06409 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiMAC.java +++ b/src/main/java/appeng/client/gui/implementations/GuiMAC.java @@ -19,11 +19,11 @@ package appeng.client.gui.implementations; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import net.minecraft.entity.player.PlayerInventory; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; -import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiProgressBar; import appeng.client.gui.widgets.GuiProgressBar.Direction; import appeng.container.implementations.ContainerMAC; @@ -53,8 +53,8 @@ public class GuiMAC extends GuiUpgradeable @Override protected void addButtons() { - this.redstoneMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE, this::actionPerformed ); - this.addButton( this.redstoneMode ); + this.redstoneMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); + addButton(this.redstoneMode); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java index 2378f5c66..7c6c90622 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java +++ b/src/main/java/appeng/client/gui/implementations/GuiMEMonitorable.java @@ -24,7 +24,7 @@ import java.util.List; import appeng.api.config.*; import appeng.container.implementations.ContainerCraftingStatus; import appeng.integration.abstraction.JEIFacade; -import net.minecraft.client.gui.widget.button.Button; +import appeng.util.Platform; import net.minecraft.client.util.InputMappings; import net.minecraft.inventory.container.Slot; import net.minecraft.util.text.ITextComponent; @@ -41,7 +41,7 @@ import appeng.api.util.IConfigManager; import appeng.api.util.IConfigurableObject; import appeng.client.ActionKey; import appeng.client.gui.AEBaseMEGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiScrollbar; import appeng.client.gui.widgets.GuiTabButton; import appeng.client.gui.widgets.ISortSource; @@ -63,7 +63,6 @@ import appeng.helpers.WirelessTerminalGuiObject; import appeng.parts.reporting.AbstractPartTerminal; import appeng.tile.misc.TileSecurityStation; import appeng.util.IConfigManagerHost; -import appeng.util.Platform; import org.lwjgl.glfw.GLFW; @@ -89,11 +88,9 @@ public class GuiMEMonitorable extends AEBaseME private int rows = 0; private int maxRows = Integer.MAX_VALUE; private int standardSize; - private GuiImgButton ViewBox; - private GuiImgButton SortByBox; - private GuiImgButton SortDirBox; - private GuiImgButton searchBoxSettings; - private GuiImgButton terminalStyleBox; + private GuiSettingToggleButton viewModeToggle; + private GuiSettingToggleButton sortByToggle; + private GuiSettingToggleButton sortDirToggle; private boolean isAutoFocus = false; private int currentMouseX = 0; private int currentMouseY = 0; @@ -165,62 +162,19 @@ public class GuiMEMonitorable extends AEBaseME NetworkHandler.instance().sendToServer( new PacketSwitchGuis(ContainerCraftingStatus.TYPE) ); } - protected void actionPerformed( final Button btn ) - { - if( btn instanceof GuiImgButton ) - { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - - final GuiImgButton iBtn = (GuiImgButton) btn; - if( iBtn.getSetting() != Settings.ACTIONS ) - { - final Enum cv = iBtn.getCurrentValue(); - final Enum next = Platform.rotateEnum( cv, backwards, iBtn.getSetting().getPossibleValues() ); - - if( btn == this.terminalStyleBox ) - { - AEConfig.instance().getConfigManager().putSetting( iBtn.getSetting(), next ); - } - else if( btn == this.searchBoxSettings ) - { - AEConfig.instance().getConfigManager().putSetting( iBtn.getSetting(), next ); - } - else - { - NetworkHandler.instance().sendToServer( new PacketValueConfig( iBtn.getSetting().name(), next.name() ) ); - } - - iBtn.set( next ); - - if( next.getClass() == SearchBoxMode.class || next.getClass() == TerminalStyle.class ) - { - this.reinitalize(); - } - } - } - } - - private void reinitalize() - { - this.buttons.clear(); - this.init(); - } - @Override public void init() { - minecraft.keyboardListener.enableRepeatEvents( true ); + getMinecraft().keyboardListener.enableRepeatEvents( true ); this.maxRows = this.getMaxRows(); - this.perRow = AEConfig.instance() - .getConfigManager() - .getSetting( - Settings.TERMINAL_STYLE ) != TerminalStyle.FULL ? 9 : 9 + ( ( this.width - this.standardSize ) / 18 ); + TerminalStyle terminalStyle = (TerminalStyle) AEConfig.instance().getConfigManager().getSetting(Settings.TERMINAL_STYLE); + this.perRow = terminalStyle != TerminalStyle.FULL ? 9 : 9 + ( ( this.width - this.standardSize ) / 18 ); final int magicNumber = 114 + 1; final int extraSpace = this.height - magicNumber - this.reservedSpace; - this.rows = (int) Math.floor( extraSpace / 18 ); + this.rows = extraSpace / 18; if( this.rows > this.maxRows ) { this.rows = this.maxRows; @@ -240,7 +194,7 @@ public class GuiMEMonitorable extends AEBaseME } } - if( AEConfig.instance().getConfigManager().getSetting( Settings.TERMINAL_STYLE ) != TerminalStyle.FULL ) + if( terminalStyle != TerminalStyle.FULL ) { this.xSize = this.standardSize + ( ( this.perRow - 9 ) * 18 ); } @@ -263,33 +217,27 @@ public class GuiMEMonitorable extends AEBaseME if( this.customSortOrder ) { - this.SortByBox = this.addButton( new GuiImgButton( this.guiLeft - 18, offset, Settings.SORT_BY, this.configSrc.getSetting( Settings.SORT_BY ), this::actionPerformed ) ); + this.sortByToggle = this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.SORT_BY, getSortBy(), Platform::isSortOrderAvailable, this::toggleServerSetting ) ); offset += 20; } if( this.viewCell || this instanceof GuiWirelessTerm ) { - this.ViewBox = this.addButton( new GuiImgButton( this.guiLeft - 18, offset, Settings.VIEW_MODE, this.configSrc.getSetting( Settings.VIEW_MODE ), this::actionPerformed ) ); + this.viewModeToggle = this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.VIEW_MODE, getSortDisplay(), this::toggleServerSetting ) ); offset += 20; } - this.addButton( this.SortDirBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.SORT_DIRECTION, this.configSrc - .getSetting( Settings.SORT_DIRECTION ), this::actionPerformed ) ); + this.addButton( this.sortDirToggle = new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.SORT_DIRECTION, getSortDir(), this::toggleServerSetting ) ); offset += 20; - this.addButton( - this.searchBoxSettings = new GuiImgButton( this.guiLeft - 18, offset, Settings.SEARCH_MODE, AEConfig.instance() - .getConfigManager() - .getSetting( - Settings.SEARCH_MODE ), this::actionPerformed ) ); + SearchBoxMode searchMode = (SearchBoxMode) AEConfig.instance().getConfigManager().getSetting(Settings.SEARCH_MODE); + this.addButton(new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.SEARCH_MODE, searchMode, Platform::isSearchModeAvailable, this::toggleClientSetting)); offset += 20; if( !( this instanceof GuiMEPortableCell ) || this instanceof GuiWirelessTerm ) { - this.addButton( this.terminalStyleBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, AEConfig.instance() - .getConfigManager() - .getSetting( Settings.TERMINAL_STYLE ), this::actionPerformed ) ); + this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, terminalStyle, this::toggleClientSetting) ); } this.searchField = new MEGuiTextField( this.font, this.guiLeft + Math.max( 80, this.offsetX ), this.guiTop + 4, 90, 12 ); @@ -306,11 +254,9 @@ public class GuiMEMonitorable extends AEBaseME this.craftingStatusBtn.setHideEdge( 13 ); } - final Enum searchModeSetting = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE ); - - this.isAutoFocus = SearchBoxMode.AUTOSEARCH == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH == searchModeSetting || SearchBoxMode.AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchModeSetting; - final boolean isKeepFilter = SearchBoxMode.AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.MANUAL_SEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH_KEEP == searchModeSetting; - final boolean isJEIEnabled = SearchBoxMode.JEI_AUTOSEARCH == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH == searchModeSetting; + this.isAutoFocus = SearchBoxMode.AUTOSEARCH == searchMode || SearchBoxMode.JEI_AUTOSEARCH == searchMode || SearchBoxMode.AUTOSEARCH_KEEP == searchMode || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchMode; + final boolean isKeepFilter = SearchBoxMode.AUTOSEARCH_KEEP == searchMode || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchMode || SearchBoxMode.MANUAL_SEARCH_KEEP == searchMode || SearchBoxMode.JEI_MANUAL_SEARCH_KEEP == searchMode; + final boolean isJEIEnabled = SearchBoxMode.JEI_AUTOSEARCH == searchMode || SearchBoxMode.JEI_MANUAL_SEARCH == searchMode; this.searchField.setFocused2( this.isAutoFocus ); @@ -386,7 +332,7 @@ public class GuiMEMonitorable extends AEBaseME public void removed() { super.removed(); - minecraft.keyboardListener.enableRepeatEvents( false ); + getMinecraft().keyboardListener.enableRepeatEvents( false ); memoryText = this.searchField.getText(); } @@ -464,13 +410,12 @@ public class GuiMEMonitorable extends AEBaseME return true; } - final boolean mouseInGui = this.isMouseOver( this.currentMouseX, this.currentMouseY ); - if( this.isAutoFocus && !this.searchField.isFocused() && mouseInGui ) + if( this.isAutoFocus && !this.searchField.isFocused() && isHovered() ) { this.searchField.setFocused2( true ); } - if (this.searchField.charTyped(character, p_charTyped_2_)) { + if (this.searchField.isFocused() && this.searchField.charTyped(character, p_charTyped_2_)) { this.repo.setSearchString( this.searchField.getText() ); this.repo.updateView(); this.setScrollBar(); @@ -486,26 +431,31 @@ public class GuiMEMonitorable extends AEBaseME InputMappings.Input input = InputMappings.getInputByCode(keyCode, scanCode); - if( !this.checkHotbarKeys(input) ) + if( keyCode != GLFW.GLFW_KEY_ESCAPE && !this.checkHotbarKeys(input) ) { if( AppEng.proxy.isActionKey( ActionKey.TOGGLE_FOCUS, input ) ) { this.searchField.setFocused2( !this.searchField.isFocused() ); return true; } - - if( this.searchField.isFocused() && keyCode == GLFW.GLFW_KEY_ENTER ) - { - this.searchField.setFocused2( false ); - return true; + if (!this.searchField.isFocused() && this.isAutoFocus && isHovered()) { + this.searchField.setFocused2(true); } - if( this.searchField.keyPressed( keyCode, scanCode, p_keyPressed_3_ ) ) - { - this.repo.setSearchString( this.searchField.getText() ); - this.repo.updateView(); - this.setScrollBar(); - // tell forge the key event is handled and should not be sent out + if (this.searchField.isFocused()) { + if (keyCode == GLFW.GLFW_KEY_ENTER) { + this.searchField.setFocused2(false); + return true; + } + + if (this.searchField.keyPressed(keyCode, scanCode, p_keyPressed_3_)) { + this.repo.setSearchString(this.searchField.getText()); + this.repo.updateView(); + this.setScrollBar(); + } + + // We need to swallow key presses if the field is focused because typing 'e' would otherwise close + // the screen return true; } } @@ -513,6 +463,10 @@ public class GuiMEMonitorable extends AEBaseME return super.keyPressed(keyCode, scanCode, p_keyPressed_3_); } + private boolean isHovered() { + return isPointInRegion(0, 0, this.xSize, this.ySize, currentMouseX, currentMouseY); + } + @Override public void tick() { @@ -539,21 +493,21 @@ public class GuiMEMonitorable extends AEBaseME } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { - if( this.SortByBox != null ) + if( this.sortByToggle != null ) { - this.SortByBox.set( this.configSrc.getSetting( Settings.SORT_BY ) ); + this.sortByToggle.set( getSortBy() ); } - if( this.SortDirBox != null ) + if( this.sortDirToggle != null ) { - this.SortDirBox.set( this.configSrc.getSetting( Settings.SORT_DIRECTION ) ); + this.sortDirToggle.set( getSortDir() ); } - if( this.ViewBox != null ) + if( this.viewModeToggle != null ) { - this.ViewBox.set( this.configSrc.getSetting( Settings.VIEW_MODE ) ); + this.viewModeToggle.set( getSortDisplay() ); } this.repo.updateView(); @@ -588,4 +542,24 @@ public class GuiMEMonitorable extends AEBaseME { this.standardSize = standardSize; } + + private > void toggleClientSetting(GuiSettingToggleButton btn, boolean backwards) { + S next = btn.getNextValue(backwards); + AEConfig.instance().getConfigManager().putSetting( btn.getSetting(), next ); + btn.set( next ); + this.reinitalize(); + } + + private > void toggleServerSetting(GuiSettingToggleButton btn, boolean backwards) { + S next = btn.getNextValue(backwards); + NetworkHandler.instance().sendToServer( new PacketValueConfig( btn.getSetting().name(), next.name() ) ); + btn.set( next ); + } + + private void reinitalize() + { + this.buttons.clear(); + this.init(); + } + } diff --git a/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java b/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java index d129a15e9..28e793f2c 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java +++ b/src/main/java/appeng/client/gui/implementations/GuiNetworkStatus.java @@ -19,19 +19,17 @@ package appeng.client.gui.implementations; -import appeng.api.config.Settings; import appeng.api.config.SortDir; import appeng.api.config.SortOrder; import appeng.api.config.ViewItems; import appeng.api.storage.data.IAEItemStack; import appeng.client.gui.AEBaseGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.CommonButtons; import appeng.client.gui.widgets.GuiScrollbar; import appeng.client.gui.widgets.ISortSource; import appeng.client.me.ItemRepo; import appeng.client.me.SlotME; import appeng.container.implementations.ContainerNetworkStatus; -import appeng.core.AEConfig; import appeng.core.localization.GuiText; import appeng.util.Platform; import com.mojang.blaze3d.systems.RenderSystem; @@ -49,7 +47,6 @@ public class GuiNetworkStatus extends AEBaseGui implemen private final ItemRepo repo; private final int rows = 4; - private GuiImgButton units; private int tooltip = -1; public GuiNetworkStatus(ContainerNetworkStatus container, PlayerInventory playerInventory, ITextComponent title) { @@ -68,14 +65,7 @@ public class GuiNetworkStatus extends AEBaseGui implemen { super.init(); - this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit(), btn -> selectNextUnit() ); - this.addButton( this.units ); - } - - private void selectNextUnit() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - AEConfig.instance().nextPowerUnit( backwards ); - this.units.set( AEConfig.instance().selectedPowerUnit() ); + this.addButton( CommonButtons.togglePowerUnit( this.guiLeft - 18, this.guiTop + 8 ) ); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java index 0330f0163..2f6e413ed 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiPatternTerm.java @@ -20,9 +20,9 @@ package appeng.client.gui.implementations; import appeng.api.config.ActionItems; -import appeng.api.config.ItemSubstitution; import appeng.api.config.Settings; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiActionButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiTabButton; import appeng.container.implementations.ContainerPatternTerm; import appeng.container.slot.AppEngSlot; @@ -49,8 +49,8 @@ public class GuiPatternTerm extends GuiMEMonitorable private GuiTabButton tabCraftButton; private GuiTabButton tabProcessButton; - private GuiImgButton substitutionsEnabledBtn; - private GuiImgButton substitutionsDisabledBtn; + private GuiActionButton substitutionsEnabledBtn; + private GuiActionButton substitutionsDisabledBtn; public GuiPatternTerm(ContainerPatternTerm container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -70,19 +70,19 @@ public class GuiPatternTerm extends GuiMEMonitorable .getLocal(), this.itemRenderer, btn -> toggleCraftMode(CRAFTMODE_CRFTING) ); this.addButton( this.tabProcessButton ); - this.substitutionsEnabledBtn = new GuiImgButton( this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.ENABLED, btn -> toggleSubstitutions(SUBSITUTION_DISABLE) ); + this.substitutionsEnabledBtn = new GuiActionButton( this.guiLeft + 84, this.guiTop + this.ySize - 163, ActionItems.ENABLE_SUBSTITUTION, act -> toggleSubstitutions(SUBSITUTION_DISABLE) ); this.substitutionsEnabledBtn.setHalfSize( true ); this.addButton( this.substitutionsEnabledBtn ); - this.substitutionsDisabledBtn = new GuiImgButton( this.guiLeft + 84, this.guiTop + this.ySize - 163, Settings.ACTIONS, ItemSubstitution.DISABLED, btn -> toggleSubstitutions(SUBSITUTION_ENABLE) ); + this.substitutionsDisabledBtn = new GuiActionButton( this.guiLeft + 84, this.guiTop + this.ySize - 163, ActionItems.DISABLE_SUBSTITUTION, act -> toggleSubstitutions(SUBSITUTION_ENABLE) ); this.substitutionsDisabledBtn.setHalfSize( true ); this.addButton( this.substitutionsDisabledBtn ); - GuiImgButton clearBtn = new GuiImgButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, Settings.ACTIONS, ActionItems.CLOSE, btn -> clear()); + GuiActionButton clearBtn = new GuiActionButton(this.guiLeft + 74, this.guiTop + this.ySize - 163, ActionItems.CLOSE, act -> clear()); clearBtn.setHalfSize( true ); this.addButton(clearBtn); - GuiImgButton encodeBtn = new GuiImgButton(this.guiLeft + 147, this.guiTop + this.ySize - 142, Settings.ACTIONS, ActionItems.ENCODE, btn -> encode()); + GuiActionButton encodeBtn = new GuiActionButton(this.guiLeft + 147, this.guiTop + this.ySize - 142, ActionItems.ENCODE, act -> encode()); this.addButton(encodeBtn); } diff --git a/src/main/java/appeng/client/gui/implementations/GuiSpatialIOPort.java b/src/main/java/appeng/client/gui/implementations/GuiSpatialIOPort.java index bf9553d64..72a4242a7 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiSpatialIOPort.java +++ b/src/main/java/appeng/client/gui/implementations/GuiSpatialIOPort.java @@ -19,11 +19,9 @@ package appeng.client.gui.implementations; -import appeng.api.config.Settings; import appeng.client.gui.AEBaseGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.CommonButtons; import appeng.container.implementations.ContainerSpatialIOPort; -import appeng.core.AEConfig; import appeng.core.localization.GuiText; import appeng.util.Platform; import net.minecraft.entity.player.PlayerInventory; @@ -34,8 +32,6 @@ import net.minecraftforge.fml.client.gui.GuiUtils; public class GuiSpatialIOPort extends AEBaseGui { - private GuiImgButton units; - public GuiSpatialIOPort(ContainerSpatialIOPort container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); this.ySize = 199; @@ -45,15 +41,7 @@ public class GuiSpatialIOPort extends AEBaseGui public void init() { super.init(); - - this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit(), btn -> selectNextUnit() ); - this.addButton( this.units ); - } - - private void selectNextUnit() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - AEConfig.instance().nextPowerUnit( backwards ); - this.units.set( AEConfig.instance().selectedPowerUnit() ); + this.addButton( CommonButtons.togglePowerUnit( this.guiLeft - 18, this.guiTop + 8 ) ); } @Override diff --git a/src/main/java/appeng/client/gui/implementations/GuiStorageBus.java b/src/main/java/appeng/client/gui/implementations/GuiStorageBus.java index ebe2251de..b26d3b8a9 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiStorageBus.java +++ b/src/main/java/appeng/client/gui/implementations/GuiStorageBus.java @@ -20,13 +20,14 @@ package appeng.client.gui.implementations; import appeng.api.config.*; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiActionButton; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiTabButton; import appeng.container.implementations.ContainerPriority; import appeng.container.implementations.ContainerStorageBus; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import appeng.core.sync.packets.PacketSwitchGuis; import appeng.core.sync.packets.PacketValueConfig; import net.minecraft.entity.player.PlayerInventory; @@ -36,8 +37,8 @@ import net.minecraft.util.text.ITextComponent; public class GuiStorageBus extends GuiUpgradeable { - private GuiImgButton rwMode; - private GuiImgButton storageFilter; + private GuiSettingToggleButton rwMode; + private GuiSettingToggleButton storageFilter; public GuiStorageBus(ContainerStorageBus container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -47,11 +48,11 @@ public class GuiStorageBus extends GuiUpgradeable @Override protected void addButtons() { - addButton( new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.ACTIONS, ActionItems.CLOSE, btn -> clear() ) ); - addButton( new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH, btn -> partition() ) ); - this.rwMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, AccessRestriction.READ_WRITE, btn -> toggleReadWriteMode() ); - this.storageFilter = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY, btn -> toggleStorageFilterMode() ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); + addButton( new GuiActionButton( this.guiLeft - 18, this.guiTop + 8, ActionItems.CLOSE, btn -> clear() ) ); + addButton( new GuiActionButton( this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, btn -> partition() ) ); + this.rwMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, AccessRestriction.READ_WRITE ); + this.storageFilter = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY ); + this.fuzzyMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); this.addButton( new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui() ) ); @@ -100,14 +101,4 @@ public class GuiStorageBus extends GuiUpgradeable NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) ); } - private void toggleReadWriteMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.rwMode.getSetting(), backwards ) ); - } - - private void toggleStorageFilterMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.storageFilter.getSetting(), backwards ) ); - } - } diff --git a/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java b/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java index cc277acde..c15d7ad4d 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java +++ b/src/main/java/appeng/client/gui/implementations/GuiUpgradeable.java @@ -19,7 +19,7 @@ package appeng.client.gui.implementations; -import net.minecraft.client.gui.widget.button.Button; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import net.minecraft.entity.player.PlayerInventory; import appeng.api.config.FuzzyMode; @@ -30,11 +30,9 @@ import appeng.api.config.Upgrades; import appeng.api.config.YesNo; import appeng.api.implementations.IUpgradeableHost; import appeng.client.gui.AEBaseGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.container.implementations.ContainerUpgradeable; import appeng.core.localization.GuiText; -import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import appeng.parts.automation.PartExportBus; import appeng.parts.automation.PartImportBus; import net.minecraft.util.text.ITextComponent; @@ -47,10 +45,10 @@ public class GuiUpgradeable extends AEBaseGui protected final ContainerUpgradeable cvb; protected final IUpgradeableHost bc; - protected GuiImgButton redstoneMode; - protected GuiImgButton fuzzyMode; - protected GuiImgButton craftMode; - protected GuiImgButton schedulingMode; + protected GuiSettingToggleButton redstoneMode; + protected GuiSettingToggleButton fuzzyMode; + protected GuiSettingToggleButton craftMode; + protected GuiSettingToggleButton schedulingMode; public GuiUpgradeable(T container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -75,15 +73,14 @@ public class GuiUpgradeable extends AEBaseGui protected void addButtons() { - this.redstoneMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE, this::actionPerformed ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); - this.craftMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_ONLY, YesNo.NO, this::actionPerformed ); - this.schedulingMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT, this::actionPerformed ); - - this.addButton( this.craftMode ); - this.addButton( this.redstoneMode ); - this.addButton( this.fuzzyMode ); - this.addButton( this.schedulingMode ); + this.redstoneMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 8, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE ); + addButton(this.redstoneMode); + this.fuzzyMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 28, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); + addButton(this.fuzzyMode); + this.craftMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_ONLY, YesNo.NO ); + addButton(this.craftMode); + this.schedulingMode = new GuiServerSettingToggleButton<>(this.guiLeft - 18, this.guiTop + 68, Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT ); + addButton(this.schedulingMode); } @Override @@ -165,30 +162,4 @@ public class GuiUpgradeable extends AEBaseGui return this.bc instanceof PartImportBus ? GuiText.ImportBus : GuiText.ExportBus; } - // FIXME: replace with individual methods - protected void actionPerformed( final Button btn ) - { - // Detect right-clicks - final boolean backwards = minecraft.mouseHelper.isRightDown(); - - if( btn == this.redstoneMode ) - { - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.redstoneMode.getSetting(), backwards ) ); - } - - if( btn == this.craftMode ) - { - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.craftMode.getSetting(), backwards ) ); - } - - if( btn == this.fuzzyMode ) - { - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.fuzzyMode.getSetting(), backwards ) ); - } - - if( btn == this.schedulingMode ) - { - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.schedulingMode.getSetting(), backwards ) ); - } - } } diff --git a/src/main/java/appeng/client/gui/implementations/GuiWireless.java b/src/main/java/appeng/client/gui/implementations/GuiWireless.java index 5c9656cfe..c5762c0bc 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiWireless.java +++ b/src/main/java/appeng/client/gui/implementations/GuiWireless.java @@ -21,7 +21,8 @@ package appeng.client.gui.implementations; import appeng.api.config.Settings; import appeng.client.gui.AEBaseGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.CommonButtons; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.container.implementations.ContainerWireless; import appeng.core.AEConfig; import appeng.core.localization.GuiText; @@ -34,8 +35,6 @@ import net.minecraftforge.fml.client.gui.GuiUtils; public class GuiWireless extends AEBaseGui { - private GuiImgButton units; - public GuiWireless(ContainerWireless container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); this.ySize = 166; @@ -46,14 +45,7 @@ public class GuiWireless extends AEBaseGui { super.init(); - this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit(), btn -> toggleUnits() ); - this.addButton( this.units ); - } - - private void toggleUnits() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - AEConfig.instance().nextPowerUnit( backwards ); - this.units.set( AEConfig.instance().selectedPowerUnit() ); + this.addButton( CommonButtons.togglePowerUnit( this.guiLeft - 18, this.guiTop + 8 ) ); } @Override diff --git a/src/main/java/appeng/client/gui/widgets/CommonButtons.java b/src/main/java/appeng/client/gui/widgets/CommonButtons.java new file mode 100644 index 000000000..e1a2ccef8 --- /dev/null +++ b/src/main/java/appeng/client/gui/widgets/CommonButtons.java @@ -0,0 +1,23 @@ +package appeng.client.gui.widgets; + +import appeng.api.config.FuzzyMode; +import appeng.api.config.PowerUnits; +import appeng.api.config.RedstoneMode; +import appeng.api.config.Settings; +import appeng.core.AEConfig; + +public final class CommonButtons { + + private CommonButtons() { + } + + public static GuiSettingToggleButton togglePowerUnit(int x, int y) { + return new GuiSettingToggleButton<>( x, y, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit(), CommonButtons::togglePowerUnit ); + } + + private static void togglePowerUnit(GuiSettingToggleButton button, boolean backwards) { + AEConfig.instance().nextPowerUnit( backwards ); + button.set( AEConfig.instance().selectedPowerUnit() ); + } + +} diff --git a/src/main/java/appeng/client/gui/widgets/GuiActionButton.java b/src/main/java/appeng/client/gui/widgets/GuiActionButton.java new file mode 100644 index 000000000..919a855fb --- /dev/null +++ b/src/main/java/appeng/client/gui/widgets/GuiActionButton.java @@ -0,0 +1,115 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.client.gui.widgets; + + +import appeng.api.config.*; +import appeng.core.localization.ButtonToolTips; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.client.gui.GuiUtils; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import java.util.regex.Pattern; + + +public class GuiActionButton extends GuiIconButton implements ITooltip +{ + private static final Pattern PATTERN_NEW_LINE = Pattern.compile( "\\n", Pattern.LITERAL ); + private final int iconIndex; + + public GuiActionButton(final int x, final int y, final ActionItems action, Consumer onPress ) + { + super( x, y, btn -> onPress.accept(action) ); + + ButtonToolTips displayName; + ButtonToolTips displayValue; + switch (action) { + case WRENCH: + iconIndex = 66; + displayName = ButtonToolTips.PartitionStorage; + displayValue = ButtonToolTips.PartitionStorageHint; + break; + case CLOSE: + iconIndex = 6; + displayName = ButtonToolTips.Clear; + displayValue = ButtonToolTips.ClearSettings; + break; + case STASH: + iconIndex = 6; + displayName = ButtonToolTips.Stash; + displayValue = ButtonToolTips.StashDesc; + break; + case ENCODE: + iconIndex = 8; + displayName = ButtonToolTips.Encode; + displayValue = ButtonToolTips.EncodeDescription; + break; + case ENABLE_SUBSTITUTION: + iconIndex = 4 + 3 * 16; + displayName = ButtonToolTips.Substitutions; + displayValue = ButtonToolTips.SubstitutionsDescEnabled; + break; + case DISABLE_SUBSTITUTION: + iconIndex = 7 + 3 * 16; + displayName = ButtonToolTips.Substitutions; + displayValue = ButtonToolTips.SubstitutionsDescDisabled; + break; + default: + throw new IllegalArgumentException("Unknown ActionItem: " + action); + } + + setMessage(buildMessage(displayName, displayValue)); + } + + @Override + protected int getIconIndex() + { + return iconIndex; + } + + private String buildMessage(ButtonToolTips displayName, ButtonToolTips displayValue) + { + String name = displayName.getTranslationKey().getString(); + String value = displayValue.getTranslationKey().getString(); + + value = PATTERN_NEW_LINE.matcher( value ).replaceAll( "\n" ); + final StringBuilder sb = new StringBuilder( value ); + + int i = sb.lastIndexOf( "\n" ); + if( i <= 0 ) + { + i = 0; + } + while( i + 30 < sb.length() && ( i = sb.lastIndexOf( " ", i + 30 ) ) != -1 ) + { + sb.replace( i, i + 1, "\n" ); + } + + return name + '\n' + sb; + } + +} diff --git a/src/main/java/appeng/client/gui/widgets/GuiIconButton.java b/src/main/java/appeng/client/gui/widgets/GuiIconButton.java new file mode 100644 index 000000000..2de1ab6bc --- /dev/null +++ b/src/main/java/appeng/client/gui/widgets/GuiIconButton.java @@ -0,0 +1,156 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.client.gui.widgets; + + +import appeng.api.config.*; +import appeng.core.localization.ButtonToolTips; +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.ITextComponent; +import net.minecraftforge.fml.client.gui.GuiUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + + +public abstract class GuiIconButton extends Button implements ITooltip +{ + public static final ResourceLocation TEXTURE_STATES = new ResourceLocation("appliedenergistics2", "textures/guis/states.png"); + + private boolean halfSize = false; + + public GuiIconButton(final int x, final int y, IPressable onPress ) + { + super( x, y, 16, 16, "", onPress ); + } + + public void setVisibility( final boolean vis ) + { + this.visible = vis; + this.active = vis; + } + + @Override + public void renderButton(final int mouseX, final int mouseY, float partial) { + + Minecraft minecraft = Minecraft.getInstance(); + + if( this.visible ) + { + final int iconIndex = this.getIconIndex(); + + TextureManager textureManager = minecraft.getTextureManager(); + textureManager.bindTexture(TEXTURE_STATES); + RenderSystem.disableDepthTest(); + RenderSystem.enableBlend(); // FIXME: This should be the _default_ state, but some vanilla widget disables it :| + if( this.halfSize ) + { + this.width = 8; + this.height = 8; + + RenderSystem.pushMatrix(); + RenderSystem.translatef( this.x, this.y, 0.0F ); + RenderSystem.scalef( 0.5f, 0.5f, 0.5f ); + + if( this.active ) + { + RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + else + { + RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f ); + } + + final int uv_y = (int) Math.floor( iconIndex / 16.0f ); + final int uv_x = iconIndex - uv_y * 16; + + GuiUtils.drawTexturedModalRect( 0, 0, 256 - 16, 256 - 16, 16, 16, 0 ); + GuiUtils.drawTexturedModalRect( 0, 0, uv_x * 16, uv_y * 16, 16, 16, 0 ); + RenderSystem.popMatrix(); + } + else + { + if( this.active ) + { + RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + else + { + RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f ); + } + + final int uv_y = iconIndex / 16; + final int uv_x = iconIndex - uv_y * 16; + + GuiUtils.drawTexturedModalRect( this.x, this.y, 256 - 16, 256 - 16, 16, 16, 0 ); + GuiUtils.drawTexturedModalRect( this.x, this.y, uv_x * 16, uv_y * 16, 16, 16, 0 ); + } + RenderSystem.enableDepthTest(); + } + RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); + } + + protected abstract int getIconIndex(); + + @Override + public int xPos() + { + return this.x; + } + + @Override + public int yPos() + { + return this.y; + } + + @Override + public int getWidth() + { + return this.halfSize ? 8 : 16; + } + + @Override + public int getHeight() + { + return this.halfSize ? 8 : 16; + } + + @Override + public boolean isVisible() + { + return this.visible; + } + + public boolean isHalfSize() + { + return this.halfSize; + } + + public void setHalfSize( final boolean halfSize ) + { + this.halfSize = halfSize; + } + +} diff --git a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java b/src/main/java/appeng/client/gui/widgets/GuiImgButton.java deleted file mode 100644 index 5b0df1f97..000000000 --- a/src/main/java/appeng/client/gui/widgets/GuiImgButton.java +++ /dev/null @@ -1,407 +0,0 @@ -/* - * This file is part of Applied Energistics 2. - * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. - * - * Applied Energistics 2 is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Applied Energistics 2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Applied Energistics 2. If not, see . - */ - -package appeng.client.gui.widgets; - - -import appeng.api.config.*; -import appeng.core.localization.ButtonToolTips; -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.text.ITextComponent; -import net.minecraftforge.fml.client.gui.GuiUtils; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; - - -public class GuiImgButton extends Button implements ITooltip -{ - private static final Pattern COMPILE = Pattern.compile( "%s" ); - private static final Pattern PATTERN_NEW_LINE = Pattern.compile( "\\n", Pattern.LITERAL ); - public static final ResourceLocation TEXTURE_STATES = new ResourceLocation("appliedenergistics2", "textures/guis/states.png"); - private static Map appearances; - private final Enum buttonSetting; - private boolean halfSize = false; - private String fillVar; - private Enum currentValue; - - public GuiImgButton( final int x, final int y, final Enum idx, final Enum val, IPressable onPress ) - { - super( x, y, 16, 16, "", onPress ); - - this.buttonSetting = idx; - this.currentValue = val; - - if( appearances == null ) - { - appearances = new HashMap<>(); - this.registerApp( 16 * 7, Settings.CONDENSER_OUTPUT, CondenserOutput.TRASH, ButtonToolTips.CondenserOutput, ButtonToolTips.Trash ); - this.registerApp( 16 * 7 + 1, Settings.CONDENSER_OUTPUT, CondenserOutput.MATTER_BALLS, ButtonToolTips.CondenserOutput, ButtonToolTips.MatterBalls ); - this.registerApp( 16 * 7 + 2, Settings.CONDENSER_OUTPUT, CondenserOutput.SINGULARITY, ButtonToolTips.CondenserOutput, ButtonToolTips.Singularity ); - - this.registerApp( 16 * 9 + 1, Settings.ACCESS, AccessRestriction.READ, ButtonToolTips.IOMode, ButtonToolTips.Read ); - this.registerApp( 16 * 9, Settings.ACCESS, AccessRestriction.WRITE, ButtonToolTips.IOMode, ButtonToolTips.Write ); - this.registerApp( 16 * 9 + 2, Settings.ACCESS, AccessRestriction.READ_WRITE, ButtonToolTips.IOMode, ButtonToolTips.ReadWrite ); - - this.registerApp( 16 * 10, Settings.POWER_UNITS, PowerUnits.AE, ButtonToolTips.PowerUnits, PowerUnits.AE.textComponent() ); - this.registerApp( 16 * 10 + 1, Settings.POWER_UNITS, PowerUnits.EU, ButtonToolTips.PowerUnits, PowerUnits.EU.textComponent() ); - this.registerApp( 16 * 10 + 4, Settings.POWER_UNITS, PowerUnits.RF, ButtonToolTips.PowerUnits, PowerUnits.RF.textComponent() ); - - this.registerApp( 3, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE, ButtonToolTips.RedstoneMode, ButtonToolTips.AlwaysActive ); - this.registerApp( 0, Settings.REDSTONE_CONTROLLED, RedstoneMode.LOW_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveWithoutSignal ); - this.registerApp( 1, Settings.REDSTONE_CONTROLLED, RedstoneMode.HIGH_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveWithSignal ); - this.registerApp( 2, Settings.REDSTONE_CONTROLLED, RedstoneMode.SIGNAL_PULSE, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveOnPulse ); - - this.registerApp( 0, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.EmitLevelsBelow ); - this.registerApp( 1, Settings.REDSTONE_EMITTER, RedstoneMode.HIGH_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.EmitLevelAbove ); - - this.registerApp( 51, Settings.OPERATION_MODE, OperationMode.FILL, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToStorageCell ); - this.registerApp( 50, Settings.OPERATION_MODE, OperationMode.EMPTY, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToNetwork ); - - this.registerApp( 51, Settings.IO_DIRECTION, RelativeDirection.LEFT, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToStorageCell ); - this.registerApp( 50, Settings.IO_DIRECTION, RelativeDirection.RIGHT, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToNetwork ); - - this.registerApp( 48, Settings.SORT_DIRECTION, SortDir.ASCENDING, ButtonToolTips.SortOrder, ButtonToolTips.ToggleSortDirection ); - this.registerApp( 49, Settings.SORT_DIRECTION, SortDir.DESCENDING, ButtonToolTips.SortOrder, ButtonToolTips.ToggleSortDirection ); - - this.registerApp( 16 * 2 + 3, Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_Auto ); - this.registerApp( 16 * 2 + 4, Settings.SEARCH_MODE, SearchBoxMode.MANUAL_SEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_Standard ); - this.registerApp( 16 * 2 + 5, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_JEIAuto ); - this.registerApp( 16 * 2 + 6, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH, ButtonToolTips.SearchMode, - ButtonToolTips.SearchMode_JEIStandard ); - this.registerApp( 16 * 2 + 7, Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH_KEEP, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_AutoKeep ); - this.registerApp( 16 * 2 + 8, Settings.SEARCH_MODE, SearchBoxMode.MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode, - ButtonToolTips.SearchMode_StandardKeep ); - this.registerApp( 16 * 2 + 9, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH_KEEP, ButtonToolTips.SearchMode, - ButtonToolTips.SearchMode_JEIAutoKeep ); - this.registerApp( 16 * 2 + 10, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode, - ButtonToolTips.SearchMode_JEIStandardKeep ); - - this.registerApp( 16 * 5 + 3, Settings.LEVEL_TYPE, LevelType.ENERGY_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Energy ); - this.registerApp( 16 * 4 + 3, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Item ); - - this.registerApp( 16 * 13, Settings.TERMINAL_STYLE, TerminalStyle.TALL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Tall ); - this.registerApp( 16 * 13 + 1, Settings.TERMINAL_STYLE, TerminalStyle.SMALL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Small ); - this.registerApp( 16 * 13 + 2, Settings.TERMINAL_STYLE, TerminalStyle.FULL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Full ); - - this.registerApp( 64, Settings.SORT_BY, SortOrder.NAME, ButtonToolTips.SortBy, ButtonToolTips.ItemName ); - this.registerApp( 65, Settings.SORT_BY, SortOrder.AMOUNT, ButtonToolTips.SortBy, ButtonToolTips.NumberOfItems ); - this.registerApp( 68, Settings.SORT_BY, SortOrder.INVTWEAKS, ButtonToolTips.SortBy, ButtonToolTips.InventoryTweaks ); - this.registerApp( 69, Settings.SORT_BY, SortOrder.MOD, ButtonToolTips.SortBy, ButtonToolTips.Mod ); - - this.registerApp( 66, Settings.ACTIONS, ActionItems.WRENCH, ButtonToolTips.PartitionStorage, ButtonToolTips.PartitionStorageHint ); - this.registerApp( 6, Settings.ACTIONS, ActionItems.CLOSE, ButtonToolTips.Clear, ButtonToolTips.ClearSettings ); - this.registerApp( 6, Settings.ACTIONS, ActionItems.STASH, ButtonToolTips.Stash, ButtonToolTips.StashDesc ); - - this.registerApp( 8, Settings.ACTIONS, ActionItems.ENCODE, ButtonToolTips.Encode, ButtonToolTips.EncodeDescription ); - this.registerApp( 4 + 3 * 16, Settings.ACTIONS, ItemSubstitution.ENABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescEnabled ); - this.registerApp( 7 + 3 * 16, Settings.ACTIONS, ItemSubstitution.DISABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescDisabled ); - - this.registerApp( 16, Settings.VIEW_MODE, ViewItems.STORED, ButtonToolTips.View, ButtonToolTips.StoredItems ); - this.registerApp( 18, Settings.VIEW_MODE, ViewItems.ALL, ButtonToolTips.View, ButtonToolTips.StoredCraftable ); - this.registerApp( 19, Settings.VIEW_MODE, ViewItems.CRAFTABLE, ButtonToolTips.View, ButtonToolTips.Craftable ); - - this.registerApp( 16 * 6, Settings.FUZZY_MODE, FuzzyMode.PERCENT_25, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_25 ); - this.registerApp( 16 * 6 + 1, Settings.FUZZY_MODE, FuzzyMode.PERCENT_50, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_50 ); - this.registerApp( 16 * 6 + 2, Settings.FUZZY_MODE, FuzzyMode.PERCENT_75, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_75 ); - this.registerApp( 16 * 6 + 3, Settings.FUZZY_MODE, FuzzyMode.PERCENT_99, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_99 ); - this.registerApp( 16 * 6 + 4, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, ButtonToolTips.FuzzyMode, ButtonToolTips.FZIgnoreAll ); - - this.registerApp( 80, Settings.FULLNESS_MODE, FullnessMode.EMPTY, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenEmpty ); - this.registerApp( 81, Settings.FULLNESS_MODE, FullnessMode.HALF, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenWorkIsDone ); - this.registerApp( 82, Settings.FULLNESS_MODE, FullnessMode.FULL, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenFull ); - - this.registerApp( 16 + 5, Settings.BLOCK, YesNo.YES, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.Blocking ); - this.registerApp( 16 + 4, Settings.BLOCK, YesNo.NO, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.NonBlocking ); - - this.registerApp( 16 + 3, Settings.CRAFT_ONLY, YesNo.YES, ButtonToolTips.Craft, ButtonToolTips.CraftOnly ); - this.registerApp( 16 + 2, Settings.CRAFT_ONLY, YesNo.NO, ButtonToolTips.Craft, ButtonToolTips.CraftEither ); - - this.registerApp( 16 * 11 + 2, Settings.CRAFT_VIA_REDSTONE, YesNo.YES, ButtonToolTips.EmitterMode, ButtonToolTips.CraftViaRedstone ); - this.registerApp( 16 * 11 + 1, Settings.CRAFT_VIA_REDSTONE, YesNo.NO, ButtonToolTips.EmitterMode, ButtonToolTips.EmitWhenCrafting ); - - this.registerApp( 16 * 3 + 5, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY, ButtonToolTips.ReportInaccessibleItems, - ButtonToolTips.ReportInaccessibleItemsNo ); - this.registerApp( 16 * 3 + 6, Settings.STORAGE_FILTER, StorageFilter.NONE, ButtonToolTips.ReportInaccessibleItems, - ButtonToolTips.ReportInaccessibleItemsYes ); - - this.registerApp( 16 * 14, Settings.PLACE_BLOCK, YesNo.YES, ButtonToolTips.BlockPlacement, ButtonToolTips.BlockPlacementYes ); - this.registerApp( 16 * 14 + 1, Settings.PLACE_BLOCK, YesNo.NO, ButtonToolTips.BlockPlacement, ButtonToolTips.BlockPlacementNo ); - - this.registerApp( 16 * 15, Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT, ButtonToolTips.SchedulingMode, ButtonToolTips.SchedulingModeDefault ); - this.registerApp( 16 * 15 + 1, Settings.SCHEDULING_MODE, SchedulingMode.ROUNDROBIN, ButtonToolTips.SchedulingMode, - ButtonToolTips.SchedulingModeRoundRobin ); - this.registerApp( 16 * 15 + 2, Settings.SCHEDULING_MODE, SchedulingMode.RANDOM, ButtonToolTips.SchedulingMode, - ButtonToolTips.SchedulingModeRandom ); - } - } - - private void registerApp( final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ITextComponent hint ) - { - final ButtonAppearance a = new ButtonAppearance(); - a.displayName = title.getTranslationKey(); - a.displayValue = hint; - a.index = iconIndex; - appearances.put( new EnumPair( setting, val ), a ); - } - - private void registerApp( final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ButtonToolTips hint ) - { - registerApp(iconIndex, setting, val, title, hint.getTranslationKey()); - } - - public void setVisibility( final boolean vis ) - { - this.visible = vis; - this.active = vis; - } - - @Override - public void renderButton(final int mouseX, final int mouseY, float partial) { - - Minecraft minecraft = Minecraft.getInstance(); - - if( this.visible ) - { - final int iconIndex = this.getIconIndex(); - - TextureManager textureManager = minecraft.getTextureManager(); - textureManager.bindTexture(TEXTURE_STATES); - RenderSystem.disableDepthTest(); - RenderSystem.enableBlend(); // FIXME: This should be the _default_ state, but some vanilla widget disables it :| - if( this.halfSize ) - { - this.width = 8; - this.height = 8; - - RenderSystem.pushMatrix(); - RenderSystem.translatef( this.x, this.y, 0.0F ); - RenderSystem.scalef( 0.5f, 0.5f, 0.5f ); - - if( this.active ) - { - RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); - } - else - { - RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f ); - } - - final int uv_y = (int) Math.floor( iconIndex / 16.0f ); - final int uv_x = iconIndex - uv_y * 16; - - GuiUtils.drawTexturedModalRect( 0, 0, 256 - 16, 256 - 16, 16, 16, 0 ); - GuiUtils.drawTexturedModalRect( 0, 0, uv_x * 16, uv_y * 16, 16, 16, 0 ); - RenderSystem.popMatrix(); - } - else - { - if( this.active ) - { - RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); - } - else - { - RenderSystem.color4f( 0.5f, 0.5f, 0.5f, 1.0f ); - } - - final int uv_y = (int) Math.floor( iconIndex / 16 ); - final int uv_x = iconIndex - uv_y * 16; - - GuiUtils.drawTexturedModalRect( this.x, this.y, 256 - 16, 256 - 16, 16, 16, 0 ); - GuiUtils.drawTexturedModalRect( this.x, this.y, uv_x * 16, uv_y * 16, 16, 16, 0 ); - } - RenderSystem.enableDepthTest(); - } - RenderSystem.color4f( 1.0f, 1.0f, 1.0f, 1.0f ); - } - - private int getIconIndex() - { - if( this.buttonSetting != null && this.currentValue != null ) - { - final ButtonAppearance app = appearances.get( new EnumPair( this.buttonSetting, this.currentValue ) ); - if( app == null ) - { - return 256 - 1; - } - return app.index; - } - return 256 - 1; - } - - public Settings getSetting() - { - return (Settings) this.buttonSetting; - } - - public Enum getCurrentValue() - { - return this.currentValue; - } - - @Override - public String getMessage() - { - ITextComponent displayName = null; - ITextComponent displayValue = null; - - if( this.buttonSetting != null && this.currentValue != null ) - { - final ButtonAppearance buttonAppearance = appearances.get( new EnumPair( this.buttonSetting, this.currentValue ) ); - if( buttonAppearance == null ) - { - return "No Such Message"; - } - - displayName = buttonAppearance.displayName; - displayValue = buttonAppearance.displayValue; - } - - if( displayName != null ) - { - String name = displayName.getString(); - String value = displayValue.getString(); - - if( this.fillVar != null ) - { - value = COMPILE.matcher( value ).replaceFirst( this.fillVar ); - } - - value = PATTERN_NEW_LINE.matcher( value ).replaceAll( "\n" ); - final StringBuilder sb = new StringBuilder( value ); - - int i = sb.lastIndexOf( "\n" ); - if( i <= 0 ) - { - i = 0; - } - while( i + 30 < sb.length() && ( i = sb.lastIndexOf( " ", i + 30 ) ) != -1 ) - { - sb.replace( i, i + 1, "\n" ); - } - - return name + '\n' + sb; - } - return null; - } - - @Override - public int xPos() - { - return this.x; - } - - @Override - public int yPos() - { - return this.y; - } - - @Override - public int getWidth() - { - return this.halfSize ? 8 : 16; - } - - @Override - public int getHeight() - { - return this.halfSize ? 8 : 16; - } - - @Override - public boolean isVisible() - { - return this.visible; - } - - public void set( final Enum e ) - { - if( this.currentValue != e ) - { - this.currentValue = e; - } - } - - public boolean isHalfSize() - { - return this.halfSize; - } - - public void setHalfSize( final boolean halfSize ) - { - this.halfSize = halfSize; - } - - public String getFillVar() - { - return this.fillVar; - } - - public void setFillVar( final String fillVar ) - { - this.fillVar = fillVar; - } - - private static final class EnumPair - { - - final Enum setting; - final Enum value; - - EnumPair( final Enum a, final Enum b ) - { - this.setting = a; - this.value = b; - } - - @Override - public int hashCode() - { - return this.setting.hashCode() ^ this.value.hashCode(); - } - - @Override - public boolean equals( final Object obj ) - { - if( obj == null ) - { - return false; - } - if( this.getClass() != obj.getClass() ) - { - return false; - } - final EnumPair other = (EnumPair) obj; - return other.setting == this.setting && other.value == this.value; - } - } - - private static class ButtonAppearance - { - public int index; - public ITextComponent displayName; - public ITextComponent displayValue; - } -} diff --git a/src/main/java/appeng/client/gui/widgets/GuiServerSettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/GuiServerSettingToggleButton.java new file mode 100644 index 000000000..4a68c7803 --- /dev/null +++ b/src/main/java/appeng/client/gui/widgets/GuiServerSettingToggleButton.java @@ -0,0 +1,49 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.client.gui.widgets; + + +import appeng.api.config.*; +import appeng.core.localization.ButtonToolTips; +import appeng.core.sync.network.NetworkHandler; +import appeng.core.sync.packets.PacketConfigButton; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.util.text.ITextComponent; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +/** + * Convenience button that automatically sends settings changes to the server. + */ +public class GuiServerSettingToggleButton> extends GuiSettingToggleButton +{ + + public GuiServerSettingToggleButton(final int x, final int y, final Settings setting, final T val ) + { + super( x, y, setting, val, GuiServerSettingToggleButton::sendToServer ); + } + + private static > void sendToServer(GuiSettingToggleButton button, boolean backwards) { + NetworkHandler.instance().sendToServer( new PacketConfigButton( button.getSetting(), backwards ) ); + } + +} diff --git a/src/main/java/appeng/client/gui/widgets/GuiSettingToggleButton.java b/src/main/java/appeng/client/gui/widgets/GuiSettingToggleButton.java new file mode 100644 index 000000000..36521d2ab --- /dev/null +++ b/src/main/java/appeng/client/gui/widgets/GuiSettingToggleButton.java @@ -0,0 +1,324 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.client.gui.widgets; + + +import appeng.api.config.*; +import appeng.core.localization.ButtonToolTips; +import appeng.util.EnumCycler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.util.text.ITextComponent; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; +import java.util.regex.Pattern; + + +public class GuiSettingToggleButton> extends GuiIconButton +{ + private static final Pattern COMPILE = Pattern.compile( "%s" ); + private static final Pattern PATTERN_NEW_LINE = Pattern.compile( "\\n", Pattern.LITERAL ); + private static Map appearances; + private final Settings buttonSetting; + private final IHandler> onPress; + private final EnumSet validValues; + private String fillVar; + private T currentValue; + + @FunctionalInterface + public interface IHandler> { + void handle(T button, boolean backwards); + } + + public GuiSettingToggleButton(final int x, final int y, final Settings setting, final T val, IHandler> onPress ) + { + this(x, y, setting, val, t -> true, onPress); + } + + public GuiSettingToggleButton(final int x, final int y, final Settings setting, final T val, Predicate isValidValue, IHandler> onPress ) + { + super( x, y, GuiSettingToggleButton::onPress ); + this.onPress = onPress; + + // Build a list of values (in order) that are valid w.r.t. the given predicate + EnumSet validValues = EnumSet.allOf(val.getDeclaringClass()); + validValues.removeIf(isValidValue.negate()); + this.validValues = validValues; + + this.buttonSetting = setting; + this.currentValue = val; + + if( appearances == null ) + { + appearances = new HashMap<>(); + registerApp( 16 * 7, Settings.CONDENSER_OUTPUT, CondenserOutput.TRASH, ButtonToolTips.CondenserOutput, ButtonToolTips.Trash ); + registerApp( 16 * 7 + 1, Settings.CONDENSER_OUTPUT, CondenserOutput.MATTER_BALLS, ButtonToolTips.CondenserOutput, ButtonToolTips.MatterBalls ); + registerApp( 16 * 7 + 2, Settings.CONDENSER_OUTPUT, CondenserOutput.SINGULARITY, ButtonToolTips.CondenserOutput, ButtonToolTips.Singularity ); + + registerApp( 16 * 9 + 1, Settings.ACCESS, AccessRestriction.READ, ButtonToolTips.IOMode, ButtonToolTips.Read ); + registerApp( 16 * 9, Settings.ACCESS, AccessRestriction.WRITE, ButtonToolTips.IOMode, ButtonToolTips.Write ); + registerApp( 16 * 9 + 2, Settings.ACCESS, AccessRestriction.READ_WRITE, ButtonToolTips.IOMode, ButtonToolTips.ReadWrite ); + + registerApp( 16 * 10, Settings.POWER_UNITS, PowerUnits.AE, ButtonToolTips.PowerUnits, PowerUnits.AE.textComponent() ); + registerApp( 16 * 10 + 1, Settings.POWER_UNITS, PowerUnits.EU, ButtonToolTips.PowerUnits, PowerUnits.EU.textComponent() ); + registerApp( 16 * 10 + 4, Settings.POWER_UNITS, PowerUnits.RF, ButtonToolTips.PowerUnits, PowerUnits.RF.textComponent() ); + + registerApp( 3, Settings.REDSTONE_CONTROLLED, RedstoneMode.IGNORE, ButtonToolTips.RedstoneMode, ButtonToolTips.AlwaysActive ); + registerApp( 0, Settings.REDSTONE_CONTROLLED, RedstoneMode.LOW_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveWithoutSignal ); + registerApp( 1, Settings.REDSTONE_CONTROLLED, RedstoneMode.HIGH_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveWithSignal ); + registerApp( 2, Settings.REDSTONE_CONTROLLED, RedstoneMode.SIGNAL_PULSE, ButtonToolTips.RedstoneMode, ButtonToolTips.ActiveOnPulse ); + + registerApp( 0, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.EmitLevelsBelow ); + registerApp( 1, Settings.REDSTONE_EMITTER, RedstoneMode.HIGH_SIGNAL, ButtonToolTips.RedstoneMode, ButtonToolTips.EmitLevelAbove ); + + registerApp( 51, Settings.OPERATION_MODE, OperationMode.FILL, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToStorageCell ); + registerApp( 50, Settings.OPERATION_MODE, OperationMode.EMPTY, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToNetwork ); + + registerApp( 51, Settings.IO_DIRECTION, RelativeDirection.LEFT, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToStorageCell ); + registerApp( 50, Settings.IO_DIRECTION, RelativeDirection.RIGHT, ButtonToolTips.TransferDirection, ButtonToolTips.TransferToNetwork ); + + registerApp( 48, Settings.SORT_DIRECTION, SortDir.ASCENDING, ButtonToolTips.SortOrder, ButtonToolTips.ToggleSortDirection ); + registerApp( 49, Settings.SORT_DIRECTION, SortDir.DESCENDING, ButtonToolTips.SortOrder, ButtonToolTips.ToggleSortDirection ); + + registerApp( 16 * 2 + 3, Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_Auto ); + registerApp( 16 * 2 + 4, Settings.SEARCH_MODE, SearchBoxMode.MANUAL_SEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_Standard ); + registerApp( 16 * 2 + 5, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_JEIAuto ); + registerApp( 16 * 2 + 6, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH, ButtonToolTips.SearchMode, + ButtonToolTips.SearchMode_JEIStandard ); + registerApp( 16 * 2 + 7, Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH_KEEP, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_AutoKeep ); + registerApp( 16 * 2 + 8, Settings.SEARCH_MODE, SearchBoxMode.MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode, + ButtonToolTips.SearchMode_StandardKeep ); + registerApp( 16 * 2 + 9, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH_KEEP, ButtonToolTips.SearchMode, + ButtonToolTips.SearchMode_JEIAutoKeep ); + registerApp( 16 * 2 + 10, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode, + ButtonToolTips.SearchMode_JEIStandardKeep ); + + registerApp( 16 * 5 + 3, Settings.LEVEL_TYPE, LevelType.ENERGY_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Energy ); + registerApp( 16 * 4 + 3, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Item ); + + registerApp( 16 * 13, Settings.TERMINAL_STYLE, TerminalStyle.TALL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Tall ); + registerApp( 16 * 13 + 1, Settings.TERMINAL_STYLE, TerminalStyle.SMALL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Small ); + registerApp( 16 * 13 + 2, Settings.TERMINAL_STYLE, TerminalStyle.FULL, ButtonToolTips.TerminalStyle, ButtonToolTips.TerminalStyle_Full ); + + registerApp( 64, Settings.SORT_BY, SortOrder.NAME, ButtonToolTips.SortBy, ButtonToolTips.ItemName ); + registerApp( 65, Settings.SORT_BY, SortOrder.AMOUNT, ButtonToolTips.SortBy, ButtonToolTips.NumberOfItems ); + registerApp( 68, Settings.SORT_BY, SortOrder.INVTWEAKS, ButtonToolTips.SortBy, ButtonToolTips.InventoryTweaks ); + registerApp( 69, Settings.SORT_BY, SortOrder.MOD, ButtonToolTips.SortBy, ButtonToolTips.Mod ); + + registerApp( 16, Settings.VIEW_MODE, ViewItems.STORED, ButtonToolTips.View, ButtonToolTips.StoredItems ); + registerApp( 18, Settings.VIEW_MODE, ViewItems.ALL, ButtonToolTips.View, ButtonToolTips.StoredCraftable ); + registerApp( 19, Settings.VIEW_MODE, ViewItems.CRAFTABLE, ButtonToolTips.View, ButtonToolTips.Craftable ); + + registerApp( 16 * 6, Settings.FUZZY_MODE, FuzzyMode.PERCENT_25, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_25 ); + registerApp( 16 * 6 + 1, Settings.FUZZY_MODE, FuzzyMode.PERCENT_50, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_50 ); + registerApp( 16 * 6 + 2, Settings.FUZZY_MODE, FuzzyMode.PERCENT_75, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_75 ); + registerApp( 16 * 6 + 3, Settings.FUZZY_MODE, FuzzyMode.PERCENT_99, ButtonToolTips.FuzzyMode, ButtonToolTips.FZPercent_99 ); + registerApp( 16 * 6 + 4, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, ButtonToolTips.FuzzyMode, ButtonToolTips.FZIgnoreAll ); + + registerApp( 80, Settings.FULLNESS_MODE, FullnessMode.EMPTY, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenEmpty ); + registerApp( 81, Settings.FULLNESS_MODE, FullnessMode.HALF, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenWorkIsDone ); + registerApp( 82, Settings.FULLNESS_MODE, FullnessMode.FULL, ButtonToolTips.OperationMode, ButtonToolTips.MoveWhenFull ); + + registerApp( 16 + 5, Settings.BLOCK, YesNo.YES, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.Blocking ); + registerApp( 16 + 4, Settings.BLOCK, YesNo.NO, ButtonToolTips.InterfaceBlockingMode, ButtonToolTips.NonBlocking ); + + registerApp( 16 + 3, Settings.CRAFT_ONLY, YesNo.YES, ButtonToolTips.Craft, ButtonToolTips.CraftOnly ); + registerApp( 16 + 2, Settings.CRAFT_ONLY, YesNo.NO, ButtonToolTips.Craft, ButtonToolTips.CraftEither ); + + registerApp( 16 * 11 + 2, Settings.CRAFT_VIA_REDSTONE, YesNo.YES, ButtonToolTips.EmitterMode, ButtonToolTips.CraftViaRedstone ); + registerApp( 16 * 11 + 1, Settings.CRAFT_VIA_REDSTONE, YesNo.NO, ButtonToolTips.EmitterMode, ButtonToolTips.EmitWhenCrafting ); + + registerApp( 16 * 3 + 5, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY, ButtonToolTips.ReportInaccessibleItems, + ButtonToolTips.ReportInaccessibleItemsNo ); + registerApp( 16 * 3 + 6, Settings.STORAGE_FILTER, StorageFilter.NONE, ButtonToolTips.ReportInaccessibleItems, + ButtonToolTips.ReportInaccessibleItemsYes ); + + registerApp( 16 * 14, Settings.PLACE_BLOCK, YesNo.YES, ButtonToolTips.BlockPlacement, ButtonToolTips.BlockPlacementYes ); + registerApp( 16 * 14 + 1, Settings.PLACE_BLOCK, YesNo.NO, ButtonToolTips.BlockPlacement, ButtonToolTips.BlockPlacementNo ); + + registerApp( 16 * 15, Settings.SCHEDULING_MODE, SchedulingMode.DEFAULT, ButtonToolTips.SchedulingMode, ButtonToolTips.SchedulingModeDefault ); + registerApp( 16 * 15 + 1, Settings.SCHEDULING_MODE, SchedulingMode.ROUNDROBIN, ButtonToolTips.SchedulingMode, + ButtonToolTips.SchedulingModeRoundRobin ); + registerApp( 16 * 15 + 2, Settings.SCHEDULING_MODE, SchedulingMode.RANDOM, ButtonToolTips.SchedulingMode, + ButtonToolTips.SchedulingModeRandom ); + } + } + + private static void onPress(Button btn) { + if (btn instanceof GuiSettingToggleButton) { + ((GuiSettingToggleButton) btn).triggerPress(); + } + } + + private void triggerPress() { + boolean backwards = Minecraft.getInstance().mouseHelper.isRightDown(); + onPress.handle(this, backwards); + } + + private static void registerApp( final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ITextComponent hint ) + { + final ButtonAppearance a = new ButtonAppearance(); + a.displayName = title.getTranslationKey(); + a.displayValue = hint; + a.index = iconIndex; + appearances.put( new EnumPair( setting, val ), a ); + } + + private static void registerApp( final int iconIndex, final Settings setting, final Enum val, final ButtonToolTips title, final ButtonToolTips hint ) + { + registerApp(iconIndex, setting, val, title, hint.getTranslationKey()); + } + + @Override + protected int getIconIndex() + { + if( this.buttonSetting != null && this.currentValue != null ) + { + final ButtonAppearance app = appearances.get( new EnumPair( this.buttonSetting, this.currentValue ) ); + if( app == null ) + { + return 256 - 1; + } + return app.index; + } + return 256 - 1; + } + + public Settings getSetting() + { + return this.buttonSetting; + } + + public T getCurrentValue() + { + return this.currentValue; + } + + public void set( final T e ) + { + if( this.currentValue != e ) + { + this.currentValue = e; + } + } + + public T getNextValue(boolean backwards) { + return EnumCycler.rotateEnum(currentValue, backwards, validValues); + } + + @Override + public String getMessage() + { + ITextComponent displayName = null; + ITextComponent displayValue = null; + + if( this.buttonSetting != null && this.currentValue != null ) + { + final ButtonAppearance buttonAppearance = appearances.get( new EnumPair( this.buttonSetting, this.currentValue ) ); + if( buttonAppearance == null ) + { + return "No Such Message"; + } + + displayName = buttonAppearance.displayName; + displayValue = buttonAppearance.displayValue; + } + + if( displayName != null ) + { + String name = displayName.getString(); + String value = displayValue.getString(); + + if( this.fillVar != null ) + { + value = COMPILE.matcher( value ).replaceFirst( this.fillVar ); + } + + value = PATTERN_NEW_LINE.matcher( value ).replaceAll( "\n" ); + final StringBuilder sb = new StringBuilder( value ); + + int i = sb.lastIndexOf( "\n" ); + if( i <= 0 ) + { + i = 0; + } + while( i + 30 < sb.length() && ( i = sb.lastIndexOf( " ", i + 30 ) ) != -1 ) + { + sb.replace( i, i + 1, "\n" ); + } + + return name + '\n' + sb; + } + return null; + } + + public String getFillVar() + { + return this.fillVar; + } + + public void setFillVar( final String fillVar ) + { + this.fillVar = fillVar; + } + + private static final class EnumPair + { + + final Settings setting; + final Enum value; + + EnumPair( final Settings a, final Enum b ) + { + this.setting = a; + this.value = b; + } + + @Override + public int hashCode() + { + return this.setting.hashCode() ^ this.value.hashCode(); + } + + @Override + public boolean equals( final Object obj ) + { + if( obj == null ) + { + return false; + } + if( this.getClass() != obj.getClass() ) + { + return false; + } + final EnumPair other = (EnumPair) obj; + return other.setting == this.setting && other.value == this.value; + } + } + + private static class ButtonAppearance + { + public int index; + public ITextComponent displayName; + public ITextComponent displayValue; + } +} diff --git a/src/main/java/appeng/container/implementations/ContainerCellWorkbench.java b/src/main/java/appeng/container/implementations/ContainerCellWorkbench.java index 4b0abfb83..399c4377c 100644 --- a/src/main/java/appeng/container/implementations/ContainerCellWorkbench.java +++ b/src/main/java/appeng/container/implementations/ContainerCellWorkbench.java @@ -23,6 +23,7 @@ import java.util.Iterator; import appeng.container.ContainerLocator; import appeng.container.helper.TileContainerHelper; +import appeng.util.EnumCycler; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -93,7 +94,7 @@ public class ContainerCellWorkbench extends ContainerUpgradeable public void nextWorkBenchCopyMode() { - this.workBench.getConfigManager().putSetting( Settings.COPY_MODE, Platform.nextEnum( this.getWorkBenchCopyMode() ) ); + this.workBench.getConfigManager().putSetting( Settings.COPY_MODE, EnumCycler.next( this.getWorkBenchCopyMode() ) ); } private CopyMode getWorkBenchCopyMode() diff --git a/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java b/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java index 6087b9bc6..bb06d411e 100644 --- a/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java +++ b/src/main/java/appeng/container/implementations/ContainerMEMonitorable.java @@ -420,7 +420,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { if( this.getGui() != null ) { diff --git a/src/main/java/appeng/core/AEConfig.java b/src/main/java/appeng/core/AEConfig.java index 613ba1111..bfb272fce 100644 --- a/src/main/java/appeng/core/AEConfig.java +++ b/src/main/java/appeng/core/AEConfig.java @@ -25,6 +25,7 @@ import appeng.api.util.IConfigurableObject; import appeng.api.features.AEFeature; import appeng.core.settings.TickRates; import appeng.util.ConfigManager; +import appeng.util.EnumCycler; import appeng.util.IConfigManagerHost; import com.google.common.base.Strings; import net.minecraft.world.dimension.DimensionType; @@ -352,7 +353,7 @@ public final class AEConfig implements IConfigurableObject, IConfigManagerHost } @Override - public void updateSetting( final IConfigManager manager, final Enum setting, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings setting, final Enum newValue ) { // FIXME for( final Settings e : this.settings.getSettings() ) // FIXME { @@ -430,9 +431,10 @@ public final class AEConfig implements IConfigurableObject, IConfigManagerHost return this.selectedPowerUnit; } - public void nextPowerUnit( final boolean backwards ) + @SuppressWarnings("unchecked") + public void nextPowerUnit(final boolean backwards ) { - // FIXME this.selectedPowerUnit = Platform.rotateEnum( this.selectedPowerUnit, backwards, Settings.POWER_UNITS.getPossibleValues() ); + this.selectedPowerUnit = EnumCycler.rotateEnum( this.selectedPowerUnit, backwards, (EnumSet) Settings.POWER_UNITS.getPossibleValues() ); this.save(); } diff --git a/src/main/java/appeng/core/sync/packets/PacketConfigButton.java b/src/main/java/appeng/core/sync/packets/PacketConfigButton.java index 36e63d97a..ea0d7a45e 100644 --- a/src/main/java/appeng/core/sync/packets/PacketConfigButton.java +++ b/src/main/java/appeng/core/sync/packets/PacketConfigButton.java @@ -69,7 +69,7 @@ public final class PacketConfigButton extends AppEngPacket // FIXME if( baseContainer.getTarget() instanceof IConfigurableObject ) // FIXME { // FIXME final IConfigManager cm = ( (IConfigurableObject) baseContainer.getTarget() ).getConfigManager(); - // FIXME final Enum newState = Platform.rotateEnum( cm.getSetting( this.option ), this.rotationDirection, this.option.getPossibleValues() ); + // FIXME final Enum newState = EnumCycler.rotateEnum( cm.getSetting( this.option ), this.rotationDirection, this.option.getPossibleValues() ); // FIXME cm.putSetting( this.option, newState ); // FIXME } // FIXME } diff --git a/src/main/java/appeng/fluids/client/gui/GuiFluidLevelEmitter.java b/src/main/java/appeng/fluids/client/gui/GuiFluidLevelEmitter.java index 4a452af81..bbe05b48f 100644 --- a/src/main/java/appeng/fluids/client/gui/GuiFluidLevelEmitter.java +++ b/src/main/java/appeng/fluids/client/gui/GuiFluidLevelEmitter.java @@ -3,6 +3,7 @@ package appeng.fluids.client.gui; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; @@ -10,7 +11,6 @@ import net.minecraft.entity.player.PlayerInventory; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.client.gui.implementations.GuiUpgradeable; -import appeng.client.gui.widgets.GuiImgButton; import appeng.client.gui.widgets.GuiNumberBox; import appeng.core.AEConfig; import appeng.core.localization.GuiText; @@ -50,7 +50,7 @@ public class GuiFluidLevelEmitter extends GuiUpgradeable( this.guiLeft - 18, this.guiTop + 28, Settings.REDSTONE_EMITTER, RedstoneMode.LOW_SIGNAL ); final int a = AEConfig.instance().levelByMillyBuckets( 0 ); final int b = AEConfig.instance().levelByMillyBuckets( 1 ); diff --git a/src/main/java/appeng/fluids/client/gui/GuiFluidStorageBus.java b/src/main/java/appeng/fluids/client/gui/GuiFluidStorageBus.java index 3413c89c4..47a572d2d 100644 --- a/src/main/java/appeng/fluids/client/gui/GuiFluidStorageBus.java +++ b/src/main/java/appeng/fluids/client/gui/GuiFluidStorageBus.java @@ -19,8 +19,8 @@ package appeng.fluids.client.gui; -import java.io.IOException; - +import appeng.client.gui.widgets.GuiActionButton; +import appeng.client.gui.widgets.GuiServerSettingToggleButton; import appeng.container.implementations.ContainerPriority; import net.minecraft.entity.player.PlayerInventory; @@ -30,19 +30,16 @@ import appeng.api.config.FuzzyMode; import appeng.api.config.Settings; import appeng.api.config.StorageFilter; import appeng.client.gui.implementations.GuiUpgradeable; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiTabButton; -import appeng.core.AELog; import appeng.core.localization.GuiText; import appeng.core.sync.network.NetworkHandler; -import appeng.core.sync.packets.PacketConfigButton; import appeng.core.sync.packets.PacketSwitchGuis; import appeng.core.sync.packets.PacketValueConfig; import appeng.fluids.client.gui.widgets.GuiFluidSlot; import appeng.fluids.client.gui.widgets.GuiOptionalFluidSlot; import appeng.fluids.container.ContainerFluidStorageBus; -import appeng.fluids.parts.PartFluidStorageBus; import appeng.fluids.util.IAEFluidTank; import net.minecraft.util.text.ITextComponent; @@ -54,8 +51,8 @@ import net.minecraft.util.text.ITextComponent; */ public class GuiFluidStorageBus extends GuiUpgradeable { - private GuiImgButton rwMode; - private GuiImgButton storageFilter; + private GuiSettingToggleButton rwMode; + private GuiSettingToggleButton storageFilter; public GuiFluidStorageBus(ContainerFluidStorageBus container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -92,11 +89,11 @@ public class GuiFluidStorageBus extends GuiUpgradeable @Override protected void addButtons() { - addButton( new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.ACTIONS, ActionItems.CLOSE, btn -> clear() ) ); - addButton( new GuiImgButton( this.guiLeft - 18, this.guiTop + 28, Settings.ACTIONS, ActionItems.WRENCH, btn -> partition() ) ); - this.rwMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, AccessRestriction.READ_WRITE, btn -> toggleReadWriteMode() ); - this.storageFilter = new GuiImgButton( this.guiLeft - 18, this.guiTop + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY, btn -> toggleStorageFilter() ); - this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL, this::actionPerformed ); + addButton( new GuiActionButton( this.guiLeft - 18, this.guiTop + 8, ActionItems.CLOSE, btn -> clear() ) ); + addButton( new GuiActionButton( this.guiLeft - 18, this.guiTop + 28, ActionItems.WRENCH, btn -> partition() ) ); + this.rwMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 48, Settings.ACCESS, AccessRestriction.READ_WRITE ); + this.storageFilter = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 68, Settings.STORAGE_FILTER, StorageFilter.EXTRACTABLE_ONLY ); + this.fuzzyMode = new GuiServerSettingToggleButton<>( this.guiLeft - 18, this.guiTop + 88, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL ); addButton( this.addButton( new GuiTabButton( this.guiLeft + 154, this.guiTop, 2 + 4 * 16, GuiText.Priority.getLocal(), this.itemRenderer, btn -> openPriorityGui() ) ) ); @@ -145,16 +142,6 @@ public class GuiFluidStorageBus extends GuiUpgradeable NetworkHandler.instance().sendToServer( new PacketSwitchGuis( ContainerPriority.TYPE ) ); } - private void toggleReadWriteMode() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.rwMode.getSetting(), backwards ) ); - } - - private void toggleStorageFilter() { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - NetworkHandler.instance().sendToServer( new PacketConfigButton( this.storageFilter.getSetting(), backwards ) ); - } - @Override protected GuiText getName() { diff --git a/src/main/java/appeng/fluids/client/gui/GuiFluidTerminal.java b/src/main/java/appeng/fluids/client/gui/GuiFluidTerminal.java index 55a097410..06d9f92ed 100644 --- a/src/main/java/appeng/fluids/client/gui/GuiFluidTerminal.java +++ b/src/main/java/appeng/fluids/client/gui/GuiFluidTerminal.java @@ -26,7 +26,7 @@ import appeng.api.config.ViewItems; import appeng.api.storage.data.IAEFluidStack; import appeng.api.util.IConfigManager; import appeng.client.gui.AEBaseMEGui; -import appeng.client.gui.widgets.GuiImgButton; +import appeng.client.gui.widgets.GuiSettingToggleButton; import appeng.client.gui.widgets.GuiScrollbar; import appeng.client.gui.widgets.ISortSource; import appeng.client.gui.widgets.MEGuiTextField; @@ -43,14 +43,11 @@ import appeng.fluids.container.slots.IMEFluidSlot; import appeng.helpers.InventoryAction; import appeng.util.IConfigManagerHost; import appeng.util.Platform; -import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.util.InputMappings; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.ClickType; import net.minecraft.inventory.container.Slot; import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.client.gui.GuiUtils; import java.text.NumberFormat; @@ -75,8 +72,8 @@ public class GuiFluidTerminal extends AEBaseMEGui implem private int perRow = 9; private MEGuiTextField searchField; - private GuiImgButton sortByBox; - private GuiImgButton sortDirBox; + private GuiSettingToggleButton sortByBox; + private GuiSettingToggleButton sortDirBox; public GuiFluidTerminal(ContainerFluidTerminal container, PlayerInventory playerInventory, ITextComponent title) { super(container, playerInventory, title); @@ -104,11 +101,10 @@ public class GuiFluidTerminal extends AEBaseMEGui implem int offset = this.guiTop; - this.sortByBox = this.addButton( new GuiImgButton( this.guiLeft - 18, offset, Settings.SORT_BY, this.configSrc.getSetting( Settings.SORT_BY ), this::actionPerformed ) ); + this.sortByBox = this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.SORT_BY, getSortBy(), Platform::isSortOrderAvailable, this::toggleServerSetting ) ); offset += 20; - this.sortDirBox = this.addButton( new GuiImgButton( this.guiLeft - 18, offset, Settings.SORT_DIRECTION, this.configSrc - .getSetting( Settings.SORT_DIRECTION ), this::actionPerformed ) ); + this.sortDirBox = this.addButton( new GuiSettingToggleButton<>( this.guiLeft - 18, offset, Settings.SORT_DIRECTION, getSortDir(), this::toggleServerSetting ) ); for( int y = 0; y < this.rows; y++ ) { @@ -134,14 +130,14 @@ public class GuiFluidTerminal extends AEBaseMEGui implem { this.bindTexture( this.getBackground() ); final int x_width = 197; - GuiUtils.drawTexturedModalRect( offsetX, offsetY, 0, 0, x_width, 18, 0 /* FIXME ZINDEX */ ); + GuiUtils.drawTexturedModalRect( offsetX, offsetY, 0, 0, x_width, 18, getBlitOffset() ); for( int x = 0; x < 6; x++ ) { - GuiUtils.drawTexturedModalRect( offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18, 0 /* FIXME ZINDEX */ ); + GuiUtils.drawTexturedModalRect( offsetX, offsetY + 18 + x * 18, 0, 18, x_width, 18, getBlitOffset() ); } - GuiUtils.drawTexturedModalRect( offsetX, offsetY + 16 + 6 * 18, 0, 106 - 18 - 18, x_width, 99 + 77, 0 /* FIXME ZINDEX */ ); + GuiUtils.drawTexturedModalRect( offsetX, offsetY + 16 + 6 * 18, 0, 106 - 18 - 18, x_width, 99 + 77, getBlitOffset() ); if( this.searchField != null ) { @@ -170,11 +166,7 @@ public class GuiFluidTerminal extends AEBaseMEGui implem final IAEFluidStack fluidStack = fluidSlot.getAEFluidStack(); final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( fluidStack.getStackSize() / 1000.0 ) + " B"; - // FIXME: Move getting the mod name to platform - final String modName = "" + TextFormatting.BLUE + TextFormatting.ITALIC + ModList.get() - .getModContainerById( Platform.getModId( fluidStack ) ) - .map(mc -> mc.getModInfo().getDisplayName()) - .orElse(null); + final String modName = Platform.getModName( Platform.getModId( fluidStack ) ); final List list = new ArrayList<>(); @@ -190,23 +182,10 @@ public class GuiFluidTerminal extends AEBaseMEGui implem super.renderHoveredToolTip( mouseX, mouseY ); } - protected void actionPerformed( Button btn ) - { - if( btn instanceof GuiImgButton ) - { - final boolean backwards = minecraft.mouseHelper.isRightDown(); - final GuiImgButton iBtn = (GuiImgButton) btn; - - if( iBtn.getSetting() != Settings.ACTIONS ) - { - final Enum cv = iBtn.getCurrentValue(); - final Enum next = Platform.rotateEnum( cv, backwards, iBtn.getSetting().getPossibleValues() ); - - NetworkHandler.instance().sendToServer( new PacketValueConfig( iBtn.getSetting().name(), next.name() ) ); - - iBtn.set( next ); - } - } + private > void toggleServerSetting(GuiSettingToggleButton btn, boolean backwards) { + S next = btn.getNextValue(backwards); + NetworkHandler.instance().sendToServer( new PacketValueConfig( btn.getSetting().name(), next.name() ) ); + btn.set( next ); } @Override @@ -269,8 +248,8 @@ public class GuiFluidTerminal extends AEBaseMEGui implem this.repo.setSearchString( this.searchField.getText() ); this.repo.updateView(); this.setScrollBar(); - return true; } + return true; } return super.keyPressed(keyCode, scanCode, p_keyPressed_3_); @@ -328,16 +307,16 @@ public class GuiFluidTerminal extends AEBaseMEGui implem } @Override - public void updateSetting( IConfigManager manager, Enum settingName, Enum newValue ) + public void updateSetting(IConfigManager manager, Settings settingName, Enum newValue ) { if( this.sortByBox != null ) { - this.sortByBox.set( this.configSrc.getSetting( Settings.SORT_BY ) ); + this.sortByBox.set( getSortBy() ); } if( this.sortDirBox != null ) { - this.sortDirBox.set( this.configSrc.getSetting( Settings.SORT_DIRECTION ) ); + this.sortDirBox.set( getSortDir() ); } this.repo.updateView(); diff --git a/src/main/java/appeng/fluids/container/ContainerFluidTerminal.java b/src/main/java/appeng/fluids/container/ContainerFluidTerminal.java index e62747a89..6127466dd 100644 --- a/src/main/java/appeng/fluids/container/ContainerFluidTerminal.java +++ b/src/main/java/appeng/fluids/container/ContainerFluidTerminal.java @@ -26,9 +26,7 @@ import javax.annotation.Nonnull; import appeng.api.AEApi; import appeng.api.config.*; import appeng.container.ContainerLocator; -import appeng.container.helper.PartContainerHelper; import appeng.container.helper.PartOrTileContainerHelper; -import appeng.fluids.parts.PartFluidFormationPlane; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.ServerPlayerEntity; @@ -268,7 +266,7 @@ public class ContainerFluidTerminal extends AEBaseContainer implements IConfigMa } @Override - public void updateSetting( IConfigManager manager, Enum settingName, Enum newValue ) + public void updateSetting(IConfigManager manager, Settings settingName, Enum newValue ) { if( this.getGui() != null ) { diff --git a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java index 8d514c5d5..2c0f78eef 100644 --- a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java +++ b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java @@ -21,16 +21,15 @@ package appeng.fluids.helper; import java.util.Optional; +import appeng.api.config.Settings; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; -import net.minecraft.fluid.Fluid; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; import appeng.api.AEApi; @@ -614,7 +613,7 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable } @Override - public void updateSetting( IConfigManager manager, Enum settingName, Enum newValue ) + public void updateSetting(IConfigManager manager, Settings settingName, Enum newValue ) { } } diff --git a/src/main/java/appeng/fluids/parts/PartFluidLevelEmitter.java b/src/main/java/appeng/fluids/parts/PartFluidLevelEmitter.java index 5d152b169..32dabfa48 100644 --- a/src/main/java/appeng/fluids/parts/PartFluidLevelEmitter.java +++ b/src/main/java/appeng/fluids/parts/PartFluidLevelEmitter.java @@ -6,7 +6,6 @@ import java.util.Random; import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; -import appeng.container.implementations.ContainerLevelEmitter; import appeng.fluids.container.ContainerFluidLevelEmitter; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -100,7 +99,7 @@ public class PartFluidLevelEmitter extends PartUpgradeable implements IStackWatc } @Override - public void updateSetting( IConfigManager manager, Enum settingName, Enum newValue ) + public void updateSetting(IConfigManager manager, Settings settingName, Enum newValue ) { this.configureWatchers(); } diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 78677d493..d109a97fb 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -43,7 +43,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.StringTextComponent; @@ -860,7 +859,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { if( this.getInstalledUpgrades( Upgrades.CRAFTING ) == 0 ) { diff --git a/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java b/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java index 35daefa3f..6f3225d04 100644 --- a/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java +++ b/src/main/java/appeng/items/tools/powered/ToolWirelessTerminal.java @@ -21,7 +21,6 @@ package appeng.items.tools.powered; import java.util.List; -import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; diff --git a/src/main/java/appeng/parts/automation/PartAbstractFormationPlane.java b/src/main/java/appeng/parts/automation/PartAbstractFormationPlane.java index f8a60480e..37d5cf31d 100644 --- a/src/main/java/appeng/parts/automation/PartAbstractFormationPlane.java +++ b/src/main/java/appeng/parts/automation/PartAbstractFormationPlane.java @@ -2,6 +2,7 @@ package appeng.parts.automation; +import appeng.api.config.Settings; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntity; @@ -52,7 +53,7 @@ public abstract class PartAbstractFormationPlane> extends } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.updateHandler(); this.getHost().markForSave(); diff --git a/src/main/java/appeng/parts/automation/PartLevelEmitter.java b/src/main/java/appeng/parts/automation/PartLevelEmitter.java index d2fcff0ec..6f69618d4 100644 --- a/src/main/java/appeng/parts/automation/PartLevelEmitter.java +++ b/src/main/java/appeng/parts/automation/PartLevelEmitter.java @@ -470,7 +470,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.configureWatchers(); } diff --git a/src/main/java/appeng/parts/automation/PartUpgradeable.java b/src/main/java/appeng/parts/automation/PartUpgradeable.java index 7d574d6ab..ce6dc762b 100644 --- a/src/main/java/appeng/parts/automation/PartUpgradeable.java +++ b/src/main/java/appeng/parts/automation/PartUpgradeable.java @@ -21,6 +21,7 @@ package appeng.parts.automation; import java.util.List; +import appeng.api.config.Settings; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; @@ -52,7 +53,7 @@ public abstract class PartUpgradeable extends PartBasicState implements IAEAppEn } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/parts/misc/PartSharedStorageBus.java b/src/main/java/appeng/parts/misc/PartSharedStorageBus.java index 72fe25175..ddaa6cc9c 100644 --- a/src/main/java/appeng/parts/misc/PartSharedStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartSharedStorageBus.java @@ -22,6 +22,7 @@ package appeng.parts.misc; import java.util.Collections; import java.util.List; +import appeng.api.config.Settings; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.math.BlockPos; @@ -144,7 +145,7 @@ public abstract class PartSharedStorageBus extends PartUpgradeable implements IG } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.resetCache( true ); this.getHost().markForSave(); diff --git a/src/main/java/appeng/parts/misc/PartStorageBus.java b/src/main/java/appeng/parts/misc/PartStorageBus.java index 1fff07c11..bf11358cf 100644 --- a/src/main/java/appeng/parts/misc/PartStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartStorageBus.java @@ -26,7 +26,6 @@ import java.util.Objects; import appeng.container.ContainerLocator; import appeng.container.ContainerOpener; import appeng.container.implementations.ContainerStorageBus; -import appeng.fluids.container.ContainerFluidInterface; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; @@ -171,7 +170,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.resetCache( true ); this.getHost().markForSave(); diff --git a/src/main/java/appeng/parts/reporting/AbstractPartTerminal.java b/src/main/java/appeng/parts/reporting/AbstractPartTerminal.java index 774f38b9b..755e1f41f 100644 --- a/src/main/java/appeng/parts/reporting/AbstractPartTerminal.java +++ b/src/main/java/appeng/parts/reporting/AbstractPartTerminal.java @@ -47,7 +47,6 @@ import appeng.me.GridAccessException; import appeng.tile.inventory.AppEngInternalInventory; import appeng.util.ConfigManager; import appeng.util.IConfigManagerHost; -import appeng.util.Platform; import appeng.util.inv.IAEAppEngInventory; import appeng.util.inv.InvOperation; @@ -147,7 +146,7 @@ public abstract class AbstractPartTerminal extends AbstractPartDisplay implement } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java b/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java index e585cdc2a..940c958f9 100644 --- a/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java +++ b/src/main/java/appeng/tile/crafting/TileMolecularAssembler.java @@ -334,7 +334,7 @@ public class TileMolecularAssembler extends AENetworkInvTile implements IUpgrade } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/tile/misc/TileCellWorkbench.java b/src/main/java/appeng/tile/misc/TileCellWorkbench.java index f9c6fde8c..6144c8b06 100644 --- a/src/main/java/appeng/tile/misc/TileCellWorkbench.java +++ b/src/main/java/appeng/tile/misc/TileCellWorkbench.java @@ -250,7 +250,7 @@ public class TileCellWorkbench extends AEBaseTile implements IUpgradeableHost, I } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { // nothing here.. } diff --git a/src/main/java/appeng/tile/misc/TileCondenser.java b/src/main/java/appeng/tile/misc/TileCondenser.java index 1c1b8e475..349a3d356 100644 --- a/src/main/java/appeng/tile/misc/TileCondenser.java +++ b/src/main/java/appeng/tile/misc/TileCondenser.java @@ -27,7 +27,6 @@ import net.minecraft.nbt.CompoundNBT; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; import net.minecraftforge.common.capabilities.Capability; -import net.minecraft.fluid.Fluid; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; @@ -63,8 +62,6 @@ import appeng.util.inv.WrapperChainedItemHandler; import appeng.util.inv.WrapperFilteredItemHandler; import appeng.util.inv.filter.AEItemFilters; -import java.util.function.Predicate; - public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost, IConfigurableObject { @@ -203,7 +200,7 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost, } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.addPower( 0 ); } diff --git a/src/main/java/appeng/tile/misc/TileInscriber.java b/src/main/java/appeng/tile/misc/TileInscriber.java index 4b3f72be3..f83c7f245 100644 --- a/src/main/java/appeng/tile/misc/TileInscriber.java +++ b/src/main/java/appeng/tile/misc/TileInscriber.java @@ -26,6 +26,7 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import appeng.api.config.Settings; import appeng.recipes.handlers.InscriberRecipe; import net.minecraft.item.ItemStack; @@ -429,7 +430,7 @@ public class TileInscriber extends AENetworkPowerTile implements IGridTickable, } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/tile/misc/TileSecurityStation.java b/src/main/java/appeng/tile/misc/TileSecurityStation.java index 08940275a..4d1c43999 100644 --- a/src/main/java/appeng/tile/misc/TileSecurityStation.java +++ b/src/main/java/appeng/tile/misc/TileSecurityStation.java @@ -304,7 +304,7 @@ public class TileSecurityStation extends AENetworkTile implements ITerminalHost, } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/tile/storage/TileChest.java b/src/main/java/appeng/tile/storage/TileChest.java index 4d4fa1089..9d9e68b96 100644 --- a/src/main/java/appeng/tile/storage/TileChest.java +++ b/src/main/java/appeng/tile/storage/TileChest.java @@ -26,11 +26,8 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import appeng.block.storage.BlockChest; -import appeng.block.storage.DriveSlotState; import appeng.container.implementations.ContainerMEMonitorable; import appeng.fluids.container.ContainerFluidTerminal; -import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemStack; @@ -39,7 +36,6 @@ import net.minecraft.network.PacketBuffer; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.Direction; -import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fluids.FluidAttributes; @@ -618,7 +614,7 @@ public class TileChest extends AENetworkPowerTile implements IMEChest, ITerminal } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { } diff --git a/src/main/java/appeng/tile/storage/TileIOPort.java b/src/main/java/appeng/tile/storage/TileIOPort.java index ca9386555..3892ee333 100644 --- a/src/main/java/appeng/tile/storage/TileIOPort.java +++ b/src/main/java/appeng/tile/storage/TileIOPort.java @@ -221,7 +221,7 @@ public class TileIOPort extends AENetworkInvTile implements IUpgradeableHost, IC } @Override - public void updateSetting( final IConfigManager manager, final Enum settingName, final Enum newValue ) + public void updateSetting(final IConfigManager manager, final Settings settingName, final Enum newValue ) { this.updateTask(); } diff --git a/src/main/java/appeng/util/EnumCycler.java b/src/main/java/appeng/util/EnumCycler.java new file mode 100644 index 000000000..b5d91c298 --- /dev/null +++ b/src/main/java/appeng/util/EnumCycler.java @@ -0,0 +1,70 @@ +package appeng.util; + +import java.util.EnumSet; + +public final class EnumCycler { + + private EnumCycler() { + } + + public static > T rotateEnum( T ce, final boolean backwards, final EnumSet validOptions ) + { + do + { + if( backwards ) + { + ce = prevEnum( ce ); + } + else + { + ce = next( ce ); + } + } + while( !validOptions.contains( ce ) ); + + return ce; + } + + /* + * Simple way to cycle an enum... + */ + public static > T prevEnum( final T ce ) + { + T[] values = ce.getDeclaringClass().getEnumConstants(); + + int pLoc = ce.ordinal() - 1; + if( pLoc < 0 ) + { + pLoc = values.length - 1; + } + + if( pLoc < 0 || pLoc >= values.length ) + { + pLoc = 0; + } + + return values[pLoc]; + } + + /* + * Simple way to cycle an enum... + */ + public static > T next(final T ce ) + { + T[] values = ce.getDeclaringClass().getEnumConstants(); + + int pLoc = ce.ordinal() + 1; + if( pLoc >= values.length ) + { + pLoc = 0; + } + + if( pLoc < 0 || pLoc >= values.length ) + { + pLoc = 0; + } + + return values[pLoc]; + } + +} diff --git a/src/main/java/appeng/util/IConfigManagerHost.java b/src/main/java/appeng/util/IConfigManagerHost.java index 1323a7df5..720070949 100644 --- a/src/main/java/appeng/util/IConfigManagerHost.java +++ b/src/main/java/appeng/util/IConfigManagerHost.java @@ -19,11 +19,12 @@ package appeng.util; +import appeng.api.config.Settings; import appeng.api.util.IConfigManager; public interface IConfigManagerHost { - void updateSetting( IConfigManager manager, Enum settingName, Enum newValue ); + void updateSetting(IConfigManager manager, Settings settingName, Enum newValue ); } diff --git a/src/main/java/appeng/util/Platform.java b/src/main/java/appeng/util/Platform.java index 76a16a954..851f2aae6 100644 --- a/src/main/java/appeng/util/Platform.java +++ b/src/main/java/appeng/util/Platform.java @@ -34,7 +34,6 @@ import appeng.api.networking.security.IActionHost; import appeng.api.networking.security.IActionSource; import appeng.api.networking.security.ISecurityGrid; import appeng.api.networking.storage.IStorageGrid; -import appeng.api.parts.IPart; import appeng.api.storage.IMEInventory; import appeng.api.storage.IMEMonitor; import appeng.api.storage.IMEMonitorHandlerReceiver; @@ -69,12 +68,10 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.CraftingInventory; -import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.item.crafting.IRecipe; -import net.minecraft.network.play.server.SChunkDataPacket; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; @@ -84,23 +81,20 @@ import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; import net.minecraft.world.server.ServerWorld; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.common.util.FakePlayerFactory; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.ModList; import net.minecraftforge.fml.common.thread.SidedThreadGroups; import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.network.FMLNetworkConstants; -import net.minecraftforge.fml.network.NetworkDirection; -import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.registries.ForgeRegistries; -import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.text.DecimalFormat; import java.util.*; +import java.util.stream.Collectors; /** @@ -112,6 +106,7 @@ import java.util.*; public class Platform { + // FIXME get rid of this shit, there's CAVE_AIR now !!! public static final Block AIR_BLOCK = Blocks.AIR; public static final int DEF_OFFSET = 16; @@ -236,102 +231,6 @@ public class Platform return Direction.NORTH; } - public static T rotateEnum( T ce, final boolean backwards, final EnumSet validOptions ) - { - do - { - if( backwards ) - { - ce = prevEnum( ce ); - } - else - { - ce = nextEnum( ce ); - } - } - while( !validOptions.contains( ce ) || isNotValidSetting( ce ) ); - - return ce; - } - - /* - * Simple way to cycle an enum... - */ - private static T prevEnum( final T ce ) - { - final EnumSet valList = EnumSet.allOf( ce.getClass() ); - - int pLoc = ce.ordinal() - 1; - if( pLoc < 0 ) - { - pLoc = valList.size() - 1; - } - - if( pLoc < 0 || pLoc >= valList.size() ) - { - pLoc = 0; - } - - int pos = 0; - for( final Object g : valList ) - { - if( pos == pLoc ) - { - return (T) g; - } - pos++; - } - - return null; - } - - /* - * Simple way to cycle an enum... - */ - public static > T nextEnum( final T ce ) - { - final EnumSet valList = EnumSet.allOf( ce.getClass() ); - - int pLoc = ce.ordinal() + 1; - if( pLoc >= valList.size() ) - { - pLoc = 0; - } - - if( pLoc < 0 || pLoc >= valList.size() ) - { - pLoc = 0; - } - - int pos = 0; - for( final Object g : valList ) - { - if( pos == pLoc ) - { - return (T) g; - } - pos++; - } - - return null; - } - - private static boolean isNotValidSetting( final Enum e ) - { - if( e == SortOrder.INVTWEAKS /* FIXME && !Integrations.invTweaks().isEnabled() */ ) - { - return true; - } - - final boolean isJEI = e == SearchBoxMode.JEI_AUTOSEARCH || e == SearchBoxMode.JEI_AUTOSEARCH_KEEP || e == SearchBoxMode.JEI_MANUAL_SEARCH || e == SearchBoxMode.JEI_MANUAL_SEARCH_KEEP; - if( isJEI && !JEIFacade.instance().isEnabled()) - { - return true; - } - - return false; - } - /** * @return True if client-side classes (such as Renderers) are available. */ @@ -567,6 +466,13 @@ public class Platform return n == null ? "** Null" : n.getNamespace(); // FIXME: Check if namespace == mod } + public static String getModName( String modId ) { + return "" + TextFormatting.BLUE + TextFormatting.ITALIC + ModList.get() + .getModContainerById( modId ) + .map(mc -> mc.getModInfo().getDisplayName()) + .orElse(null); + } + public static ITextComponent getItemDisplayName( final Object o ) { if( o == null ) @@ -1559,4 +1465,19 @@ public class Platform return isPurified; } + + public static boolean isSortOrderAvailable(SortOrder order) { + if (order == SortOrder.INVTWEAKS) { + return false; // FIXME Integrations.invTweaks().isEnabled() + } + return true; + } + + public static boolean isSearchModeAvailable(SearchBoxMode mode) { + if (mode.isRequiresJei()) { + return JEIFacade.instance().isEnabled(); + } + return true; + } + }