hytale-server/com/hypixel/hytale/server/worldgen/util/bounds/ChunkBounds.java

128 lines
2.8 KiB
Java

package com.hypixel.hytale.server.worldgen.util.bounds;
import com.hypixel.hytale.math.util.MathUtil;
import javax.annotation.Nonnull;
public class ChunkBounds implements IChunkBounds {
protected int minX;
protected int minZ;
protected int maxX;
protected int maxZ;
public ChunkBounds() {
this(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE);
}
public ChunkBounds(@Nonnull IChunkBounds bounds) {
this(bounds.getLowBoundX(), bounds.getLowBoundZ(), bounds.getHighBoundX(), bounds.getHighBoundZ());
}
public ChunkBounds(int minX, int minZ, int maxX, int maxZ) {
this.minX = minX;
this.minZ = minZ;
this.maxX = maxX;
this.maxZ = maxZ;
}
public ChunkBounds(int x, int z) {
this.minX = this.maxX = x;
this.minZ = this.maxZ = z;
}
@Override
public int getLowBoundX() {
return this.minX;
}
@Override
public int getLowBoundZ() {
return this.minZ;
}
@Override
public int getHighBoundX() {
return this.maxX;
}
@Override
public int getHighBoundZ() {
return this.maxZ;
}
public void expandNegative(int x, int z) {
this.minX += x;
this.minZ += z;
}
public void expandPositive(int x, int z) {
this.maxX += x;
this.maxZ += z;
}
public void expandNegative(double x, double z) {
this.minX = MathUtil.floor(this.minX + x);
this.minZ = MathUtil.floor(this.minZ + z);
}
public void expandPositive(double x, double z) {
this.maxX = MathUtil.ceil(this.maxX + x);
this.maxZ = MathUtil.ceil(this.maxZ + z);
}
public void include(int minX, int minZ, int maxX, int maxZ) {
if (this.minX > minX) {
this.minX = minX;
}
if (this.minZ > minZ) {
this.minZ = minZ;
}
if (this.maxX < maxX) {
this.maxX = maxX;
}
if (this.maxZ < maxZ) {
this.maxZ = maxZ;
}
}
public void include(int x, int z) {
if (this.minX > x) {
this.minX = x;
} else if (this.maxX < x) {
this.maxX = x;
}
if (this.minZ > z) {
this.minZ = z;
} else if (this.maxZ < z) {
this.maxZ = z;
}
}
public void include(@Nonnull IChunkBounds box) {
if (this.minX > box.getLowBoundX()) {
this.minX = box.getLowBoundX();
}
if (this.minZ > box.getLowBoundZ()) {
this.minZ = box.getLowBoundZ();
}
if (this.maxX < box.getHighBoundX()) {
this.maxX = box.getHighBoundX();
}
if (this.maxZ < box.getHighBoundZ()) {
this.maxZ = box.getHighBoundZ();
}
}
@Nonnull
@Override
public String toString() {
return "ChunkBounds{minX=" + this.minX + ", minZ=" + this.minZ + ", maxX=" + this.maxX + ", maxZ=" + this.maxZ + "}";
}
}