diff options
author | NotAPenguin <michiel.vandeginste@gmail.com> | 2024-09-15 23:30:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-15 23:30:13 +0200 |
commit | 5f6011f705c75007b48735d02e590581c78ca8db (patch) | |
tree | 9b7f240e568d11c2396dc1e8b9997bbdf61c83ca /src/main/java/gregtech/api/util | |
parent | dda786c0183f6655a4a264edf2d75688e7fe895e (diff) | |
download | GT5-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.java | 12 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GTUtil.java | 3 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GTUtility.java | 10 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/ValidMTEList.java | 60 |
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(); + } +} |