package net.minecraft.core; import net.minecraft.Util; import net.minecraft.util.StringRepresentable; public enum FrontAndTop implements StringRepresentable { DOWN_EAST("down_east", Direction.DOWN, Direction.EAST), DOWN_NORTH("down_north", Direction.DOWN, Direction.NORTH), DOWN_SOUTH("down_south", Direction.DOWN, Direction.SOUTH), DOWN_WEST("down_west", Direction.DOWN, Direction.WEST), UP_EAST("up_east", Direction.UP, Direction.EAST), UP_NORTH("up_north", Direction.UP, Direction.NORTH), UP_SOUTH("up_south", Direction.UP, Direction.SOUTH), UP_WEST("up_west", Direction.UP, Direction.WEST), WEST_UP("west_up", Direction.WEST, Direction.UP), EAST_UP("east_up", Direction.EAST, Direction.UP), NORTH_UP("north_up", Direction.NORTH, Direction.UP), SOUTH_UP("south_up", Direction.SOUTH, Direction.UP); private static final int NUM_DIRECTIONS = Direction.values().length; private static final FrontAndTop[] BY_TOP_FRONT = Util.make(new FrontAndTop[NUM_DIRECTIONS * NUM_DIRECTIONS], frontAndTops -> { for (FrontAndTop frontAndTop : values()) { frontAndTops[lookupKey(frontAndTop.front, frontAndTop.top)] = frontAndTop; } }); private final String name; private final Direction top; private final Direction front; private static int lookupKey(Direction front, Direction top) { return front.ordinal() * NUM_DIRECTIONS + top.ordinal(); } private FrontAndTop(final String name, final Direction front, final Direction top) { this.name = name; this.front = front; this.top = top; } @Override public String getSerializedName() { return this.name; } public static FrontAndTop fromFrontAndTop(Direction front, Direction top) { return BY_TOP_FRONT[lookupKey(front, top)]; } public Direction front() { return this.front; } public Direction top() { return this.top; } }