From 74cfe71a9be32a6f93a58aaad1bc23d3500e1826 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 3 Mar 2016 19:45:46 +1100 Subject: [PATCH] Implement SpawnerSpawnEvent. diff --git a/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java b/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java index de82750c2..69c64e7ac 100644 --- a/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java +++ b/src/main/java/net/minecraft/world/level/MobSpawnerAbstract.java @@ -154,6 +154,18 @@ public abstract class MobSpawnerAbstract { } // Spigot End } + // Spigot Start + if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, blockposition).isCancelled()) { + Entity vehicle = entity.getVehicle(); + if (vehicle != null) { + vehicle.discard(); + } + for (Entity passenger : entity.getIndirectPassengers()) { + passenger.discard(); + } + continue; + } + // Spigot End if (!worldserver.tryAddFreshEntityWithPassengers(entity, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.SPAWNER)) { // CraftBukkit this.delay(worldserver, blockposition); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 87a876b2d..559cf15df 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -231,6 +231,8 @@ import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.meta.BookMeta; import org.bukkit.potion.PotionEffect; +import org.bukkit.event.entity.SpawnerSpawnEvent; // Spigot + public class CraftEventFactory { public static final DamageSource MELTING = CraftDamageSource.copyOf(DamageSource.ON_FIRE); public static final DamageSource POISON = CraftDamageSource.copyOf(DamageSource.MAGIC); @@ -1492,6 +1494,21 @@ public class CraftEventFactory { return event; } + /** + * Mob spawner event. + */ + public static SpawnerSpawnEvent callSpawnerSpawnEvent(Entity spawnee, BlockPosition pos) { + org.bukkit.craftbukkit.entity.CraftEntity entity = spawnee.getBukkitEntity(); + BlockState state = entity.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()).getState(); + if (!(state instanceof org.bukkit.block.CreatureSpawner)) { + state = null; + } + + SpawnerSpawnEvent event = new SpawnerSpawnEvent(entity, (org.bukkit.block.CreatureSpawner) state); + entity.getServer().getPluginManager().callEvent(event); + return event; + } + public static EntityToggleGlideEvent callToggleGlideEvent(EntityLiving entity, boolean gliding) { EntityToggleGlideEvent event = new EntityToggleGlideEvent((LivingEntity) entity.getBukkitEntity(), gliding); entity.level.getCraftServer().getPluginManager().callEvent(event); -- 2.34.1