diff --git a/Spigot-API-Patches/EndermanAttackPlayerEvent.patch b/Spigot-API-Patches/EndermanAttackPlayerEvent.patch new file mode 100644 index 0000000000..dcc4ce73f5 --- /dev/null +++ b/Spigot-API-Patches/EndermanAttackPlayerEvent.patch @@ -0,0 +1,108 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Tue, 1 May 2018 20:17:44 -0400 +Subject: [PATCH] EndermanAttackPlayerEvent + +Allow control over whether or not an enderman aggros a player. + +This allows you to override/extend the pumpkin/stare logic. + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EndermanAttackPlayerEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EndermanAttackPlayerEvent.java +new file mode 100644 +index 00000000..55912659 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/EndermanAttackPlayerEvent.java +@@ -0,0 +0,0 @@ ++/* ++ * Copyright (c) 2018 Daniel Ennis (Aikar) MIT License ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++package com.destroystokyo.paper.event.entity; ++ ++import org.bukkit.entity.Enderman; ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.entity.EntityEvent; ++ ++/** ++ * Fired when an Enderman determines if it should attack a player or not. ++ * Starts off cancelled if the player is wearing a pumpkin head or is not looking ++ * at the Enderman, according to Vanilla rules. ++ * ++ */ ++public class EndermanAttackPlayerEvent extends EntityEvent implements Cancellable { ++ private final Player player; ++ ++ public EndermanAttackPlayerEvent(Enderman entity, Player player) { ++ super(entity); ++ this.player = player; ++ } ++ ++ /** ++ * The enderman considering attacking ++ */ ++ @Override ++ public Enderman getEntity() { ++ return (Enderman) super.getEntity(); ++ } ++ ++ /** ++ * The player the Enderman is considering attacking ++ */ ++ public Player getPlayer() { ++ return player; ++ } ++ ++ private static final HandlerList handlers = new HandlerList(); ++ ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ private boolean cancelled = false; ++ ++ /** ++ * ++ * @return If cancelled, the enderman will not attack ++ */ ++ @Override ++ public boolean isCancelled() { ++ return cancelled; ++ } ++ ++ /** ++ * Cancels if the Enderman will attack this player ++ * @param cancel true if you wish to cancel this event ++ */ ++ @Override ++ public void setCancelled(boolean cancel) { ++ cancelled = cancel; ++ } ++} +-- \ No newline at end of file diff --git a/Spigot-API-Patches/EndermanEscapeEvent.patch b/Spigot-API-Patches/EndermanEscapeEvent.patch index ba61800848..72abe21d14 100644 --- a/Spigot-API-Patches/EndermanEscapeEvent.patch +++ b/Spigot-API-Patches/EndermanEscapeEvent.patch @@ -9,13 +9,14 @@ You may cancel this, enabling ranged attacks to damage the enderman for example. diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EndermanEscapeEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EndermanEscapeEvent.java new file mode 100644 -index 00000000..958c66b3 +index 00000000..b8de1037 --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/event/entity/EndermanEscapeEvent.java @@ -0,0 +0,0 @@ +package com.destroystokyo.paper.event.entity; + +import org.bukkit.entity.Enderman; ++import org.bukkit.entity.Entity; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; @@ -29,6 +30,11 @@ index 00000000..958c66b3 + this.reason = reason; + } + ++ @Override ++ public Enderman getEntity() { ++ return (Enderman) super.getEntity(); ++ } ++ + /** + * @return The reason the enderman is trying to escape + */ diff --git a/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch new file mode 100644 index 0000000000..62ba1e4fd4 --- /dev/null +++ b/Spigot-Server-Patches/EndermanAttackPlayerEvent.patch @@ -0,0 +1,30 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Tue, 1 May 2018 20:18:54 -0400 +Subject: [PATCH] EndermanAttackPlayerEvent + +Allow control over whether or not an enderman aggros a player. + +This allows you to override/extend the pumpkin/stare logic. + +diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java +index 6ebfb12fb..f0da99d87 100644 +--- a/src/main/java/net/minecraft/server/EntityEnderman.java ++++ b/src/main/java/net/minecraft/server/EntityEnderman.java +@@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster { + this.setCarried(iblockdata); + } + ++ // Paper start - OBFHELPER - ok not really, but verify this on updates + private boolean f(EntityHuman entityhuman) { ++ boolean cancel = f_real(entityhuman); ++ com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event = new com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent((org.bukkit.entity.Enderman) getBukkitEntity(), (org.bukkit.entity.Player) entityhuman.getBukkitEntity()); ++ event.setCancelled(cancel); ++ return event.callEvent(); ++ } ++ private boolean f_real(EntityHuman entityhuman) { ++ // Paper end + ItemStack itemstack = (ItemStack) entityhuman.inventory.armor.get(3); + + if (itemstack.getItem() == Item.getItemOf(Blocks.PUMPKIN)) { +-- \ No newline at end of file