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

66 lines
2.1 KiB
Java

package net.minecraft.server.level;
import net.minecraft.core.SectionPos;
import net.minecraft.world.level.lighting.DynamicGraphMinFixedPoint;
public abstract class SectionTracker extends DynamicGraphMinFixedPoint {
protected SectionTracker(int p_8274_, int p_8275_, int p_8276_) {
super(p_8274_, p_8275_, p_8276_);
}
@Override
protected void checkNeighborsAfterUpdate(long p_8280_, int p_8281_, boolean p_8282_) {
if (!p_8282_ || p_8281_ < this.levelCount - 2) {
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
for (int k = -1; k <= 1; k++) {
long l = SectionPos.offset(p_8280_, i, j, k);
if (l != p_8280_) {
this.checkNeighbor(p_8280_, l, p_8281_, p_8282_);
}
}
}
}
}
}
@Override
protected int getComputedLevel(long p_8284_, long p_8285_, int p_8286_) {
int i = p_8286_;
for (int j = -1; j <= 1; j++) {
for (int k = -1; k <= 1; k++) {
for (int l = -1; l <= 1; l++) {
long i1 = SectionPos.offset(p_8284_, j, k, l);
if (i1 == p_8284_) {
i1 = Long.MAX_VALUE;
}
if (i1 != p_8285_) {
int j1 = this.computeLevelFromNeighbor(i1, p_8284_, this.getLevel(i1));
if (i > j1) {
i = j1;
}
if (i == 0) {
return i;
}
}
}
}
}
return i;
}
@Override
protected int computeLevelFromNeighbor(long p_8293_, long p_8294_, int p_8295_) {
return this.isSource(p_8293_) ? this.getLevelFromSource(p_8294_) : p_8295_ + 1;
}
protected abstract int getLevelFromSource(long p_8287_);
public void update(long p_8289_, int p_8290_, boolean p_8291_) {
this.checkEdge(Long.MAX_VALUE, p_8289_, p_8290_, p_8291_);
}
}