From 96fdafd9354f1d27d56ccc1cf7276f1552182659 Mon Sep 17 00:00:00 2001 From: Yannick Lamprecht <1420893+yannicklamprecht@users.noreply.github.com> Date: Sat, 3 Dec 2022 23:46:38 +0100 Subject: [PATCH] Player Entity Tracking Events (#4722) --- .../0413-Player-Entity-Tracking-Events.patch | 101 ++++++++++++++++++ .../0951-Player-Entity-Tracking-Events.patch | 34 ++++++ 2 files changed, 135 insertions(+) create mode 100644 patches/api/0413-Player-Entity-Tracking-Events.patch create mode 100644 patches/server/0951-Player-Entity-Tracking-Events.patch diff --git a/patches/api/0413-Player-Entity-Tracking-Events.patch b/patches/api/0413-Player-Entity-Tracking-Events.patch new file mode 100644 index 0000000000..a824ae278f --- /dev/null +++ b/patches/api/0413-Player-Entity-Tracking-Events.patch @@ -0,0 +1,101 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Yannick Lamprecht +Date: Wed, 30 Mar 2022 18:16:37 +0200 +Subject: [PATCH] Player Entity Tracking Events + + +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerTrackEntityEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerTrackEntityEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..167be75dc616578db2df1a88f1a54b17707b3a88 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerTrackEntityEvent.java +@@ -0,0 +1,42 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.Player; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Is called when a {@link Player} tracks an {@link Entity}. ++ */ ++public class PlayerTrackEntityEvent extends PlayerEvent { ++ ++ private static final HandlerList handlers = new HandlerList(); ++ private final Entity entity; ++ ++ public PlayerTrackEntityEvent(@NotNull Player player, @NotNull Entity entity) { ++ super(player); ++ this.entity = entity; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ /** ++ * Gets the entity that will be tracked ++ * ++ * @return the entity tracked ++ */ ++ @NotNull ++ public Entity getEntity() { ++ return entity; ++ } ++} +diff --git a/src/main/java/io/papermc/paper/event/player/PlayerUntrackEntityEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerUntrackEntityEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..683710d53e3802ca1cb1a448886a57df6b15dd44 +--- /dev/null ++++ b/src/main/java/io/papermc/paper/event/player/PlayerUntrackEntityEvent.java +@@ -0,0 +1,41 @@ ++package io.papermc.paper.event.player; ++ ++import org.bukkit.entity.Entity; ++import org.bukkit.entity.Player; ++import org.bukkit.event.HandlerList; ++import org.bukkit.event.player.PlayerEvent; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Is called when a {@link Player} untracks an {@link Entity}. ++ */ ++public class PlayerUntrackEntityEvent extends PlayerEvent { ++ ++ private static final HandlerList handlers = new HandlerList(); ++ private final Entity entity; ++ ++ public PlayerUntrackEntityEvent(@NotNull Player player, @NotNull Entity entity) { ++ super(player); ++ this.entity = entity; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ /** ++ * Gets the entity that will be untracked ++ * @return the entity untracked ++ */ ++ @NotNull ++ public Entity getEntity() { ++ return entity; ++ } ++} diff --git a/patches/server/0951-Player-Entity-Tracking-Events.patch b/patches/server/0951-Player-Entity-Tracking-Events.patch new file mode 100644 index 0000000000..723e8a1d03 --- /dev/null +++ b/patches/server/0951-Player-Entity-Tracking-Events.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Yannick Lamprecht +Date: Wed, 30 Mar 2022 18:16:52 +0200 +Subject: [PATCH] Player Entity Tracking Events + + +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index 6fa47becd0f83ac4273ef3a10c314aa27b08184b..22cd5f0e40d7e3cd04793a9dda29d113428fa093 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -3796,9 +3796,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { + EnchantmentHelper.doPostDamageEffects(attacker, target); + } + +- public void startSeenByPlayer(ServerPlayer player) {} ++ // Paper start ++ public void startSeenByPlayer(ServerPlayer player) { ++ if (io.papermc.paper.event.player.PlayerTrackEntityEvent.getHandlerList().getRegisteredListeners().length > 0) { ++ new io.papermc.paper.event.player.PlayerTrackEntityEvent(player.getBukkitEntity(), this.getBukkitEntity()).callEvent(); ++ } ++ } ++ // Paper end + +- public void stopSeenByPlayer(ServerPlayer player) {} ++ // Paper start ++ public void stopSeenByPlayer(ServerPlayer player) { ++ if(io.papermc.paper.event.player.PlayerUntrackEntityEvent.getHandlerList().getRegisteredListeners().length > 0) { ++ new io.papermc.paper.event.player.PlayerUntrackEntityEvent(player.getBukkitEntity(), this.getBukkitEntity()).callEvent(); ++ } ++ } ++ // Paper end + + public float rotate(Rotation rotation) { + float f = Mth.wrapDegrees(this.getYRot());