76 lines
2.6 KiB
Java
76 lines
2.6 KiB
Java
package com.hypixel.hytale.server.worldgen.util.bounds;
|
|
|
|
import com.hypixel.hytale.math.util.ChunkUtil;
|
|
import com.hypixel.hytale.server.core.prefab.PrefabRotation;
|
|
import java.util.Random;
|
|
import javax.annotation.Nonnull;
|
|
|
|
public interface IChunkBounds {
|
|
int getLowBoundX();
|
|
|
|
int getLowBoundZ();
|
|
|
|
int getHighBoundX();
|
|
|
|
int getHighBoundZ();
|
|
|
|
default int getLowBoundX(@Nonnull PrefabRotation rotation) {
|
|
return Math.min(rotation.getX(this.getLowBoundX(), this.getLowBoundZ()), rotation.getX(this.getHighBoundX(), this.getHighBoundZ()));
|
|
}
|
|
|
|
default int getLowBoundZ(@Nonnull PrefabRotation rotation) {
|
|
return Math.min(rotation.getZ(this.getLowBoundX(), this.getLowBoundZ()), rotation.getZ(this.getHighBoundX(), this.getHighBoundZ()));
|
|
}
|
|
|
|
default int getHighBoundX(@Nonnull PrefabRotation rotation) {
|
|
return Math.max(rotation.getX(this.getLowBoundX(), this.getLowBoundZ()), rotation.getX(this.getHighBoundX(), this.getHighBoundZ()));
|
|
}
|
|
|
|
default int getHighBoundZ(@Nonnull PrefabRotation rotation) {
|
|
return Math.max(rotation.getZ(this.getLowBoundX(), this.getLowBoundZ()), rotation.getZ(this.getHighBoundX(), this.getHighBoundZ()));
|
|
}
|
|
|
|
default boolean intersectsChunk(long chunkIndex) {
|
|
return this.intersectsChunk(ChunkUtil.xOfChunkIndex(chunkIndex), ChunkUtil.zOfChunkIndex(chunkIndex));
|
|
}
|
|
|
|
default boolean intersectsChunk(int chunkX, int chunkZ) {
|
|
return ChunkUtil.maxBlock(chunkX) >= this.getLowBoundX()
|
|
&& ChunkUtil.minBlock(chunkX) <= this.getHighBoundX()
|
|
&& ChunkUtil.maxBlock(chunkZ) >= this.getLowBoundZ()
|
|
&& ChunkUtil.minBlock(chunkZ) <= this.getHighBoundZ();
|
|
}
|
|
|
|
default int randomX(@Nonnull Random random) {
|
|
return random.nextInt(this.getHighBoundX() - this.getLowBoundX()) + this.getLowBoundX();
|
|
}
|
|
|
|
default int randomZ(@Nonnull Random random) {
|
|
return random.nextInt(this.getHighBoundZ() - this.getLowBoundZ()) + this.getLowBoundZ();
|
|
}
|
|
|
|
default double fractionX(double d) {
|
|
return (this.getHighBoundX() - this.getLowBoundX()) * d + this.getLowBoundX();
|
|
}
|
|
|
|
default double fractionZ(double d) {
|
|
return (this.getHighBoundZ() - this.getLowBoundZ()) * d + this.getLowBoundZ();
|
|
}
|
|
|
|
default int getLowChunkX() {
|
|
return ChunkUtil.chunkCoordinate(this.getLowBoundX());
|
|
}
|
|
|
|
default int getLowChunkZ() {
|
|
return ChunkUtil.chunkCoordinate(this.getLowBoundZ());
|
|
}
|
|
|
|
default int getHighChunkX() {
|
|
return ChunkUtil.chunkCoordinate(this.getHighBoundX());
|
|
}
|
|
|
|
default int getHighChunkZ() {
|
|
return ChunkUtil.chunkCoordinate(this.getHighBoundZ());
|
|
}
|
|
}
|