mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-22 08:57:35 +01:00
104 lines
4.7 KiB
Diff
104 lines
4.7 KiB
Diff
From 0278976e64dfd93bc2929ef0b820f0459a103c77 Mon Sep 17 00:00:00 2001
|
|
From: Andy Shulman <andy.shulman@hotmail.com>
|
|
Date: Mon, 15 Apr 2013 20:06:37 -0500
|
|
Subject: [PATCH] Implement SpawnerSpawnEvent.
|
|
|
|
Adds BUKKIT-267
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
index 056d447..0695fe2 100644
|
|
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
|
@@ -4,7 +4,11 @@ import com.google.common.collect.Lists;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
|
|
-import org.bukkit.event.entity.CreatureSpawnEvent; // CraftBukkit
|
|
+// CraftBukkit start
|
|
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
|
+import org.bukkit.event.entity.CreatureSpawnEvent;
|
|
+import org.bukkit.event.entity.SpawnerSpawnEvent;
|
|
+// CraftBukkit end
|
|
|
|
public abstract class MobSpawnerAbstract {
|
|
|
|
@@ -136,7 +140,12 @@ public abstract class MobSpawnerAbstract {
|
|
|
|
entity.f(nbttagcompound);
|
|
if (entity.world != null && flag) {
|
|
- entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
|
+ // CraftBukkit start - call SpawnerSpawnEvent, abort if cancelled
|
|
+ SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b().getX(), this.b().getY(), this.b().getZ());
|
|
+ if (!event.isCancelled()) {
|
|
+ entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
|
+ }
|
|
+ // CraftBukkit end
|
|
}
|
|
|
|
NBTTagCompound nbttagcompound1;
|
|
@@ -160,6 +169,11 @@ public abstract class MobSpawnerAbstract {
|
|
|
|
entity2.f(nbttagcompound2);
|
|
entity2.setPositionRotation(entity1.locX, entity1.locY, entity1.locZ, entity1.yaw, entity1.pitch);
|
|
+ // CraftBukkit start - call SpawnerSpawnEvent, skip if cancelled
|
|
+ SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity2, this.b().getX(), this.b().getY(), this.b().getZ());
|
|
+ if (event.isCancelled()) {
|
|
+ continue;
|
|
+ }
|
|
if (entity.world != null && flag) {
|
|
entity.world.addEntity(entity2, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
|
}
|
|
@@ -173,8 +187,12 @@ public abstract class MobSpawnerAbstract {
|
|
if (entity instanceof EntityInsentient) {
|
|
((EntityInsentient) entity).prepare(entity.world.E(new BlockPosition(entity)), (GroupDataEntity) null);
|
|
}
|
|
-
|
|
- entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
|
+ // Spigot start - call SpawnerSpawnEvent, abort if cancelled
|
|
+ SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b().getX(), this.b().getY(), this.b().getZ());
|
|
+ if (!event.isCancelled()) {
|
|
+ entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
|
+ }
|
|
+ // Spigot end
|
|
}
|
|
|
|
return entity;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 10ac959..c5eca56 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -18,6 +18,7 @@ import org.bukkit.Statistic.Type;
|
|
import org.bukkit.block.Block;
|
|
import org.bukkit.block.BlockFace;
|
|
import org.bukkit.block.BlockState;
|
|
+import org.bukkit.block.CreatureSpawner;
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.craftbukkit.CraftStatistic;
|
|
import org.bukkit.craftbukkit.CraftWorld;
|
|
@@ -128,6 +129,22 @@ public class CraftEventFactory {
|
|
}
|
|
|
|
/**
|
|
+ * Mob spawner event
|
|
+ */
|
|
+ public static SpawnerSpawnEvent callSpawnerSpawnEvent(Entity spawnee, int spawnerX, int spawnerY, int spawnerZ) {
|
|
+ org.bukkit.craftbukkit.entity.CraftEntity entity = spawnee.getBukkitEntity();
|
|
+ BlockState state = entity.getWorld().getBlockAt(spawnerX, spawnerY, spawnerZ).getState();
|
|
+
|
|
+ if (!(state instanceof CreatureSpawner)) {
|
|
+ state = null;
|
|
+ }
|
|
+
|
|
+ SpawnerSpawnEvent event = new SpawnerSpawnEvent(entity, (CreatureSpawner) state);
|
|
+ entity.getServer().getPluginManager().callEvent(event);
|
|
+ return event;
|
|
+ }
|
|
+
|
|
+ /**
|
|
* Bucket methods
|
|
*/
|
|
public static PlayerBucketEmptyEvent callPlayerBucketEmptyEvent(EntityHuman who, int clickedX, int clickedY, int clickedZ, EnumDirection clickedFace, ItemStack itemInHand) {
|
|
--
|
|
2.1.4
|
|
|