diff --git a/src/main/java/electroblob/wizardry/event/ResurrectionEvent.java b/src/main/java/electroblob/wizardry/event/ResurrectionEvent.java
new file mode 100644
index 00000000..b4a33af5
--- /dev/null
+++ b/src/main/java/electroblob/wizardry/event/ResurrectionEvent.java
@@ -0,0 +1,37 @@
+package electroblob.wizardry.event;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.PlayerEvent;
+import net.minecraftforge.fml.common.eventhandler.Cancelable;
+
+/**
+ * ResurrectionEvent is fired when a player is about to be resurrected, after all other checks have been performed.
+ * Note that this event is only fired on the server side.
+ *
+ * This event is {@link Cancelable}. If this event is canceled, the player is not resurrected.
+ *
+ * This event does not have a result. {@link HasResult}
+ *
+ * This event is fired on the {@link MinecraftForge#EVENT_BUS}.
+ *
+ * @author Electroblob
+ * @since Wizardry 2.1
+ */
+@Cancelable
+public class ResurrectionEvent extends PlayerEvent {
+
+ private final EntityPlayer caster;
+
+ public ResurrectionEvent(EntityPlayer player, EntityPlayer caster){
+ super(player);
+ this.caster = caster;
+ }
+
+ /** Returns the player that cast the resurrection spell. If the player resurrected themselves, this will be the
+ * same as {@link ResurrectionEvent#getEntityPlayer()}. */
+ public EntityPlayer getCaster(){
+ return caster;
+ }
+
+}
diff --git a/src/main/java/electroblob/wizardry/packet/PacketControlInput.java b/src/main/java/electroblob/wizardry/packet/PacketControlInput.java
index 152e89b4..0a72784f 100644
--- a/src/main/java/electroblob/wizardry/packet/PacketControlInput.java
+++ b/src/main/java/electroblob/wizardry/packet/PacketControlInput.java
@@ -1,6 +1,7 @@
package electroblob.wizardry.packet;
import electroblob.wizardry.Wizardry;
+import electroblob.wizardry.event.ResurrectionEvent;
import electroblob.wizardry.inventory.ContainerArcaneWorkbench;
import electroblob.wizardry.item.ISpellCastingItem;
import electroblob.wizardry.packet.PacketControlInput.Message;
@@ -13,6 +14,7 @@ import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
+import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
@@ -79,6 +81,7 @@ public class PacketControlInput implements IMessageHandler {
.filter(s -> Resurrection.canStackResurrect(s, player)).findFirst().orElse(null);
if(stack != null){
+ if(MinecraftForge.EVENT_BUS.post(new ResurrectionEvent(player, player))) break;
// This should suffice, since this is the only way a player can cast resurrection when dead!
((ISpellCastingItem)stack.getItem()).cast(stack, Spells.resurrection, player, EnumHand.MAIN_HAND, 0, new SpellModifiers());
break;
diff --git a/src/main/java/electroblob/wizardry/spell/Resurrection.java b/src/main/java/electroblob/wizardry/spell/Resurrection.java
index 383f306e..971cb295 100644
--- a/src/main/java/electroblob/wizardry/spell/Resurrection.java
+++ b/src/main/java/electroblob/wizardry/spell/Resurrection.java
@@ -2,6 +2,7 @@ package electroblob.wizardry.spell;
import electroblob.wizardry.Wizardry;
import electroblob.wizardry.data.WizardData;
+import electroblob.wizardry.event.ResurrectionEvent;
import electroblob.wizardry.item.ISpellCastingItem;
import electroblob.wizardry.item.SpellActions;
import electroblob.wizardry.packet.PacketResurrection;
@@ -18,6 +19,7 @@ import net.minecraft.util.EnumHand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -61,6 +63,9 @@ public class Resurrection extends Spell {
.orElse(null);
if(nearestDeadAlly != null){
+
+ if(MinecraftForge.EVENT_BUS.post(new ResurrectionEvent(nearestDeadAlly, caster))) return false;
+
// When the player entity dies, it is removed from world#loadedEntityList. However, it is NOT removed
// from playerEntityList (and probably a few other places) until respawn is clicked, and since that
// never happens here we need to clean up those references or the player will have duplicate entries