001    package org.bukkit;
002    
003    /**
004     * Represents an achievement, which may be given to players.
005     */
006    public enum Achievement {
007        OPEN_INVENTORY,
008        MINE_WOOD (OPEN_INVENTORY),
009        BUILD_WORKBENCH (MINE_WOOD),
010        BUILD_PICKAXE (BUILD_WORKBENCH),
011        BUILD_FURNACE (BUILD_PICKAXE),
012        ACQUIRE_IRON (BUILD_FURNACE),
013        BUILD_HOE (BUILD_WORKBENCH),
014        MAKE_BREAD (BUILD_HOE),
015        BAKE_CAKE (BUILD_HOE),
016        BUILD_BETTER_PICKAXE (BUILD_PICKAXE),
017        COOK_FISH (BUILD_FURNACE),
018        ON_A_RAIL (ACQUIRE_IRON),
019        BUILD_SWORD (BUILD_WORKBENCH),
020        KILL_ENEMY (BUILD_SWORD),
021        KILL_COW (BUILD_SWORD),
022        FLY_PIG (KILL_COW),
023        SNIPE_SKELETON (KILL_ENEMY),
024        GET_DIAMONDS (ACQUIRE_IRON),
025        NETHER_PORTAL (GET_DIAMONDS),
026        GHAST_RETURN (NETHER_PORTAL),
027        GET_BLAZE_ROD (NETHER_PORTAL),
028        BREW_POTION (GET_BLAZE_ROD),
029        END_PORTAL (GET_BLAZE_ROD),
030        THE_END (END_PORTAL),
031        ENCHANTMENTS (GET_DIAMONDS),
032        OVERKILL (ENCHANTMENTS),
033        BOOKCASE (ENCHANTMENTS),
034        EXPLORE_ALL_BIOMES (END_PORTAL),
035        SPAWN_WITHER (THE_END),
036        KILL_WITHER (SPAWN_WITHER),
037        FULL_BEACON (KILL_WITHER),
038        BREED_COW (KILL_COW),
039        DIAMONDS_TO_YOU (GET_DIAMONDS),
040        ;
041    
042        private final Achievement parent;
043    
044        private Achievement() {
045            parent = null;
046        }
047    
048        private Achievement(Achievement parent) {
049            this.parent = parent;
050        }
051    
052        /**
053         * Returns whether or not this achievement has a parent achievement.
054         * 
055         * @return whether the achievement has a parent achievement
056         */
057        public boolean hasParent() {
058            return parent != null;
059        }
060    
061        /**
062         * Returns the parent achievement of this achievement, or null if none.
063         * 
064         * @return the parent achievement or null
065         */
066        public Achievement getParent() {
067            return parent;
068        }
069    }