EntityTransformedEvent (#1281)

This commit is contained in:
Anthony MacAllister 2018-07-29 23:54:13 -04:00 committed by Daniel Ennis
parent 4fb5e0fe14
commit 4fa289b8ba
2 changed files with 169 additions and 0 deletions

View file

@ -0,0 +1,100 @@
From e64b171a9f65f7ae93d6e7f017d5d136f1fa5e5f Mon Sep 17 00:00:00 2001
From: Anthony MacAllister <anthonymmacallister@gmail.com>
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
+ * <p>
+ * 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

View file

@ -0,0 +1,69 @@
From 9f56713daf2d5371b7e443be7e205ece7106f371 Mon Sep 17 00:00:00 2001
From: Anthony MacAllister <anthonymmacallister@gmail.com>
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