50 lines
1.2 KiB
Java
50 lines
1.2 KiB
Java
package com.mojang.math;
|
|
|
|
import com.google.gson.JsonParseException;
|
|
import com.mojang.serialization.Codec;
|
|
import com.mojang.serialization.DataResult;
|
|
import net.minecraft.util.Mth;
|
|
|
|
public enum Quadrant {
|
|
R0(0),
|
|
R90(1),
|
|
R180(2),
|
|
R270(3);
|
|
|
|
public static final Codec<Quadrant> CODEC = Codec.INT.comapFlatMap(integer -> {
|
|
return switch (Mth.positiveModulo(integer, 360)) {
|
|
case 0 -> DataResult.success(R0);
|
|
case 90 -> DataResult.success(R90);
|
|
case 180 -> DataResult.success(R180);
|
|
case 270 -> DataResult.success(R270);
|
|
default -> DataResult.error(() -> "Invalid rotation " + integer + " found, only 0/90/180/270 allowed");
|
|
};
|
|
}, quadrant -> {
|
|
return switch (quadrant) {
|
|
case R0 -> 0;
|
|
case R90 -> 90;
|
|
case R180 -> 180;
|
|
case R270 -> 270;
|
|
};
|
|
});
|
|
public final int shift;
|
|
|
|
private Quadrant(final int shift) {
|
|
this.shift = shift;
|
|
}
|
|
|
|
@Deprecated
|
|
public static Quadrant parseJson(int rotation) {
|
|
return switch (Mth.positiveModulo(rotation, 360)) {
|
|
case 0 -> R0;
|
|
case 90 -> R90;
|
|
case 180 -> R180;
|
|
case 270 -> R270;
|
|
default -> throw new JsonParseException("Invalid rotation " + rotation + " found, only 0/90/180/270 allowed");
|
|
};
|
|
}
|
|
|
|
public int rotateVertexIndex(int shift) {
|
|
return (shift + this.shift) % 4;
|
|
}
|
|
}
|