From 5f6011f705c75007b48735d02e590581c78ca8db Mon Sep 17 00:00:00 2001 From: NotAPenguin Date: Sun, 15 Sep 2024 23:30:13 +0200 Subject: Small optimizations & MultiBlockBase cleanup (#3197) Co-authored-by: Martin Robertz --- src/main/java/gregtech/api/util/ValidMTEList.java | 60 +++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/main/java/gregtech/api/util/ValidMTEList.java (limited to 'src/main/java/gregtech/api/util/ValidMTEList.java') 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, T extends MetaTileEntity> implements Iterable { + + private final E collection; + + public ValidMTEList(E collection) { + this.collection = collection; + } + + private class ValidMTEIterator implements Iterator { + + Iterator 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 iterator() { + return new ValidMTEIterator(); + } +} -- cgit