From bd603371bf9e28168f9cab9d4b40421f4facc562 Mon Sep 17 00:00:00 2001 From: Aikar Date: Tue, 1 May 2018 20:19:47 -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. --- .../0098-EndermanEscapeEvent.patch | 12 +- .../0103-EndermanAttackPlayerEvent.patch | 110 ++++++++++++++++++ .../0296-EndermanAttackPlayerEvent.patch | 32 +++++ 3 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 Spigot-API-Patches/0103-EndermanAttackPlayerEvent.patch create mode 100644 Spigot-Server-Patches/0296-EndermanAttackPlayerEvent.patch diff --git a/Spigot-API-Patches/0098-EndermanEscapeEvent.patch b/Spigot-API-Patches/0098-EndermanEscapeEvent.patch index 1cb59804f..8ff0f7cc2 100644 --- a/Spigot-API-Patches/0098-EndermanEscapeEvent.patch +++ b/Spigot-API-Patches/0098-EndermanEscapeEvent.patch @@ -1,4 +1,4 @@ -From 4132364cc9de1e0d531b6dc172ef62b87f3979b9 Mon Sep 17 00:00:00 2001 +From 56e8465d9383fd6771c00c0ac017b30844a6fb9b Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 30 Apr 2018 13:14:30 -0400 Subject: [PATCH] EndermanEscapeEvent @@ -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 +1,72 @@ +@@ -0,0 +1,78 @@ +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-API-Patches/0103-EndermanAttackPlayerEvent.patch b/Spigot-API-Patches/0103-EndermanAttackPlayerEvent.patch new file mode 100644 index 000000000..0d65e7ed5 --- /dev/null +++ b/Spigot-API-Patches/0103-EndermanAttackPlayerEvent.patch @@ -0,0 +1,110 @@ +From 153ab6b96f5bd87fe989e6e102a0c902d6de8e4d 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 +1,92 @@ ++/* ++ * 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; ++ } ++} +-- +2.17.0 + diff --git a/Spigot-Server-Patches/0296-EndermanAttackPlayerEvent.patch b/Spigot-Server-Patches/0296-EndermanAttackPlayerEvent.patch new file mode 100644 index 000000000..b9bfc44b9 --- /dev/null +++ b/Spigot-Server-Patches/0296-EndermanAttackPlayerEvent.patch @@ -0,0 +1,32 @@ +From 514d84da549d03ac5c8c2ca7bc83bb4ef97c3c72 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 +@@ -149,7 +149,15 @@ 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)) { +-- +2.17.0 +