aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util
diff options
context:
space:
mode:
authorNotAPenguin <michiel.vandeginste@gmail.com>2024-09-15 23:30:13 +0200
committerGitHub <noreply@github.com>2024-09-15 23:30:13 +0200
commit5f6011f705c75007b48735d02e590581c78ca8db (patch)
tree9b7f240e568d11c2396dc1e8b9997bbdf61c83ca /src/main/java/gregtech/api/util
parentdda786c0183f6655a4a264edf2d75688e7fe895e (diff)
downloadGT5-Unofficial-5f6011f705c75007b48735d02e590581c78ca8db.tar.gz
GT5-Unofficial-5f6011f705c75007b48735d02e590581c78ca8db.tar.bz2
GT5-Unofficial-5f6011f705c75007b48735d02e590581c78ca8db.zip
Small optimizations & MultiBlockBase cleanup (#3197)
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r--src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java12
-rw-r--r--src/main/java/gregtech/api/util/GTUtil.java3
-rw-r--r--src/main/java/gregtech/api/util/GTUtility.java10
-rw-r--r--src/main/java/gregtech/api/util/ValidMTEList.java60
4 files changed, 77 insertions, 8 deletions
diff --git a/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java b/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java
index 6640f03835..55d2b87f3b 100644
--- a/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java
+++ b/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java
@@ -1,6 +1,6 @@
package gregtech.api.util;
-import static gregtech.api.util.GTUtility.filterValidMTEs;
+import static gregtech.api.util.GTUtility.validMTEList;
import java.util.ArrayList;
import java.util.Collection;
@@ -52,7 +52,7 @@ public class ExoticEnergyInputHelper {
public static long getTotalEuMulti(Collection<? extends MTEHatch> hatches) {
long rEU = 0L;
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
rEU += tHatch.getBaseMetaTileEntity()
.getInputVoltage() * tHatch.maxWorkingAmperesIn();
}
@@ -61,7 +61,7 @@ public class ExoticEnergyInputHelper {
public static long getMaxInputVoltageMulti(Collection<? extends MTEHatch> hatches) {
long rVoltage = 0;
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
rVoltage += tHatch.getBaseMetaTileEntity()
.getInputVoltage();
}
@@ -70,7 +70,7 @@ public class ExoticEnergyInputHelper {
public static long getAverageInputVoltageMulti(Collection<? extends MTEHatch> hatches) {
long rVoltage = 0;
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
rVoltage += tHatch.getBaseMetaTileEntity()
.getInputVoltage();
}
@@ -82,7 +82,7 @@ public class ExoticEnergyInputHelper {
public static long getMaxInputAmpsMulti(Collection<? extends MTEHatch> hatches) {
long rAmp = 0;
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
rAmp += tHatch.getBaseMetaTileEntity()
.getInputAmperage();
}
@@ -91,7 +91,7 @@ public class ExoticEnergyInputHelper {
public static long getMaxWorkingInputAmpsMulti(Collection<? extends MTEHatch> hatches) {
long rAmp = 0;
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
rAmp += tHatch.maxWorkingAmperesIn();
}
return rAmp;
diff --git a/src/main/java/gregtech/api/util/GTUtil.java b/src/main/java/gregtech/api/util/GTUtil.java
index d1dd308449..8923bca954 100644
--- a/src/main/java/gregtech/api/util/GTUtil.java
+++ b/src/main/java/gregtech/api/util/GTUtil.java
@@ -1,6 +1,7 @@
package gregtech.api.util;
import static gregtech.api.util.GTUtility.filterValidMTEs;
+import static gregtech.api.util.GTUtility.validMTEList;
import java.util.ArrayList;
import java.util.List;
@@ -330,7 +331,7 @@ public class GTUtil {
private static NBTTagList saveConfigurationToDataStick(EntityPlayer player, List<? extends MTEHatch> hatches) {
NBTTagList list = new NBTTagList();
- for (MTEHatch tHatch : filterValidMTEs(hatches)) {
+ for (MTEHatch tHatch : validMTEList(hatches)) {
if (!(tHatch instanceof IDataCopyable copyable)) {
list.appendTag(new NBTTagCompound());
continue;
diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java
index ede680ba62..442ba2a562 100644
--- a/src/main/java/gregtech/api/util/GTUtility.java
+++ b/src/main/java/gregtech/api/util/GTUtility.java
@@ -4028,13 +4028,21 @@ public class GTUtility {
}
/**
- * @return Supplied collection that doesn't contain invalid MetaTileEntities
+ * @return Supplied collection that doesn't contain invalid MetaTileEntities.
*/
public static <T extends Collection<E>, E extends MetaTileEntity> T filterValidMTEs(T metaTileEntities) {
metaTileEntities.removeIf(mte -> mte == null || !mte.isValid());
return metaTileEntities;
}
+ /**
+ * @return Supplied collection that removes invalid MTEs from the collection while it is being iterated
+ */
+ public static <T extends Collection<E>, E extends MetaTileEntity> ValidMTEList<T, E> validMTEList(
+ T metaTileEntities) {
+ return new ValidMTEList<>(metaTileEntities);
+ }
+
public static ForgeDirection getSideFromPlayerFacing(Entity player) {
if (player == null) return ForgeDirection.UNKNOWN;
if (player.rotationPitch >= 65) return ForgeDirection.UP;
diff --git a/src/main/java/gregtech/api/util/ValidMTEList.java b/src/main/java/gregtech/api/util/ValidMTEList.java
new file mode 100644
index 0000000000..95f4cd7ad0
--- /dev/null
+++ b/src/main/java/gregtech/api/util/ValidMTEList.java
@@ -0,0 +1,60 @@
+package gregtech.api.util;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+import org.jetbrains.annotations.NotNull;
+
+import gregtech.api.metatileentity.MetaTileEntity;
+
+public class ValidMTEList<E extends Collection<T>, T extends MetaTileEntity> implements Iterable<T> {
+
+ private final E collection;
+
+ public ValidMTEList(E collection) {
+ this.collection = collection;
+ }
+
+ private class ValidMTEIterator implements Iterator<T> {
+
+ Iterator<T> iterator = collection.iterator();
+
+ T nextObject = null;
+ boolean nextObjectSet = false;
+
+ private boolean setNextObject() {
+ while (iterator.hasNext()) {
+ final T object = iterator.next();
+ if (object != null && object.isValid()) {
+ nextObject = object;
+ nextObjectSet = true;
+ return true;
+ } else {
+ iterator.remove();
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return nextObjectSet || setNextObject();
+ }
+
+ @Override
+ public T next() {
+ if (!nextObjectSet && !setNextObject()) {
+ throw new NoSuchElementException();
+ }
+ nextObjectSet = false;
+ return nextObject;
+
+ }
+ }
+
+ @Override
+ public @NotNull Iterator<T> iterator() {
+ return new ValidMTEIterator();
+ }
+}