hytale-server/com/hypixel/hytale/server/worldgen/util/bounds/IChunkBounds.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());
}
}