aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity/implementations
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/metatileentity/implementations
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/metatileentity/implementations')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java57
1 files changed, 57 insertions, 0 deletions
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));
}