From 4fa289b8ba2559826fda9576418dbc33847aa548 Mon Sep 17 00:00:00 2001 From: Anthony MacAllister Date: Sun, 29 Jul 2018 23:54:13 -0400 Subject: [PATCH] EntityTransformedEvent (#1281) --- .../0127-EntityTransformedEvent.patch | 100 ++++++++++++++++++ .../0315-EntityTransformedEvent.patch | 69 ++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 Spigot-API-Patches/0127-EntityTransformedEvent.patch create mode 100644 Spigot-Server-Patches/0315-EntityTransformedEvent.patch diff --git a/Spigot-API-Patches/0127-EntityTransformedEvent.patch b/Spigot-API-Patches/0127-EntityTransformedEvent.patch new file mode 100644 index 0000000000..be5ce5a92e --- /dev/null +++ b/Spigot-API-Patches/0127-EntityTransformedEvent.patch @@ -0,0 +1,100 @@ +From e64b171a9f65f7ae93d6e7f017d5d136f1fa5e5f Mon Sep 17 00:00:00 2001 +From: Anthony MacAllister +Date: Thu, 26 Jul 2018 15:28:53 -0400 +Subject: [PATCH] EntityTransformedEvent + + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EntityTransformedEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EntityTransformedEvent.java +new file mode 100644 +index 0000000..d9e5cab +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/EntityTransformedEvent.java +@@ -0,0 +1,85 @@ ++package com.destroystokyo.paper.event.entity; ++ ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++/** ++ * Fired when an entity transforms into another entity ++ *

++ * If the event is cancelled, the entity will not transform ++ */ ++public class EntityTransformedEvent extends EntityEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancelled; ++ private final Entity transformed; ++ private final TransformedReason reason; ++ ++ public EntityTransformedEvent(Entity entity, Entity transformed, TransformedReason reason) { ++ super(entity); ++ this.transformed = transformed; ++ this.reason = reason; ++ } ++ ++ /** ++ * The entity after it has transformed ++ * ++ * @return Transformed entity ++ */ ++ public Entity getTransformed() { ++ return transformed; ++ } ++ ++ /** ++ * @return The reason for the transformation ++ */ ++ public TransformedReason getReason() { ++ return reason; ++ } ++ ++ ++ @Override ++ public HandlerList getHandlers(){ ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList(){ ++ return handlers; ++ } ++ ++ @Override ++ public boolean isCancelled(){ ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel){ ++ cancelled = cancel; ++ } ++ ++ public enum TransformedReason { ++ /** ++ * When a zombie drowns ++ */ ++ DROWNED, ++ /** ++ * When a zombie villager is cured ++ */ ++ CURED, ++ /** ++ * When a villager turns to a zombie villager ++ */ ++ INFECTED, ++ /** ++ * When a mooshroom turns to a cow ++ */ ++ SHEARED, ++ /** ++ * When a pig turns to a zombiepigman ++ */ ++ LIGHTNING ++ ++ } ++} +-- +2.8.4.windows.1 + diff --git a/Spigot-Server-Patches/0315-EntityTransformedEvent.patch b/Spigot-Server-Patches/0315-EntityTransformedEvent.patch new file mode 100644 index 0000000000..8d3cb16098 --- /dev/null +++ b/Spigot-Server-Patches/0315-EntityTransformedEvent.patch @@ -0,0 +1,69 @@ +From 9f56713daf2d5371b7e443be7e205ece7106f371 Mon Sep 17 00:00:00 2001 +From: Anthony MacAllister +Date: Thu, 26 Jul 2018 15:30:03 -0400 +Subject: [PATCH] EntityTransformedEvent + + +diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java +index c6babe6..a7159ef 100644 +--- a/src/main/java/net/minecraft/server/EntityMushroomCow.java ++++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java +@@ -43,7 +43,7 @@ public class EntityMushroomCow extends EntityCow { + if (this.hasCustomName()) { + entitycow.setCustomName(this.getCustomName()); + } +- ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), entitycow.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.SHEARED).callEvent()) return false; // Paper + this.world.addEntity(entitycow); + + for (int i = 0; i < 5; ++i) { +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index b51543e..51be546 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -623,7 +623,7 @@ public class EntityVillager extends EntityAgeable implements NPC, IMerchant { + entitywitch.setCustomName(this.getCustomName()); + entitywitch.setCustomNameVisible(this.getCustomNameVisible()); + } +- ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), entitywitch.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.LIGHTNING).callEvent()) return; // Paper + this.world.addEntity(entitywitch, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // Paper - Added lightning spawn reason for this entity + this.die(); + } +diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java +index 90aa864..adf314e 100644 +--- a/src/main/java/net/minecraft/server/EntityZombie.java ++++ b/src/main/java/net/minecraft/server/EntityZombie.java +@@ -233,7 +233,7 @@ public class EntityZombie extends EntityMonster { + entityzombie.setCustomName(this.getCustomName()); + entityzombie.setCustomNameVisible(this.getCustomNameVisible()); + } +- ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), entityzombie.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.DROWNED).callEvent()) return; // Paper + this.world.addEntity(entityzombie); + this.die(); + } +@@ -392,6 +392,7 @@ public class EntityZombie extends EntityMonster { + entityzombievillager.setCustomNameVisible(entityvillager.getCustomNameVisible()); + } + ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), entityvillager.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.INFECTED).callEvent()) return; // Paper + this.world.addEntity(entityzombievillager, CreatureSpawnEvent.SpawnReason.INFECTION); // CraftBukkit - add SpawnReason + this.world.a((EntityHuman) null, 1026, new BlockPosition(this), 0); + } +diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java +index 9f61523..b8b0d65 100644 +--- a/src/main/java/net/minecraft/server/EntityZombieVillager.java ++++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java +@@ -130,7 +130,7 @@ public class EntityZombieVillager extends EntityZombie { + entityvillager.setCustomName(this.getCustomName()); + entityvillager.setCustomNameVisible(this.getCustomNameVisible()); + } +- ++ if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), entityvillager.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.CURED).callEvent()) return; // Paper + this.world.addEntity(entityvillager, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CURED); // CraftBukkit - add SpawnReason + if (this.bD != null) { + EntityHuman entityhuman = this.world.b(this.bD); +-- +2.8.4.windows.1 +