diff --git a/Spigot-API-Patches/WitchConsumePotionEvent.patch b/Spigot-API-Patches/WitchConsumePotionEvent.patch
new file mode 100644
index 0000000000..7e1b0e91d9
--- /dev/null
+++ b/Spigot-API-Patches/WitchConsumePotionEvent.patch
@@ -0,0 +1,117 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Wed, 16 May 2018 20:26:16 -0400
+Subject: [PATCH] WitchConsumePotionEvent
+
+Fires when a witch consumes the potion in their hand
+
+diff --git a/src/main/java/com/destroystokyo/paper/event/entity/WitchConsumePotionEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/WitchConsumePotionEvent.java
+new file mode 100644
+index 00000000..e3035110
+--- /dev/null
++++ b/src/main/java/com/destroystokyo/paper/event/entity/WitchConsumePotionEvent.java
+@@ -0,0 +0,0 @@
++package com.destroystokyo.paper.event.entity;
++
++import org.bukkit.entity.Witch;
++import org.bukkit.event.Cancellable;
++import org.bukkit.event.HandlerList;
++import org.bukkit.event.entity.EntityEvent;
++import org.bukkit.inventory.ItemStack;
++
++/**
++ * Fired when a witch consumes the potion in their hand to buff themselves.
++ */
++public class WitchConsumePotionEvent extends EntityEvent implements Cancellable {
++    private ItemStack potion;
++
++    public WitchConsumePotionEvent(Witch witch, ItemStack potion) {
++        super(witch);
++        this.potion = potion;
++    }
++
++    @Override
++    public Witch getEntity() {
++        return (Witch) super.getEntity();
++    }
++
++    /**
++     * Gets the potion the witch will consume and have the effects applied.
++     */
++    public ItemStack getPotion() {
++        return potion;
++    }
++
++    /**
++     * Sets the potion to be consumed and applied to the witch.
++     * @param potion The potion
++     */
++    public void setPotion(ItemStack potion) {
++        this.potion = potion != null ? potion.clone() : null;
++    }
++
++    private static final HandlerList handlers = new HandlerList();
++
++    public HandlerList getHandlers() {
++        return handlers;
++    }
++
++    public static HandlerList getHandlerList() {
++        return handlers;
++    }
++
++    private boolean cancelled = false;
++
++    /**
++     * @return Event was cancelled or potion was null
++     */
++    @Override
++    public boolean isCancelled() {
++        return cancelled || potion == null;
++    }
++
++    @Override
++    public void setCancelled(boolean cancel) {
++        cancelled = cancel;
++    }
++}
+diff --git a/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java
+new file mode 100644
+index 00000000..6ef6367b
+--- /dev/null
++++ b/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java
+@@ -0,0 +0,0 @@
++package com.destroystokyo.paper.event.entity;
++
++import org.bukkit.event.Cancellable;
++import org.bukkit.event.Event;
++import org.bukkit.event.HandlerList;
++
++public class WitchThrowPotionEvent extends Event implements Cancellable {
++    public WitchThrowPotionEvent() {
++    }
++
++
++    private static final HandlerList handlers = new HandlerList();
++
++    public HandlerList getHandlers() {
++        return handlers;
++    }
++
++    public static HandlerList getHandlerList() {
++        return handlers;
++    }
++
++    private boolean cancelled = false;
++
++    @Override
++    public boolean isCancelled() {
++        return cancelled;
++    }
++
++    @Override
++    public void setCancelled(boolean cancel) {
++        cancelled = cancel;
++    }
++}
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/WitchConsumePotionEvent.patch b/Spigot-Server-Patches/WitchConsumePotionEvent.patch
new file mode 100644
index 0000000000..79873ca6c4
--- /dev/null
+++ b/Spigot-Server-Patches/WitchConsumePotionEvent.patch
@@ -0,0 +1,25 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <aikar@aikar.co>
+Date: Wed, 16 May 2018 20:35:16 -0400
+Subject: [PATCH] WitchConsumePotionEvent
+
+Fires when a witch consumes the potion in their hand
+
+diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java
+index ffe72e037..3a00a37eb 100644
+--- a/src/main/java/net/minecraft/server/EntityWitch.java
++++ b/src/main/java/net/minecraft/server/EntityWitch.java
+@@ -0,0 +0,0 @@ public class EntityWitch extends EntityMonster implements IRangedEntity {
+ 
+                     this.setSlot(EnumItemSlot.MAINHAND, ItemStack.a);
+                     if (itemstack.getItem() == Items.POTION) {
+-                        List list = PotionUtil.getEffects(itemstack);
++                        // Paper start
++                        com.destroystokyo.paper.event.entity.WitchConsumePotionEvent event = new com.destroystokyo.paper.event.entity.WitchConsumePotionEvent((org.bukkit.entity.Witch) this.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack));
++
++                        List list = event.callEvent() ? PotionUtil.getEffects(org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getPotion())) : null;
++                        // Paper end
+ 
+                         if (list != null) {
+                             Iterator iterator = list.iterator();
+--
\ No newline at end of file
diff --git a/scripts/importmcdev.sh b/scripts/importmcdev.sh
index 40162024ed..f29ec2402c 100755
--- a/scripts/importmcdev.sh
+++ b/scripts/importmcdev.sh
@@ -70,6 +70,7 @@ import EntityLlama
 import EntitySquid
 import EntityTypes
 import EntityWaterAnimal
+import EntityWitch
 import EnumItemSlot
 import EULA
 import FileIOThread