aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2023-07-30 20:26:53 +0800
committerGitHub <noreply@github.com>2023-07-30 14:26:53 +0200
commitf983308b936c54f3331424b0d6d51d8a3b11f415 (patch)
treeeabcbe297913884a7acc2997d7464d5fb355d2f2 /src/main
parent9812da7aabe91ce96d9ece08f792912aa7d1882c (diff)
downloadGT5-Unofficial-f983308b936c54f3331424b0d6d51d8a3b11f415.tar.gz
GT5-Unofficial-f983308b936c54f3331424b0d6d51d8a3b11f415.tar.bz2
GT5-Unofficial-f983308b936c54f3331424b0d6d51d8a3b11f415.zip
enable subclass to allow less voiding mode being set (#2191)
* enable subclass to allow less voiding mode being set * fix bug * rename
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/enums/VoidingMode.java34
-rw-r--r--src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java6
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java5
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java1
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java7
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java8
6 files changed, 59 insertions, 2 deletions
diff --git a/src/main/java/gregtech/api/enums/VoidingMode.java b/src/main/java/gregtech/api/enums/VoidingMode.java
index 47f837daac..8ae9dda57d 100644
--- a/src/main/java/gregtech/api/enums/VoidingMode.java
+++ b/src/main/java/gregtech/api/enums/VoidingMode.java
@@ -1,5 +1,9 @@
package gregtech.api.enums;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Set;
+
import javax.annotation.Nonnull;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
@@ -27,6 +31,18 @@ public enum VoidingMode {
*/
VOID_ALL(false, false, GT_UITextures.BUTTON_STANDARD_PRESSED, GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_ALL, "all");
+ /**
+ * Default set of voiding mode you will probably support.
+ */
+ public static final Set<VoidingMode> ALL_OPTIONS = EnumSet.allOf(VoidingMode.class);
+ /**
+ * Set of voiding mode you will probably support if your machine has no item output
+ */
+ public static final Set<VoidingMode> FLUID_ONLY_MODES = EnumSet.of(VOID_FLUID, VOID_NONE);
+ /**
+ * Set of voiding mode you will probably support if your machine has no fluid output
+ */
+ public static final Set<VoidingMode> ITEM_ONLY_MODES = EnumSet.of(VOID_ITEM, VOID_NONE);
public final boolean protectItem;
public final boolean protectFluid;
public final UITexture buttonTexture;
@@ -54,6 +70,24 @@ public enum VoidingMode {
return values()[(ordinal() + values().length - 1) % values().length];
}
+ public VoidingMode nextInCollection(Collection<VoidingMode> allowed) {
+ if (allowed.isEmpty()) throw new IllegalArgumentException("nothing allowed");
+ VoidingMode ret = this;
+ do {
+ ret = ret.next();
+ } while (!allowed.contains(ret));
+ return ret;
+ }
+
+ public VoidingMode previousInCollection(Collection<VoidingMode> allowed) {
+ if (allowed.isEmpty()) throw new IllegalArgumentException("nothing allowed");
+ VoidingMode ret = this;
+ do {
+ ret = ret.previous();
+ } while (!allowed.contains(ret));
+ return ret;
+ }
+
/**
* Do not use this for loading mode from TEs, to prevent mode being shifted when new mode is added.
*/
diff --git a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
index 3d4ed80f67..22694cdafd 100644
--- a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
+++ b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java
@@ -6,6 +6,7 @@ import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import net.minecraft.util.StatCollector;
@@ -80,9 +81,10 @@ public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockab
default ButtonWidget createVoidExcessButton(IWidgetBuilder<?> builder) {
Widget button = new ButtonWidget().setOnClick((clickData, widget) -> {
if (supportsVoidProtection()) {
+ Set<VoidingMode> allowed = getAllowedVoidingModes();
switch (clickData.mouseButton) {
- case 0 -> setVoidingMode(getVoidingMode().next());
- case 1 -> setVoidingMode(getVoidingMode().previous());
+ case 0 -> setVoidingMode(getVoidingMode().nextInCollection(allowed));
+ case 1 -> setVoidingMode(getVoidingMode().previousInCollection(allowed));
}
widget.notifyTooltipChange();
}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
index f4467a2e8c..72dda0ddec 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/IVoidable.java
@@ -1,6 +1,7 @@
package gregtech.api.interfaces.tileentity;
import java.util.List;
+import java.util.Set;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.FluidStack;
@@ -18,6 +19,10 @@ public interface IVoidable {
*/
boolean supportsVoidProtection();
+ default Set<VoidingMode> getAllowedVoidingModes() {
+ return VoidingMode.ALL_OPTIONS;
+ }
+
/**
* @return if this machine is configured to not void excess item.
*/
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 2f84151af9..e5fcc7a0a5 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
@@ -298,6 +298,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
// backward compatibility
voidingMode = aNBT.getBoolean(VOID_EXCESS_NBT_KEY) ? VoidingMode.VOID_ALL : VoidingMode.VOID_NONE;
}
+ if (!getAllowedVoidingModes().contains(voidingMode)) voidingMode = getDefaultVoidingMode();
int aOutputItemsLength = aNBT.getInteger("mOutputItemsLength");
if (aOutputItemsLength > 0) {
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
index 5575b0f9f1..3ad798c98a 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java
@@ -19,6 +19,7 @@ import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Set;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
@@ -36,6 +37,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Textures;
import gregtech.api.enums.Textures.BlockIcons;
+import gregtech.api.enums.VoidingMode;
import gregtech.api.interfaces.IHatchElement;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -479,6 +481,11 @@ public class GT_MetaTileEntity_AssemblyLine
return true;
}
+ @Override
+ public Set<VoidingMode> getAllowedVoidingModes() {
+ return VoidingMode.ITEM_ONLY_MODES;
+ }
+
private enum DataHatchElement implements IHatchElement<GT_MetaTileEntity_AssemblyLine> {
DataAccess;
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
index d7dcaea6ae..141e27ba16 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java
@@ -12,6 +12,8 @@ import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS
import static gregtech.api.util.GT_StructureUtility.buildHatchAdder;
import static gregtech.api.util.GT_StructureUtility.filterByMTETier;
+import java.util.Set;
+
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -40,6 +42,7 @@ import gregtech.GT_Mod;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.Textures;
+import gregtech.api.enums.VoidingMode;
import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
@@ -632,4 +635,9 @@ public abstract class GT_MetaTileEntity_FusionComputer
public boolean supportsVoidProtection() {
return true;
}
+
+ @Override
+ public Set<VoidingMode> getAllowedVoidingModes() {
+ return VoidingMode.FLUID_ONLY_MODES;
+ }
}