Spaces:
Build error
Build error
File size: 4,321 Bytes
d46f4a3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
package net.minecraft.world.ticks;
import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.ListTag;
import net.minecraft.world.level.ChunkPos;
public class LevelChunkTicks<T> implements SerializableTickContainer<T>, TickContainerAccess<T> {
private final Queue<ScheduledTick<T>> tickQueue = new PriorityQueue<>(ScheduledTick.DRAIN_ORDER);
@Nullable
private List<SavedTick<T>> pendingTicks;
private final Set<ScheduledTick<?>> ticksPerPosition = new ObjectOpenCustomHashSet<>(ScheduledTick.UNIQUE_TICK_HASH);
@Nullable
private BiConsumer<LevelChunkTicks<T>, ScheduledTick<T>> onTickAdded;
public LevelChunkTicks() {
}
public LevelChunkTicks(List<SavedTick<T>> p_193169_) {
this.pendingTicks = p_193169_;
for (SavedTick<T> savedtick : p_193169_) {
this.ticksPerPosition.add(ScheduledTick.probe(savedtick.type(), savedtick.pos()));
}
}
public void setOnTickAdded(@Nullable BiConsumer<LevelChunkTicks<T>, ScheduledTick<T>> p_193182_) {
this.onTickAdded = p_193182_;
}
@Nullable
public ScheduledTick<T> peek() {
return this.tickQueue.peek();
}
@Nullable
public ScheduledTick<T> poll() {
ScheduledTick<T> scheduledtick = this.tickQueue.poll();
if (scheduledtick != null) {
this.ticksPerPosition.remove(scheduledtick);
}
return scheduledtick;
}
@Override
public void schedule(ScheduledTick<T> p_193177_) {
if (this.ticksPerPosition.add(p_193177_)) {
this.scheduleUnchecked(p_193177_);
}
}
private void scheduleUnchecked(ScheduledTick<T> p_193194_) {
this.tickQueue.add(p_193194_);
if (this.onTickAdded != null) {
this.onTickAdded.accept(this, p_193194_);
}
}
@Override
public boolean hasScheduledTick(BlockPos p_193179_, T p_193180_) {
return this.ticksPerPosition.contains(ScheduledTick.probe(p_193180_, p_193179_));
}
public void removeIf(Predicate<ScheduledTick<T>> p_193184_) {
Iterator<ScheduledTick<T>> iterator = this.tickQueue.iterator();
while (iterator.hasNext()) {
ScheduledTick<T> scheduledtick = iterator.next();
if (p_193184_.test(scheduledtick)) {
iterator.remove();
this.ticksPerPosition.remove(scheduledtick);
}
}
}
public Stream<ScheduledTick<T>> getAll() {
return this.tickQueue.stream();
}
@Override
public int count() {
return this.tickQueue.size() + (this.pendingTicks != null ? this.pendingTicks.size() : 0);
}
@Override
public List<SavedTick<T>> pack(long p_360739_) {
List<SavedTick<T>> list = new ArrayList<>(this.tickQueue.size());
if (this.pendingTicks != null) {
list.addAll(this.pendingTicks);
}
for (ScheduledTick<T> scheduledtick : this.tickQueue) {
list.add(scheduledtick.toSavedTick(p_360739_));
}
return list;
}
public ListTag save(long p_193174_, Function<T, String> p_193175_) {
ListTag listtag = new ListTag();
for (SavedTick<T> savedtick : this.pack(p_193174_)) {
listtag.add(savedtick.save(p_193175_));
}
return listtag;
}
public void unpack(long p_193172_) {
if (this.pendingTicks != null) {
int i = -this.pendingTicks.size();
for (SavedTick<T> savedtick : this.pendingTicks) {
this.scheduleUnchecked(savedtick.unpack(p_193172_, (long)(i++)));
}
}
this.pendingTicks = null;
}
public static <T> LevelChunkTicks<T> load(ListTag p_193186_, Function<String, Optional<T>> p_193187_, ChunkPos p_193188_) {
return new LevelChunkTicks<>(SavedTick.loadTickList(p_193186_, p_193187_, p_193188_));
}
} |