From 02006e6b24986b97fcfa922eab1fbcae348a01c8 Mon Sep 17 00:00:00 2001 From: AlphaBlend Date: Sun, 16 Oct 2016 23:27:02 -0700 Subject: [PATCH] Add EntityZapEvent --- .../0041-Add-EntityZapEvent.patch | 106 ++++++++++++++++++ .../0178-Add-EntityZapEvent.patch | 71 ++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 Spigot-API-Patches/0041-Add-EntityZapEvent.patch create mode 100644 Spigot-Server-Patches/0178-Add-EntityZapEvent.patch diff --git a/Spigot-API-Patches/0041-Add-EntityZapEvent.patch b/Spigot-API-Patches/0041-Add-EntityZapEvent.patch new file mode 100644 index 0000000000..79b1d0a6a6 --- /dev/null +++ b/Spigot-API-Patches/0041-Add-EntityZapEvent.patch @@ -0,0 +1,106 @@ +From a906e672a86bacf113ff5427fb9f131287652a42 Mon Sep 17 00:00:00 2001 +From: AlphaBlend +Date: Sun, 16 Oct 2016 23:19:34 -0700 +Subject: [PATCH] Add EntityZapEvent + + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EntityZapEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EntityZapEvent.java +new file mode 100644 +index 0000000..0da8944 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/EntityZapEvent.java +@@ -0,0 +1,63 @@ ++package com.destroystokyo.paper.event.entity; ++ ++import org.apache.commons.lang.Validate; ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.LightningStrike; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++import javax.annotation.Nonnull; ++ ++/** ++ * Fired when lightning strikes an entity ++ */ ++public class EntityZapEvent extends EntityEvent implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private boolean cancelled; ++ private final LightningStrike bolt; ++ private final Entity replacementEntity; ++ ++ public EntityZapEvent(final Entity entity, @Nonnull final LightningStrike bolt, @Nonnull final Entity replacementEntity) { ++ super(entity); ++ Validate.notNull(bolt); ++ Validate.notNull(replacementEntity); ++ this.bolt = bolt; ++ this.replacementEntity = replacementEntity; ++ } ++ ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ public void setCancelled(boolean cancel) { ++ this.cancelled = cancel; ++ } ++ ++ /** ++ * Gets the lightning bolt that is striking the entity. ++ * @return The lightning bolt responsible for this event ++ */ ++ @Nonnull ++ public LightningStrike getBolt() { ++ return bolt; ++ } ++ ++ /** ++ * Gets the entity that will replace the struck entity. ++ * @return The entity that will replace the struck entity ++ */ ++ @Nonnull ++ public Entity getReplacementEntity() { ++ return replacementEntity; ++ } ++ ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} +diff --git a/src/main/java/org/bukkit/event/entity/PigZapEvent.java b/src/main/java/org/bukkit/event/entity/PigZapEvent.java +index aa80ebf..0ffb1a0 100644 +--- a/src/main/java/org/bukkit/event/entity/PigZapEvent.java ++++ b/src/main/java/org/bukkit/event/entity/PigZapEvent.java +@@ -1,5 +1,6 @@ + package org.bukkit.event.entity; + ++import com.destroystokyo.paper.event.entity.EntityZapEvent; + import org.bukkit.entity.LightningStrike; + import org.bukkit.entity.Pig; + import org.bukkit.entity.PigZombie; +@@ -9,14 +10,14 @@ import org.bukkit.event.HandlerList; + /** + * Stores data for pigs being zapped + */ +-public class PigZapEvent extends EntityEvent implements Cancellable { ++public class PigZapEvent extends EntityZapEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + private boolean canceled; + private final PigZombie pigzombie; + private final LightningStrike bolt; + + public PigZapEvent(final Pig pig, final LightningStrike bolt, final PigZombie pigzombie) { +- super(pig); ++ super(pig, bolt, pigzombie); + this.bolt = bolt; + this.pigzombie = pigzombie; + } +-- +2.10.2 + diff --git a/Spigot-Server-Patches/0178-Add-EntityZapEvent.patch b/Spigot-Server-Patches/0178-Add-EntityZapEvent.patch new file mode 100644 index 0000000000..0eae53204d --- /dev/null +++ b/Spigot-Server-Patches/0178-Add-EntityZapEvent.patch @@ -0,0 +1,71 @@ +From d35fa192fffb96fff4945701d8aff0acc992b196 Mon Sep 17 00:00:00 2001 +From: AlphaBlend +Date: Sun, 16 Oct 2016 23:19:30 -0700 +Subject: [PATCH] Add EntityZapEvent + + +diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java +index 7cee3de..2c4bd0a 100644 +--- a/src/main/java/net/minecraft/server/EntityPig.java ++++ b/src/main/java/net/minecraft/server/EntityPig.java +@@ -139,6 +139,12 @@ public class EntityPig extends EntityAnimal { + if (!this.world.isClientSide && !this.dead) { + EntityPigZombie entitypigzombie = new EntityPigZombie(this.world); + ++ // Paper start ++ if (CraftEventFactory.callEntityZapEvent(this, entitylightning, entitypigzombie).isCancelled()) { ++ return; ++ } ++ // Paper end ++ + // CraftBukkit start + if (CraftEventFactory.callPigZapEvent(this, entitylightning, entitypigzombie).isCancelled()) { + return; +diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java +index 029b916..c3ec21a 100644 +--- a/src/main/java/net/minecraft/server/EntityVillager.java ++++ b/src/main/java/net/minecraft/server/EntityVillager.java +@@ -566,6 +566,12 @@ public class EntityVillager extends EntityAgeable implements IMerchant, NPC { + if (!this.world.isClientSide && !this.dead) { + EntityWitch entitywitch = new EntityWitch(this.world); + ++ // Paper start ++ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityZapEvent(this, entitylightning, entitywitch).isCancelled()) { ++ return; ++ } ++ // Paper end ++ + entitywitch.setPositionRotation(this.locX, this.locY, this.locZ, this.yaw, this.pitch); + entitywitch.prepare(this.world.D(new BlockPosition(entitywitch)), (GroupDataEntity) null); + entitywitch.setAI(this.hasAI()); +@@ -574,7 +580,7 @@ public class EntityVillager extends EntityAgeable implements IMerchant, NPC { + entitywitch.setCustomNameVisible(this.getCustomNameVisible()); + } + +- this.world.addEntity(entitywitch); ++ 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/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +index 949db83..bff7e8d 100644 +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -668,6 +668,14 @@ public class CraftEventFactory { + return event; + } + ++ // Paper start ++ public static com.destroystokyo.paper.event.entity.EntityZapEvent callEntityZapEvent (Entity entity, Entity lightning, Entity changedEntity) { ++ com.destroystokyo.paper.event.entity.EntityZapEvent event = new com.destroystokyo.paper.event.entity.EntityZapEvent(entity.getBukkitEntity(), (LightningStrike) lightning.getBukkitEntity(), changedEntity.getBukkitEntity()); ++ entity.getBukkitEntity().getServer().getPluginManager().callEvent(event); ++ return event; ++ } ++ // Paper end ++ + public static HorseJumpEvent callHorseJumpEvent(Entity horse, float power) { + HorseJumpEvent event = new HorseJumpEvent((Horse) horse.getBukkitEntity(), power); + horse.getBukkitEntity().getServer().getPluginManager().callEvent(event); +-- +2.10.2 +