Code/net/minecraft/server/level/ChunkTracker.java

74 lines
2.4 KiB
Java

package net.minecraft.server.level;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.lighting.DynamicGraphMinFixedPoint;
public abstract class ChunkTracker extends DynamicGraphMinFixedPoint {
protected ChunkTracker(int p_140701_, int p_140702_, int p_140703_) {
super(p_140701_, p_140702_, p_140703_);
}
@Override
protected boolean isSource(long p_140705_) {
return p_140705_ == ChunkPos.INVALID_CHUNK_POS;
}
@Override
protected void checkNeighborsAfterUpdate(long p_140707_, int p_140708_, boolean p_140709_) {
if (!p_140709_ || p_140708_ < this.levelCount - 2) {
ChunkPos chunkpos = new ChunkPos(p_140707_);
int i = chunkpos.x;
int j = chunkpos.z;
for (int k = -1; k <= 1; k++) {
for (int l = -1; l <= 1; l++) {
long i1 = ChunkPos.asLong(i + k, j + l);
if (i1 != p_140707_) {
this.checkNeighbor(p_140707_, i1, p_140708_, p_140709_);
}
}
}
}
}
@Override
protected int getComputedLevel(long p_140711_, long p_140712_, int p_140713_) {
int i = p_140713_;
ChunkPos chunkpos = new ChunkPos(p_140711_);
int j = chunkpos.x;
int k = chunkpos.z;
for (int l = -1; l <= 1; l++) {
for (int i1 = -1; i1 <= 1; i1++) {
long j1 = ChunkPos.asLong(j + l, k + i1);
if (j1 == p_140711_) {
j1 = ChunkPos.INVALID_CHUNK_POS;
}
if (j1 != p_140712_) {
int k1 = this.computeLevelFromNeighbor(j1, p_140711_, this.getLevel(j1));
if (i > k1) {
i = k1;
}
if (i == 0) {
return i;
}
}
}
}
return i;
}
@Override
protected int computeLevelFromNeighbor(long p_140720_, long p_140721_, int p_140722_) {
return p_140720_ == ChunkPos.INVALID_CHUNK_POS ? this.getLevelFromSource(p_140721_) : p_140722_ + 1;
}
protected abstract int getLevelFromSource(long p_140714_);
public void update(long p_140716_, int p_140717_, boolean p_140718_) {
this.checkEdge(ChunkPos.INVALID_CHUNK_POS, p_140716_, p_140717_, p_140718_);
}
}