ModsMod/src/main/java/io/gitlab/jfronny/modsmod/IteratorCallbackList.java

144 lines
3.3 KiB
Java

package io.gitlab.jfronny.modsmod;
import net.fabricmc.loader.ModContainer;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.function.Consumer;
public class IteratorCallbackList implements List<ModContainer> {
private final List<ModContainer> containers;
private final Consumer<List<ModContainer>> reset;
boolean modified = false;
public IteratorCallbackList(List<ModContainer> base, Consumer<List<ModContainer>> reset) {
containers = Collections.synchronizedList(base);
this.reset = reset;
}
@Override
public int size() {
return containers.size();
}
@Override
public boolean isEmpty() {
return containers.isEmpty();
}
@Override
public boolean contains(Object o) {
return containers.contains(o);
}
@NotNull
@Override
public Iterator<ModContainer> iterator() {
if (!modified) {
ModsMod.init();
modified = true;
}
reset.accept(containers);
return containers.iterator();
}
@NotNull
@Override
public Object[] toArray() {
return containers.toArray();
}
@NotNull
@Override
public <T> T[] toArray(@NotNull T[] ts) {
return containers.toArray(ts);
}
@Override
public boolean add(ModContainer modContainer) {
return containers.add(modContainer);
}
@Override
public boolean remove(Object o) {
return containers.remove(o);
}
@Override
public boolean containsAll(@NotNull Collection<?> collection) {
return containers.containsAll(collection);
}
@Override
public boolean addAll(@NotNull Collection<? extends ModContainer> collection) {
return containers.addAll(collection);
}
@Override
public boolean addAll(int i, @NotNull Collection<? extends ModContainer> collection) {
return containers.addAll(i, collection);
}
@Override
public boolean removeAll(@NotNull Collection<?> collection) {
return containers.removeAll(collection);
}
@Override
public boolean retainAll(@NotNull Collection<?> collection) {
return containers.removeAll(collection);
}
@Override
public void clear() {
containers.clear();
}
@Override
public ModContainer get(int i) {
return containers.get(i);
}
@Override
public ModContainer set(int i, ModContainer modContainer) {
return containers.set(i, modContainer);
}
@Override
public void add(int i, ModContainer modContainer) {
containers.add(i, modContainer);
}
@Override
public ModContainer remove(int i) {
return containers.remove(i);
}
@Override
public int indexOf(Object o) {
return containers.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return containers.lastIndexOf(o);
}
@NotNull
@Override
public ListIterator<ModContainer> listIterator() {
return containers.listIterator();
}
@NotNull
@Override
public ListIterator<ModContainer> listIterator(int i) {
return containers.listIterator(i);
}
@NotNull
@Override
public List<ModContainer> subList(int i, int i1) {
return containers.subList(i, i1);
}
}