001    package org.bukkit;
002    
003    import java.util.Map;
004    
005    import org.bukkit.entity.HumanEntity;
006    
007    import com.google.common.collect.Maps;
008    
009    /**
010     * Represents the various type of game modes that {@link HumanEntity}s may
011     * have
012     */
013    public enum GameMode {
014        /**
015         * Creative mode may fly, build instantly, become invulnerable and create
016         * free items.
017         */
018        CREATIVE(1),
019    
020        /**
021         * Survival mode is the "normal" gameplay type, with no special features.
022         */
023        SURVIVAL(0),
024    
025        /**
026         * Adventure mode cannot break blocks without the correct tools.
027         */
028        ADVENTURE(2);
029    
030        private final int value;
031        private final static Map<Integer, GameMode> BY_ID = Maps.newHashMap();
032    
033        private GameMode(final int value) {
034            this.value = value;
035        }
036    
037        /**
038         * Gets the mode value associated with this GameMode
039         *
040         * @return An integer value of this gamemode
041         * @deprecated Magic value
042         */
043        @Deprecated
044        public int getValue() {
045            return value;
046        }
047    
048        /**
049         * Gets the GameMode represented by the specified value
050         *
051         * @param value Value to check
052         * @return Associative {@link GameMode} with the given value, or null if
053         *     it doesn't exist
054         * @deprecated Magic value
055         */
056        @Deprecated
057        public static GameMode getByValue(final int value) {
058            return BY_ID.get(value);
059        }
060    
061        static {
062            for (GameMode mode : values()) {
063                BY_ID.put(mode.getValue(), mode);
064            }
065        }
066    }