58 lines
1.5 KiB
Java
58 lines
1.5 KiB
Java
package io.github.gaming32.opacbluemapintegration;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.level.ChunkPos;
|
|
|
|
public enum ChunkPosDirection {
|
|
LEFT(-1, 0),
|
|
FORWARD(0, 1),
|
|
RIGHT(1, 0),
|
|
BACKWARD(0, -1);
|
|
|
|
public final int x, z;
|
|
public final ChunkPos value;
|
|
|
|
ChunkPosDirection(int x, int z) {
|
|
this.x = x;
|
|
this.z = z;
|
|
this.value = new ChunkPos(x, z);
|
|
}
|
|
|
|
public ChunkPosDirection getLeft() {
|
|
return rotate(-1);
|
|
}
|
|
|
|
public ChunkPosDirection getRight() {
|
|
return rotate(1);
|
|
}
|
|
|
|
public ChunkPosDirection getOpposite() {
|
|
return rotate(2);
|
|
}
|
|
|
|
public ChunkPosDirection rotate(int clockwiseDistance) {
|
|
return values()[(ordinal() + clockwiseDistance) & 3];
|
|
}
|
|
|
|
public ChunkPos add(ChunkPos pos) {
|
|
return new ChunkPos(pos.x + x, pos.z + z);
|
|
}
|
|
|
|
public int getEdge(ChunkPos pos) {
|
|
return switch (this) {
|
|
case LEFT -> pos.getMinBlockX();
|
|
case FORWARD -> pos.getMaxBlockZ() + 1;
|
|
case RIGHT -> pos.getMaxBlockX() + 1;
|
|
case BACKWARD -> pos.getMinBlockZ();
|
|
};
|
|
}
|
|
|
|
public static BlockPos getCorner(ChunkPos pos, ChunkPosDirection a, ChunkPosDirection b) {
|
|
if (a == b || a.getOpposite() == b) {
|
|
throw new IllegalArgumentException("Corner can't be accessed with opposite directions");
|
|
}
|
|
return a.x != 0
|
|
? new BlockPos(a.getEdge(pos), 0, b.getEdge(pos))
|
|
: new BlockPos(b.getEdge(pos), 0, a.getEdge(pos));
|
|
}
|
|
}
|