2022-05-06 17:41:02 +02:00
|
|
|
package com.falsepattern.lib.compat;
|
|
|
|
|
|
2022-05-06 23:53:11 +02:00
|
|
|
import com.falsepattern.lib.StableAPI;
|
2022-05-31 14:19:19 +01:00
|
|
|
import lombok.*;
|
2022-05-06 17:41:02 +02:00
|
|
|
import net.minecraft.util.EnumFacing;
|
|
|
|
|
|
2022-05-31 14:19:19 +01:00
|
|
|
import java.util.Arrays;
|
|
|
|
|
|
2022-05-06 23:53:11 +02:00
|
|
|
@StableAPI(since = "0.6.0")
|
2022-05-06 17:41:02 +02:00
|
|
|
public enum Rotation {
|
2022-05-31 14:19:19 +01:00
|
|
|
NONE, CLOCKWISE_90, CLOCKWISE_180, COUNTERCLOCKWISE_90;
|
2022-05-06 17:41:02 +02:00
|
|
|
|
2022-05-31 14:19:19 +01:00
|
|
|
public Rotation add(@NonNull Rotation rotation) {
|
2022-05-06 17:41:02 +02:00
|
|
|
switch (rotation) {
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
switch (this) {
|
|
|
|
|
case NONE:
|
|
|
|
|
return CLOCKWISE_180;
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
return COUNTERCLOCKWISE_90;
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
return NONE;
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
return CLOCKWISE_90;
|
|
|
|
|
}
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
switch (this) {
|
|
|
|
|
case NONE:
|
|
|
|
|
return COUNTERCLOCKWISE_90;
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
return NONE;
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
return CLOCKWISE_90;
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
return CLOCKWISE_180;
|
|
|
|
|
}
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
switch (this) {
|
|
|
|
|
case NONE:
|
|
|
|
|
return CLOCKWISE_90;
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
return CLOCKWISE_180;
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
return COUNTERCLOCKWISE_90;
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
return NONE;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
return this;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-31 14:19:19 +01:00
|
|
|
public EnumFacing rotate(@NonNull EnumFacing facing) {
|
2022-05-06 17:41:02 +02:00
|
|
|
if (facing == EnumFacing.UP || facing == EnumFacing.DOWN) {
|
|
|
|
|
return facing;
|
|
|
|
|
}
|
|
|
|
|
switch (this) {
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
switch (facing) {
|
|
|
|
|
case NORTH:
|
|
|
|
|
return EnumFacing.EAST;
|
|
|
|
|
case EAST:
|
|
|
|
|
return EnumFacing.SOUTH;
|
|
|
|
|
case SOUTH:
|
|
|
|
|
return EnumFacing.WEST;
|
|
|
|
|
case WEST:
|
|
|
|
|
return EnumFacing.NORTH;
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalStateException("Unable to get Y-rotated facing of " + facing);
|
|
|
|
|
}
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
switch (facing) {
|
|
|
|
|
case NORTH:
|
|
|
|
|
return EnumFacing.SOUTH;
|
|
|
|
|
case EAST:
|
|
|
|
|
return EnumFacing.WEST;
|
|
|
|
|
case SOUTH:
|
|
|
|
|
return EnumFacing.NORTH;
|
|
|
|
|
case WEST:
|
|
|
|
|
return EnumFacing.EAST;
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalStateException("Unable to get Y-rotated facing of " + facing);
|
|
|
|
|
}
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
switch (facing) {
|
|
|
|
|
case NORTH:
|
|
|
|
|
return EnumFacing.WEST;
|
|
|
|
|
case EAST:
|
|
|
|
|
return EnumFacing.NORTH;
|
|
|
|
|
case SOUTH:
|
|
|
|
|
return EnumFacing.EAST;
|
|
|
|
|
case WEST:
|
|
|
|
|
return EnumFacing.SOUTH;
|
|
|
|
|
default:
|
|
|
|
|
throw new IllegalStateException("Unable to get Y-rotated facing of " + facing);
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
return facing;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int rotate(int x, int z) {
|
|
|
|
|
switch (this) {
|
|
|
|
|
case CLOCKWISE_90:
|
|
|
|
|
return (x + z / 4) % z;
|
|
|
|
|
case CLOCKWISE_180:
|
|
|
|
|
return (x + z / 2) % z;
|
|
|
|
|
case COUNTERCLOCKWISE_90:
|
|
|
|
|
return (x + z * 3 / 4) % z;
|
|
|
|
|
default:
|
|
|
|
|
return x;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|