package org.bukkit;

/**
 * Represents an achievement, which may be given to players.
 */
public enum Achievement {
    OPEN_INVENTORY,
    MINE_WOOD (OPEN_INVENTORY),
    BUILD_WORKBENCH (MINE_WOOD),
    BUILD_PICKAXE (BUILD_WORKBENCH),
    BUILD_FURNACE (BUILD_PICKAXE),
    ACQUIRE_IRON (BUILD_FURNACE),
    BUILD_HOE (BUILD_WORKBENCH),
    MAKE_BREAD (BUILD_HOE),
    BAKE_CAKE (BUILD_HOE),
    BUILD_BETTER_PICKAXE (BUILD_PICKAXE),
    COOK_FISH (BUILD_FURNACE),
    ON_A_RAIL (ACQUIRE_IRON),
    BUILD_SWORD (BUILD_WORKBENCH),
    KILL_ENEMY (BUILD_SWORD),
    KILL_COW (BUILD_SWORD),
    FLY_PIG (KILL_COW),
    SNIPE_SKELETON (KILL_ENEMY),
    GET_DIAMONDS (ACQUIRE_IRON),
    NETHER_PORTAL (GET_DIAMONDS),
    GHAST_RETURN (NETHER_PORTAL),
    GET_BLAZE_ROD (NETHER_PORTAL),
    BREW_POTION (GET_BLAZE_ROD),
    END_PORTAL (GET_BLAZE_ROD),
    THE_END (END_PORTAL),
    ENCHANTMENTS (GET_DIAMONDS),
    OVERKILL (ENCHANTMENTS),
    BOOKCASE (ENCHANTMENTS),
    EXPLORE_ALL_BIOMES (END_PORTAL),
    SPAWN_WITHER (THE_END),
    KILL_WITHER (SPAWN_WITHER),
    FULL_BEACON (KILL_WITHER),
    BREED_COW (KILL_COW),
    DIAMONDS_TO_YOU (GET_DIAMONDS),
    ;

    private final Achievement parent;

    private Achievement() {
        parent = null;
    }

    private Achievement(Achievement parent) {
        this.parent = parent;
    }

    /**
     * Returns whether or not this achievement has a parent achievement.
     * 
     * @return whether the achievement has a parent achievement
     */
    public boolean hasParent() {
        return parent != null;
    }

    /**
     * Returns the parent achievement of this achievement, or null if none.
     * 
     * @return the parent achievement or null
     */
    public Achievement getParent() {
        return parent;
    }
}
