diff --git a/Spigot-API-Patches/0106-WitchThrowPotionEvent.patch b/Spigot-API-Patches/0106-WitchThrowPotionEvent.patch new file mode 100644 index 0000000000..d6cdfb9282 --- /dev/null +++ b/Spigot-API-Patches/0106-WitchThrowPotionEvent.patch @@ -0,0 +1,83 @@ +From dc665a8ed1861da017603e6be0f484fce75a8ff5 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 16 May 2018 20:39:09 -0400 +Subject: [PATCH] WitchThrowPotionEvent + +Fired when a witch throws a potion at a player + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java +index 6ef6367b..2f4ce49e 100644 +--- a/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java ++++ b/src/main/java/com/destroystokyo/paper/event/entity/WitchThrowPotionEvent.java +@@ -1,13 +1,51 @@ + package com.destroystokyo.paper.event.entity; + ++import org.bukkit.entity.Player; ++import org.bukkit.entity.Witch; + import org.bukkit.event.Cancellable; +-import org.bukkit.event.Event; + import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++import org.bukkit.inventory.ItemStack; + +-public class WitchThrowPotionEvent extends Event implements Cancellable { +- public WitchThrowPotionEvent() { ++/** ++ * Fired when a witch throws a potion at a player ++ */ ++public class WitchThrowPotionEvent extends EntityEvent implements Cancellable { ++ private final Player target; ++ private ItemStack potion; ++ ++ public WitchThrowPotionEvent(Witch witch, Player target, ItemStack potion) { ++ super(witch); ++ this.target = target; ++ this.potion = potion; + } + ++ @Override ++ public Witch getEntity() { ++ return (Witch) super.getEntity(); ++ } ++ ++ /** ++ * @return The target of the potion ++ */ ++ public Player getTarget() { ++ return target; ++ } ++ ++ /** ++ * @return The potion the witch will throw at a player ++ */ ++ public ItemStack getPotion() { ++ return potion; ++ } ++ ++ /** ++ * Sets the potion to be thrown at a player ++ * @param potion The potion ++ */ ++ public void setPotion(ItemStack potion) { ++ this.potion = potion != null ? potion.clone() : null; ++ } + + private static final HandlerList handlers = new HandlerList(); + +@@ -21,9 +59,12 @@ public class WitchThrowPotionEvent extends Event implements Cancellable { + + private boolean cancelled = false; + ++ /** ++ * @return Event was cancelled or potion was null ++ */ + @Override + public boolean isCancelled() { +- return cancelled; ++ return cancelled || potion == null; + } + + @Override +-- +2.17.0 + diff --git a/Spigot-Server-Patches/0298-WitchThrowPotionEvent.patch b/Spigot-Server-Patches/0298-WitchThrowPotionEvent.patch new file mode 100644 index 0000000000..7ff1fb46d9 --- /dev/null +++ b/Spigot-Server-Patches/0298-WitchThrowPotionEvent.patch @@ -0,0 +1,31 @@ +From f449fff0a099790efb09046533d21718cd49db9d Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 16 May 2018 20:44:58 -0400 +Subject: [PATCH] WitchThrowPotionEvent + +Fired when a witch throws a potion at a player + +diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java +index 3a00a37eb..f51989588 100644 +--- a/src/main/java/net/minecraft/server/EntityWitch.java ++++ b/src/main/java/net/minecraft/server/EntityWitch.java +@@ -158,7 +158,15 @@ public class EntityWitch extends EntityMonster implements IRangedEntity { + potionregistry = Potions.I; + } + +- EntityPotion entitypotion = new EntityPotion(this.world, this, PotionUtil.a(new ItemStack(Items.SPLASH_POTION), potionregistry)); ++ // Paper start ++ ItemStack potion = PotionUtil.a(new ItemStack(Items.SPLASH_POTION), potionregistry); ++ com.destroystokyo.paper.event.entity.WitchThrowPotionEvent event = new com.destroystokyo.paper.event.entity.WitchThrowPotionEvent((org.bukkit.entity.Witch) this.getBukkitEntity(), (org.bukkit.entity.Player) entityliving.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(potion)); ++ if (!event.callEvent()) { ++ return; ++ } ++ potion = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getPotion()); ++ EntityPotion entitypotion = new EntityPotion(this.world, this, potion); ++ // Paper end + + entitypotion.pitch -= -20.0F; + entitypotion.shoot(d1, d2 + (double) (f1 * 0.2F), d3, 0.75F, 8.0F); +-- +2.17.0 +