package net.minecraft;
import com.bergerkiller.generated.net.minecraft.EnumChatFormatHandle;

class EnumChatFormat {
    enum (EnumChatFormatHandle) EnumChatFormat RESET;

#if version >= 1.18
    public int getId();
#else
    public int getId:b();
#endif

    <code>
    public static final Object[] RAW_VALUES = T.getType().getEnumConstants();
    public static final EnumChatFormatHandle[] VALUES;
    static {
        VALUES = new EnumChatFormatHandle[RAW_VALUES.length];
        for (int i = 0; i < VALUES.length; i++) {
            VALUES[i] = createHandle(RAW_VALUES[i]);
        }
    }

    public static EnumChatFormatHandle byChar(char c) {
        for (EnumChatFormatHandle format : VALUES) {
            String s = format.toString();
            if (s.length() >= 2 && s.charAt(1) == c) {
                return format;
            }
        }
        return RESET;
    }

    public static EnumChatFormatHandle byId(int id) {
        if (id >= 0) {
            for (EnumChatFormatHandle format : VALUES) {
                if (format.getId() == id) {
                    return format;
                }
            }
        }
        return RESET;
    }
    </code>
}

package net.minecraft.world;
import com.bergerkiller.generated.net.minecraft.world.EnumDifficultyHandle;
import com.bergerkiller.generated.net.minecraft.world.EnumHandHandle;

class EnumDifficulty {
#if version >= 1.18
    public int getId();
    public static (EnumDifficultyHandle) EnumDifficulty getById:byId(int id);
#else
    public int getId:a();
    public static (EnumDifficultyHandle) EnumDifficulty getById(int id);
#endif
}

// Since MC 1.9
optional class EnumHand {
    enum (EnumHandHandle) EnumHand MAIN_HAND;
    enum (EnumHandHandle) EnumHand OFF_HAND;
}

package net.minecraft.world.level;
import com.bergerkiller.generated.net.minecraft.world.level.EnumGamemodeHandle;
import com.bergerkiller.generated.net.minecraft.world.level.EnumSkyBlockHandle;

class EnumGamemode {
    public int getId();

#if version >= 1.18
    public static (EnumGamemodeHandle) EnumGamemode getById:byId(int id);
#else
    public static (EnumGamemodeHandle) EnumGamemode getById(int id);
#endif
}

class EnumSkyBlock {
    enum (EnumSkyBlockHandle) EnumSkyBlock SKY;
    enum (EnumSkyBlockHandle) EnumSkyBlock BLOCK;

    <code>
    public int ordinal() {
        return ((Enum<?>) getRaw()).ordinal();
    }
    </code>
}

package net.minecraft.core;
import com.bergerkiller.generated.net.minecraft.core.EnumDirectionHandle;
import com.bergerkiller.generated.net.minecraft.core.EnumDirectionHandle.EnumAxisHandle;

class EnumDirection {
    enum (EnumDirectionHandle) EnumDirection DOWN;
    enum (EnumDirectionHandle) EnumDirection UP;
    enum (EnumDirectionHandle) EnumDirection NORTH;
    enum (EnumDirectionHandle) EnumDirection SOUTH;
    enum (EnumDirectionHandle) EnumDirection WEST;
    enum (EnumDirectionHandle) EnumDirection EAST;

    class EnumDirection.EnumAxis {
        enum (EnumAxisHandle) EnumDirection.EnumAxis X;
        enum (EnumAxisHandle) EnumDirection.EnumAxis Y;
        enum (EnumAxisHandle) EnumDirection.EnumAxis Z;

        <code>
        public int ordinal() {
            return ((Enum<?>) getRaw()).ordinal();
        }
        </code>
    }
}