001 package org.bukkit.event.entity; 002 003 import org.bukkit.Location; 004 import org.bukkit.entity.CreatureType; 005 import org.bukkit.entity.Entity; 006 import org.bukkit.entity.LivingEntity; 007 import org.bukkit.event.Cancellable; 008 import org.bukkit.event.HandlerList; 009 010 /** 011 * Called when a creature is spawned into a world. 012 * <p> 013 * If a Creature Spawn event is cancelled, the creature will not spawn. 014 */ 015 public class CreatureSpawnEvent extends EntityEvent implements Cancellable { 016 private static final HandlerList handlers = new HandlerList(); 017 private boolean canceled; 018 private final SpawnReason spawnReason; 019 020 public CreatureSpawnEvent(final LivingEntity spawnee, final SpawnReason spawnReason) { 021 super(spawnee); 022 this.spawnReason = spawnReason; 023 } 024 025 @Deprecated 026 public CreatureSpawnEvent(Entity spawnee, CreatureType type, Location loc, SpawnReason reason) { 027 super(spawnee); 028 spawnReason = reason; 029 } 030 031 public boolean isCancelled() { 032 return canceled; 033 } 034 035 public void setCancelled(boolean cancel) { 036 canceled = cancel; 037 } 038 039 @Override 040 public LivingEntity getEntity() { 041 return (LivingEntity) entity; 042 } 043 044 /** 045 * Gets the location at which the creature is spawning. 046 * 047 * @return The location at which the creature is spawning 048 */ 049 public Location getLocation() { 050 return getEntity().getLocation(); 051 } 052 053 /** 054 * Gets the type of creature being spawned. 055 * 056 * @return A CreatureType value detailing the type of creature being 057 * spawned 058 * @deprecated In favour of {@link #getEntityType()}. 059 */ 060 @Deprecated 061 public CreatureType getCreatureType() { 062 return CreatureType.fromEntityType(getEntityType()); 063 } 064 065 /** 066 * Gets the reason for why the creature is being spawned. 067 * 068 * @return A SpawnReason value detailing the reason for the creature being 069 * spawned 070 */ 071 public SpawnReason getSpawnReason() { 072 return spawnReason; 073 } 074 075 @Override 076 public HandlerList getHandlers() { 077 return handlers; 078 } 079 080 public static HandlerList getHandlerList() { 081 return handlers; 082 } 083 084 /** 085 * An enum to specify the type of spawning 086 */ 087 public enum SpawnReason { 088 089 /** 090 * When something spawns from natural means 091 */ 092 NATURAL, 093 /** 094 * When an entity spawns as a jockey of another entity (mostly spider 095 * jockeys) 096 */ 097 JOCKEY, 098 /** 099 * When a creature spawns due to chunk generation 100 */ 101 CHUNK_GEN, 102 /** 103 * When a creature spawns from a spawner 104 */ 105 SPAWNER, 106 /** 107 * When a creature spawns from an egg 108 */ 109 EGG, 110 /** 111 * When a creature spawns from a Spawner Egg 112 */ 113 SPAWNER_EGG, 114 /** 115 * When a creature spawns because of a lightning strike 116 */ 117 LIGHTNING, 118 /** 119 * When a creature is spawned by a player that is sleeping 120 * 121 * @deprecated No longer used 122 */ 123 @Deprecated 124 BED, 125 /** 126 * When a snowman is spawned by being built 127 */ 128 BUILD_SNOWMAN, 129 /** 130 * When an iron golem is spawned by being built 131 */ 132 BUILD_IRONGOLEM, 133 /** 134 * When a wither boss is spawned by being built 135 */ 136 BUILD_WITHER, 137 /** 138 * When an iron golem is spawned to defend a village 139 */ 140 VILLAGE_DEFENSE, 141 /** 142 * When a zombie is spawned to invade a village 143 */ 144 VILLAGE_INVASION, 145 /** 146 * When an animal breeds to create a child 147 */ 148 BREEDING, 149 /** 150 * When a slime splits 151 */ 152 SLIME_SPLIT, 153 /** 154 * When an entity calls for reinforcements 155 */ 156 REINFORCEMENTS, 157 /** 158 * When a creature is spawned by nether portal 159 */ 160 NETHER_PORTAL, 161 /** 162 * When a creature is spawned by a dispenser dispensing an egg 163 */ 164 DISPENSE_EGG, 165 /** 166 * When a zombie infects a villager 167 */ 168 INFECTION, 169 /** 170 * When a villager is cured from infection 171 */ 172 CURED, 173 /** 174 * When an ocelot has a baby spawned along with them 175 */ 176 OCELOT_BABY, 177 /** 178 * When a silverfish spawns from a block 179 */ 180 SILVERFISH_BLOCK, 181 /** 182 * When an entity spawns as a mount of another entity (mostly chicken 183 * jockeys) 184 */ 185 MOUNT, 186 /** 187 * When a creature is spawned by plugins 188 */ 189 CUSTOM, 190 /** 191 * When an entity is missing a SpawnReason 192 */ 193 DEFAULT 194 } 195 }