From b99e8381abf6db4569e72d18714d091f2b59f4fe Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 28 Mar 2016 21:24:45 -0400 Subject: [PATCH] EntityPathfindEvent Fires when an Entity decides to start moving to a location. This is not the same as a move event. This only fires when an entity chooses to start moving to a location, and allows cancelling that pathfind. Additionally, only get is supported for now. Unsure if changing target location is safe to do. --- .../0030-EntityPathfindEvent.patch | 91 +++++++++++++++++++ .../0118-EntityPathfindEvent.patch | 39 ++++++++ 2 files changed, 130 insertions(+) create mode 100644 Spigot-API-Patches/0030-EntityPathfindEvent.patch create mode 100644 Spigot-Server-Patches/0118-EntityPathfindEvent.patch diff --git a/Spigot-API-Patches/0030-EntityPathfindEvent.patch b/Spigot-API-Patches/0030-EntityPathfindEvent.patch new file mode 100644 index 000000000..1b037fb45 --- /dev/null +++ b/Spigot-API-Patches/0030-EntityPathfindEvent.patch @@ -0,0 +1,91 @@ +From 973cff5bb740f213b5a90297c9cd132e4a57d8e4 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Mon, 28 Mar 2016 21:15:34 -0400 +Subject: [PATCH] EntityPathfindEvent + +Fires when an Entity decides to start moving to a location. + +diff --git a/src/main/java/com/destroystokyo/paper/event/entity/EntityPathfindEvent.java b/src/main/java/com/destroystokyo/paper/event/entity/EntityPathfindEvent.java +new file mode 100644 +index 0000000..21cab26 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/entity/EntityPathfindEvent.java +@@ -0,0 +1,75 @@ ++package com.destroystokyo.paper.event.entity; ++ ++import org.bukkit.Location; ++import org.bukkit.entity.Entity; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++ ++/** ++ * Fired when an Entity decides to start moving towards a location. ++ * ++ * This event does not fire for the entities actual movement. Only when it ++ * is choosing to start moving to a location. ++ */ ++public class EntityPathfindEvent extends Event implements Cancellable { ++ private final Entity entity; ++ private final Entity targetEntity; ++ private final Location loc; ++ public EntityPathfindEvent(Entity entity, Location loc, Entity targetEntity) { ++ this.entity = entity; ++ this.targetEntity = targetEntity; ++ this.loc = loc; ++ } ++ ++ /** ++ * The Entity that is pathfinding. ++ * @return The Entity that is pathfinding. ++ */ ++ public Entity getEntity() { ++ return entity; ++ } ++ ++ /** ++ * If the Entity is trying to pathfind to an entity, this is the entity in relation. ++ * ++ * Otherwise this will return null. ++ * ++ * @return The entity target or null ++ */ ++ public Entity getTargetEntity() { ++ return targetEntity; ++ } ++ ++ /** ++ * The Location of where the entity is about to move to. ++ * ++ * Note that if the target happened to of been an entity ++ * @return Location of where the entity is trying to pathfind to. ++ */ ++ public Location getLoc() { ++ return loc; ++ } ++ ++ 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; ++ } ++} +-- +2.7.4 + diff --git a/Spigot-Server-Patches/0118-EntityPathfindEvent.patch b/Spigot-Server-Patches/0118-EntityPathfindEvent.patch new file mode 100644 index 000000000..ec347d1b9 --- /dev/null +++ b/Spigot-Server-Patches/0118-EntityPathfindEvent.patch @@ -0,0 +1,39 @@ +From e5e8089880653c1435a16e5f25731a5b5ba1bf6e Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Mon, 28 Mar 2016 21:22:26 -0400 +Subject: [PATCH] EntityPathfindEvent + +Fires when an Entity decides to start moving to a location. + +diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java +index 9687785..0926d22 100644 +--- a/src/main/java/net/minecraft/server/NavigationAbstract.java ++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java +@@ -3,7 +3,7 @@ package net.minecraft.server; + public abstract class NavigationAbstract { + + private static int f = 20; +- protected EntityInsentient a; ++ protected EntityInsentient a;public Entity getEntity() { return a; } // Paper + protected World b; + protected PathEntity c; + protected double d; +@@ -73,6 +73,7 @@ public abstract class NavigationAbstract { + } else if (this.c != null && !this.c.b() && blockposition.equals(this.r)) { + return this.c; + } else { ++ if (!new com.destroystokyo.paper.event.entity.EntityPathfindEvent(getEntity().getBukkitEntity(), MCUtil.toLocation(getEntity().world, blockposition), null).callEvent()) { return null; } // Paper + this.r = blockposition; + float f = this.h(); + +@@ -96,6 +97,7 @@ public abstract class NavigationAbstract { + if (this.c != null && !this.c.b() && blockposition.equals(this.r)) { + return this.c; + } else { ++ if (!new com.destroystokyo.paper.event.entity.EntityPathfindEvent(getEntity().getBukkitEntity(), MCUtil.toLocation(entity.world, blockposition), entity.getBukkitEntity()).callEvent()) { return null; } // Paper + this.r = blockposition; + float f = this.h(); + +-- +2.7.4 +