001 package org.bukkit;
002
003 import java.util.Map;
004
005 import com.google.common.collect.Maps;
006
007 import org.bukkit.block.BlockFace;
008 import org.bukkit.potion.Potion;
009
010 /**
011 * A list of effects that the server is able to send to players.
012 */
013 public enum Effect {
014 /**
015 * An alternate click sound.
016 */
017 CLICK2(1000, Type.SOUND),
018 /**
019 * A click sound.
020 */
021 CLICK1(1001, Type.SOUND),
022 /**
023 * Sound of a bow firing.
024 */
025 BOW_FIRE(1002, Type.SOUND),
026 /**
027 * Sound of a door opening/closing.
028 */
029 DOOR_TOGGLE(1003, Type.SOUND),
030 /**
031 * Sound of fire being extinguished.
032 */
033 EXTINGUISH(1004, Type.SOUND),
034 /**
035 * A song from a record. Needs the record item ID as additional info
036 */
037 RECORD_PLAY(1005, Type.SOUND, Material.class),
038 /**
039 * Sound of ghast shrieking.
040 */
041 GHAST_SHRIEK(1007, Type.SOUND),
042 /**
043 * Sound of ghast firing.
044 */
045 GHAST_SHOOT(1008, Type.SOUND),
046 /**
047 * Sound of blaze firing.
048 */
049 BLAZE_SHOOT(1009, Type.SOUND),
050 /**
051 * Sound of zombies chewing on wooden doors.
052 */
053 ZOMBIE_CHEW_WOODEN_DOOR(1010, Type.SOUND),
054 /**
055 * Sound of zombies chewing on iron doors.
056 */
057 ZOMBIE_CHEW_IRON_DOOR(1011, Type.SOUND),
058 /**
059 * Sound of zombies destroying a door.
060 */
061 ZOMBIE_DESTROY_DOOR(1012, Type.SOUND),
062 /**
063 * A visual smoke effect. Needs direction as additional info.
064 */
065 SMOKE(2000, Type.VISUAL, BlockFace.class),
066 /**
067 * Sound of a block breaking. Needs block ID as additional info.
068 */
069 STEP_SOUND(2001, Type.SOUND, Material.class),
070 /**
071 * Visual effect of a splash potion breaking. Needs potion data value as
072 * additional info.
073 */
074 POTION_BREAK(2002, Type.VISUAL, Potion.class),
075 /**
076 * An ender eye signal; a visual effect.
077 */
078 ENDER_SIGNAL(2003, Type.VISUAL),
079 /**
080 * The flames seen on a mobspawner; a visual effect.
081 */
082 MOBSPAWNER_FLAMES(2004, Type.VISUAL);
083
084 private final int id;
085 private final Type type;
086 private final Class<?> data;
087 private static final Map<Integer, Effect> BY_ID = Maps.newHashMap();
088
089 Effect(int id, Type type) {
090 this(id,type,null);
091 }
092
093 Effect(int id, Type type, Class<?> data) {
094 this.id = id;
095 this.type = type;
096 this.data = data;
097 }
098
099 /**
100 * Gets the ID for this effect.
101 *
102 * @return ID of this effect
103 * @deprecated Magic value
104 */
105 @Deprecated
106 public int getId() {
107 return this.id;
108 }
109
110 /**
111 * @return The type of the effect.
112 */
113 public Type getType() {
114 return this.type;
115 }
116
117 /**
118 * @return The class which represents data for this effect, or null if
119 * none
120 */
121 public Class<?> getData() {
122 return this.data;
123 }
124
125 /**
126 * Gets the Effect associated with the given ID.
127 *
128 * @param id ID of the Effect to return
129 * @return Effect with the given ID
130 * @deprecated Magic value
131 */
132 @Deprecated
133 public static Effect getById(int id) {
134 return BY_ID.get(id);
135 }
136
137 static {
138 for (Effect effect : values()) {
139 BY_ID.put(effect.id, effect);
140 }
141 }
142
143 /**
144 * Represents the type of an effect.
145 */
146 public enum Type {SOUND, VISUAL}
147 }