Newer
Older
void-pack-super-server / work / decompile-ee3ecae0 / net / minecraft / server / ProtoChunkTickList.java
package net.minecraft.server;

import it.unimi.dsi.fastutil.shorts.ShortList;
import it.unimi.dsi.fastutil.shorts.ShortListIterator;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class ProtoChunkTickList<T> implements TickList<T> {

    protected final Predicate<T> a;
    private final ChunkCoordIntPair b;
    private final ShortList[] c;

    public ProtoChunkTickList(Predicate<T> predicate, ChunkCoordIntPair chunkcoordintpair) {
        this(predicate, chunkcoordintpair, new NBTTagList());
    }

    public ProtoChunkTickList(Predicate<T> predicate, ChunkCoordIntPair chunkcoordintpair, NBTTagList nbttaglist) {
        this.c = new ShortList[16];
        this.a = predicate;
        this.b = chunkcoordintpair;

        for (int i = 0; i < nbttaglist.size(); ++i) {
            NBTTagList nbttaglist1 = nbttaglist.b(i);

            for (int j = 0; j < nbttaglist1.size(); ++j) {
                IChunkAccess.a(this.c, i).add(nbttaglist1.d(j));
            }
        }

    }

    public NBTTagList b() {
        return ChunkRegionLoader.a(this.c);
    }

    public void a(TickList<T> ticklist, Function<BlockPosition, T> function) {
        for (int i = 0; i < this.c.length; ++i) {
            if (this.c[i] != null) {
                ShortListIterator shortlistiterator = this.c[i].iterator();

                while (shortlistiterator.hasNext()) {
                    Short oshort = (Short) shortlistiterator.next();
                    BlockPosition blockposition = ProtoChunk.a(oshort, i, this.b);

                    ticklist.a(blockposition, function.apply(blockposition), 0);
                }

                this.c[i].clear();
            }
        }

    }

    @Override
    public boolean a(BlockPosition blockposition, T t0) {
        return false;
    }

    @Override
    public void a(BlockPosition blockposition, T t0, int i, TickListPriority ticklistpriority) {
        IChunkAccess.a(this.c, blockposition.getY() >> 4).add(ProtoChunk.k(blockposition));
    }

    @Override
    public boolean b(BlockPosition blockposition, T t0) {
        return false;
    }

    @Override
    public void a(Stream<NextTickListEntry<T>> stream) {
        stream.forEach((nextticklistentry) -> {
            this.a(nextticklistentry.a, nextticklistentry.b(), 0, nextticklistentry.c);
        });
    }
}