diff --git a/Spigot-API-Patches/Add-PhantomPreSpawnEvent.patch b/Spigot-API-Patches/Add-PhantomPreSpawnEvent.patch new file mode 100644 index 0000000000..60c899c4d3 --- /dev/null +++ b/Spigot-API-Patches/Add-PhantomPreSpawnEvent.patch @@ -0,0 +1,61 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Sat, 25 Aug 2018 19:56:42 -0500 +Subject: [PATCH] Add PhantomPreSpawnEvent + + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java +new file mode 100644 +index 00000000..303a1ec9 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/PhantomPreSpawnEvent.java +@@ -0,0 +0,0 @@ ++package com.destroystokyo.paper.event.entity; ++ ++import org.bukkit.Location; ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.EntityType; ++import org.bukkit.event.entity.CreatureSpawnEvent; ++ ++import javax.annotation.Nullable; ++ ++/** ++ * Called when a phantom is spawned for an exhausted player ++ */ ++public class PhantomPreSpawnEvent extends PreCreatureSpawnEvent { ++ private final Entity entity; ++ ++ public PhantomPreSpawnEvent(Location location, Entity entity, CreatureSpawnEvent.SpawnReason reason) { ++ super(location, EntityType.PHANTOM, reason); ++ this.entity = entity; ++ } ++ ++ /** ++ * Get the entity this phantom is spawning for ++ * ++ * @return Entity ++ */ ++ @Nullable ++ public Entity getSpawningEntity() { ++ return entity; ++ } ++} +diff --git a/src/main/java/org/bukkit/entity/Phantom.java b/src/main/java/org/bukkit/entity/Phantom.java +index 1a1044ed..65b703a2 100644 +--- a/src/main/java/org/bukkit/entity/Phantom.java ++++ b/src/main/java/org/bukkit/entity/Phantom.java +@@ -0,0 +0,0 @@ public interface Phantom extends Flying { + * @param sz The new size of the phantom. + */ + public void setSize(int sz); ++ ++ // Paper start ++ /** ++ * Get the UUID of the entity that caused this phantom to spawn ++ * ++ * @return UUID ++ */ ++ public java.util.UUID getSpawningEntity(); ++ // Paper end + } +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/Add-PhantomPreSpawnEvent.patch b/Spigot-Server-Patches/Add-PhantomPreSpawnEvent.patch new file mode 100644 index 0000000000..7f1dbc2176 --- /dev/null +++ b/Spigot-Server-Patches/Add-PhantomPreSpawnEvent.patch @@ -0,0 +1,80 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Sat, 25 Aug 2018 19:56:51 -0500 +Subject: [PATCH] Add PhantomPreSpawnEvent + + +diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java +index 2429644e99..2778660acd 100644 +--- a/src/main/java/net/minecraft/server/EntityPhantom.java ++++ b/src/main/java/net/minecraft/server/EntityPhantom.java +@@ -0,0 +0,0 @@ public class EntityPhantom extends EntityFlying implements IMonster { + } + + this.setSize(nbttagcompound.getInt("Size")); ++ this.spawningEntity = nbttagcompound.getUUID("Paper.SpawningEntity"); // Paper + } + + public void b(NBTTagCompound nbttagcompound) { +@@ -0,0 +0,0 @@ public class EntityPhantom extends EntityFlying implements IMonster { + nbttagcompound.setInt("AY", this.c.getY()); + nbttagcompound.setInt("AZ", this.c.getZ()); + nbttagcompound.setInt("Size", this.getSize()); ++ nbttagcompound.setUUID("Paper.SpawningEntity", this.spawningEntity); // Paper + } + + public SoundCategory bV() { +@@ -0,0 +0,0 @@ public class EntityPhantom extends EntityFlying implements IMonster { + return true; + } + ++ // Paper start ++ java.util.UUID spawningEntity; ++ ++ public java.util.UUID getSpawningEntity() { ++ return spawningEntity; ++ } ++ // Paper end ++ + class b extends PathfinderGoal { + + private int b; +diff --git a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java +index 0626b77904..413188e970 100644 +--- a/src/main/java/net/minecraft/server/MobSpawnerPhantom.java ++++ b/src/main/java/net/minecraft/server/MobSpawnerPhantom.java +@@ -0,0 +0,0 @@ public class MobSpawnerPhantom { + int k = 1 + random.nextInt(difficultydamagescaler.a().a() + 1); + + for (int l = 0; l < k; ++l) { ++ // Paper start ++ com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent event = new com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent(MCUtil.toLocation(world, blockposition1), ((EntityPlayer) entityhuman).getBukkitEntity(), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); ++ if (!event.callEvent()) { ++ if (event.shouldAbortSpawn()) { ++ break; ++ } ++ continue; ++ } ++ // Paper end + EntityPhantom entityphantom = new EntityPhantom(world); +- ++ entityphantom.spawningEntity = entityhuman.uniqueID; // Paper + entityphantom.setPositionRotation(blockposition1, 0.0F, 0.0F); + groupdataentity = entityphantom.prepare(difficultydamagescaler, groupdataentity, (NBTTagCompound) null); + world.addEntity(entityphantom, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +index 9f9ee92390..2b97313694 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +@@ -0,0 +0,0 @@ public class CraftPhantom extends CraftFlying implements Phantom { + public EntityType getType() { + return EntityType.PHANTOM; + } ++ ++ // Paper start ++ public java.util.UUID getSpawningEntity() { ++ return getHandle().getSpawningEntity(); ++ } ++ // Paper end + } +-- \ No newline at end of file