aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
authorMary <33456283+FourIsTheNumber@users.noreply.github.com>2024-07-19 12:27:40 -0400
committerGitHub <noreply@github.com>2024-07-19 23:27:40 +0700
commit1842f59eeb837edecfc31dae8a2b35fcda471b38 (patch)
tree826ae5a141706145ed48ec415c57b3bf93a3fc88 /src/main/java/gregtech/api
parente4b0d5d1e0f6080d4896c6ceec649d16fe68369f (diff)
downloadGT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.tar.gz
GT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.tar.bz2
GT5-Unofficial-1842f59eeb837edecfc31dae8a2b35fcda471b38.zip
Mode switch button (#2730)
* Button textures. Once again I am manually pulling changes from a different branch... sorry. If you want to read the full commit history, the modeswitchgui branch has it. * Texture enums * Implementation in ControllerWithOptionalFeatures * Implementation in GT_MetaTileEntity_MultiBlockBase * Implemented into all multi-machines * Lang changes * Added documentation * Added missing clear * Quick polish changes - button base texture is standard instead of pressed, and the click noise works. * MFE compatibility * TurboCan compatibility * Fix misordered icons in canner * Removed redundant code in button * Attempted to refactor with MachineMode enum. Also moved loadNBT and saveNBT logic to base class * sa * fix (cherry picked from commit 1f14a7abf460ad114f10e8ba58b6be44b7b18d48) * Rework machineMode into enum of IMachineMode completely * Fixed breaking typo * Made it stop crashing on normal multis that don't support mode switch * Revert * Finished revert and re-addressed changes from original review * spotless * Load nbt tags in correct order. Fixes backwards compat * Check nbt key on load instead * Run super last and make all MACHINEMODE static --------- Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java30
-rw-r--r--src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java71
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java57
3 files changed, 158 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index 54666567db..c39b47e903 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -398,6 +398,36 @@ public class GT_UITextures {
public static final UITexture OVERLAY_BUTTON_LIQUIDMODE_OFF = UITexture
.fullImage(GregTech.ID, "gui/overlay_button/LiquidMode_off");
+ // These icons are for mode switching machine modes
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_DEFAULT = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_default");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CHEMBATH = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_chembath");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_WASHPLANT = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_washplant");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_simplewasher");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_PACKAGER = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_packager");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_UNPACKAGER = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_unpackager");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SEPARATOR = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_separator");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_POLARIZER = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_polarizer");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_fluid");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_METAL = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_metal");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_BENDING = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_bending");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_FORMING = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_forming");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SLICING = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_slicing");
+ public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CUTTING = UITexture
+ .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_cutting");
+
/**
* Can adjust size as needed.
*/
diff --git a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
index 22694cdafd..a877492907 100644
--- a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
+++ b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
@@ -33,6 +33,7 @@ import gregtech.api.interfaces.tileentity.IVoidable;
* <li>Separated input buses</li>
* <li>Batch mode</li>
* <li>Recipe locking</li>
+ * <li>Multiple machine modes</li>
* </ul>
*/
public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockable {
@@ -118,6 +119,76 @@ public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockab
}
/**
+ * @return if the multi has more than 1 mode
+ */
+ default boolean supportsMachineModeSwitch() {
+ return false;
+ }
+
+ /**
+ * @return the current mode number. This is a getter is used for displaying the icon in the GUI
+ */
+ default int getMachineMode() {
+ return 0;
+ }
+
+ /**
+ * @param index Index of machineModeIcons to pull from
+ * @return UITexture associated with that machineMode
+ */
+ default UITexture getMachineModeIcon(int index) {
+ return null;
+ }
+
+ /**
+ * @param index Number to set machineMode to
+ */
+ default void setMachineMode(int index) {}
+
+ /**
+ * @return Returns the next machineMode number in the sequence
+ */
+ default int nextMachineMode() {
+ return 0;
+ }
+
+ /**
+ * @return Returns whether machine supports mode switch by default
+ */
+ default boolean getDefaultModeSwitch() {
+ return supportsMachineModeSwitch();
+ }
+
+ Pos2d getMachineModeSwitchButtonPos();
+
+ default void onMachineModeSwitchClick() {}
+
+ default ButtonWidget createModeSwitchButton(IWidgetBuilder<?> builder) {
+ if (!supportsMachineModeSwitch()) return null;
+ Widget button = new ButtonWidget().setOnClick((clickData, widget) -> {
+ if (supportsMachineModeSwitch()) {
+ onMachineModeSwitchClick();
+ setMachineMode(nextMachineMode());
+ }
+ })
+ .setPlayClickSound(supportsMachineModeSwitch())
+ .setBackground(() -> {
+ List<UITexture> ret = new ArrayList<>();
+ if (supportsMachineModeSwitch()) {
+ ret.add(GT_UITextures.BUTTON_STANDARD);
+ ret.add(getMachineModeIcon(getMachineMode()));
+ } else return null;
+ return ret.toArray(new IDrawable[0]);
+ })
+ .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getMachineMode, this::setMachineMode), builder)
+ .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.mode_switch"))
+ .setTooltipShowUpDelay(TOOLTIP_DELAY)
+ .setPos(getMachineModeSwitchButtonPos())
+ .setSize(16, 16);
+ return (ButtonWidget) button;
+ }
+
+ /**
* @return if the multi supports input separation.
*/
boolean supportsInputSeparation();
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index 3d34a6c62a..735119d8bf 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -44,6 +44,7 @@ import org.lwjgl.input.Keyboard;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.gtnewhorizons.modularui.api.NumberFormatMUI;
+import com.gtnewhorizons.modularui.api.drawable.UITexture;
import com.gtnewhorizons.modularui.api.math.Alignment;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
@@ -127,6 +128,8 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
public String mNEI;
public int damageFactorLow = 5;
public float damageFactorHigh = 0.6f;
+ public int machineMode = 0;
+ public List<UITexture> machineModeIcons = new ArrayList<UITexture>();
public boolean mLockedToSingleRecipe = getDefaultRecipeLockingMode();
protected boolean inputSeparation = getDefaultInputSeparationMode();
@@ -253,6 +256,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
aNBT.setInteger("mEfficiency", mEfficiency);
aNBT.setInteger("mPollution", mPollution);
aNBT.setInteger("mRuntime", mRuntime);
+
+ if (supportsMachineModeSwitch()) {
+ aNBT.setInteger("machineMode", machineMode);
+ }
+
if (supportsSingleRecipeLocking()) {
aNBT.setBoolean("mLockedToSingleRecipe", mLockedToSingleRecipe);
if (mLockedToSingleRecipe && mSingleRecipeCheck != null)
@@ -294,6 +302,9 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
mEfficiency = aNBT.getInteger("mEfficiency");
mPollution = aNBT.getInteger("mPollution");
mRuntime = aNBT.getInteger("mRuntime");
+ if (aNBT.hasKey("machineMode")) {
+ machineMode = aNBT.getInteger("machineMode");
+ }
if (supportsSingleRecipeLocking()) {
mLockedToSingleRecipe = aNBT.getBoolean("mLockedToSingleRecipe");
if (mLockedToSingleRecipe && aNBT.hasKey("mSingleRecipeCheck", Constants.NBT.TAG_COMPOUND)) {
@@ -2212,6 +2223,50 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
return new Pos2d(26, 91);
}
+ /**
+ * Creates the icon list for this machine. Override this and add the overlays to machineModeIcons in order.
+ */
+ public void setMachineModeIcons() {
+ machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT);
+ machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT);
+ }
+
+ /**
+ * Override this if you are a multi-machine and want a GUI button. You will also want to override
+ * setMachineModeIcons().
+ * Override nextMachineMode() if you have more than 2 modes.
+ */
+ @Override
+ public boolean supportsMachineModeSwitch() {
+ return false;
+ }
+
+ @Override
+ public int getMachineMode() {
+ return machineMode;
+ }
+
+ @Override
+ public UITexture getMachineModeIcon(int index) {
+ return machineModeIcons.get(index);
+ }
+
+ @Override
+ public void setMachineMode(int index) {
+ machineMode = index;
+ }
+
+ @Override
+ public int nextMachineMode() {
+ if (machineMode == 0) return 1;
+ else return 0;
+ }
+
+ @Override
+ public Pos2d getMachineModeSwitchButtonPos() {
+ return new Pos2d(80, 91);
+ }
+
@Override
public boolean supportsBatchMode() {
return false;
@@ -2300,9 +2355,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
drawTexts(screenElements, inventorySlot);
builder.widget(screenElements);
+ setMachineModeIcons();
builder.widget(createPowerSwitchButton(builder))
.widget(createVoidExcessButton(builder))
.widget(createInputSeparationButton(builder))
+ .widget(createModeSwitchButton(builder))
.widget(createBatchModeButton(builder))
.widget(createLockToSingleRecipeButton(builder));
}