From a8114481d0a224c04cbb40abe295f702378fd976 Mon Sep 17 00:00:00 2001 From: okx-code Date: Mon, 13 May 2024 23:09:56 +0100 Subject: [PATCH] Fix pearled players going through portals That was being based on PlayerPortalEvent, which is no longer being called. The fix is to manually call the event. --- .../hacks/basic/PortalModifyHack.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PortalModifyHack.java b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PortalModifyHack.java index 63a8e3b85..30b0a0079 100644 --- a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PortalModifyHack.java +++ b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PortalModifyHack.java @@ -14,6 +14,7 @@ import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerTeleportEvent; import java.util.HashMap; @@ -63,10 +64,17 @@ public class PortalModifyHack extends BasicHack { @EventHandler public void onTick(ServerTickEndEvent event) { for (Map.Entry entry : teleports.entrySet()) { - entry.getKey().teleport(entry.getValue(), PlayerTeleportEvent.TeleportCause.END_PORTAL); - if (entry.getValue().getWorld().getName().equals(targetWorld)) { - spawnExit(entry.getValue()); - } + Player player = entry.getKey(); + PlayerPortalEvent portalEvent = new PlayerPortalEvent(player, player.getLocation(), entry.getValue(), PlayerTeleportEvent.TeleportCause.END_PORTAL, 0, true, 0); + Bukkit.getServer().getPluginManager().callEvent(portalEvent); + //noinspection ConstantValue + if (portalEvent.isCancelled() || portalEvent.getTo() == null || portalEvent.getTo().getWorld() == null) { + continue; + } + player.teleport(portalEvent.getTo(), PlayerTeleportEvent.TeleportCause.END_PORTAL); + if (portalEvent.getTo().getWorld().getName().equals(targetWorld)) { + spawnExit(entry.getValue()); + } } teleports.clear(); }