package net.minecraft.world.ticks; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import java.util.List; import java.util.Set; import net.minecraft.core.BlockPos; public class ProtoChunkTicks implements SerializableTickContainer, TickContainerAccess { private final List> ticks = Lists.>newArrayList(); private final Set> ticksPerPosition = new ObjectOpenCustomHashSet<>(SavedTick.UNIQUE_TICK_HASH); @Override public void schedule(ScheduledTick tick) { SavedTick savedTick = new SavedTick<>(tick.type(), tick.pos(), 0, tick.priority()); this.schedule(savedTick); } private void schedule(SavedTick tick) { if (this.ticksPerPosition.add(tick)) { this.ticks.add(tick); } } @Override public boolean hasScheduledTick(BlockPos pos, T type) { return this.ticksPerPosition.contains(SavedTick.probe(type, pos)); } @Override public int count() { return this.ticks.size(); } @Override public List> pack(long gametime) { return this.ticks; } public List> scheduledTicks() { return List.copyOf(this.ticks); } public static ProtoChunkTicks load(List> ticks) { ProtoChunkTicks protoChunkTicks = new ProtoChunkTicks<>(); ticks.forEach(protoChunkTicks::schedule); return protoChunkTicks; } }