66 lines
2.1 KiB
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_);
|
||
|
}
|
||
|
}
|