From ed045ab4e434e72ff415ce9dc98c502c3e31f818 Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 23 Mar 2024 01:38:07 +0000 Subject: [PATCH] Fix portal hack not triggering If you are falling really fast, you will be falling multiple blocks per second, and could possibly pass straight through an end portal. This fix changes the hack to use an event triggered earlier to detect if a player passes through an end portal. --- .../hacks/basic/PortalModifyHack.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 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 576e4cadf..995f802f9 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 @@ -4,6 +4,7 @@ import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHack; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; import com.programmerdan.minecraft.simpleadminhacks.framework.autoload.AutoLoad; +import io.papermc.paper.event.entity.EntityInsideBlockEvent; import org.bukkit.Bukkit; import org.bukkit.HeightMap; import org.bukkit.Location; @@ -27,10 +28,12 @@ public class PortalModifyHack extends BasicHack { } //We want to go last incase any plugins want to cancel our attempt - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerEnterPortal(PlayerPortalEvent event) { - Player player = event.getPlayer(); - if (event.getCause() != PlayerTeleportEvent.TeleportCause.END_PORTAL) { + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerEnterPortal(EntityInsideBlockEvent event) { + if (!(event.getEntity() instanceof Player player)) { + return; + } + if (event.getBlock().getType() != Material.END_PORTAL) { return; } World world = Bukkit.getWorld(targetWorld); @@ -40,7 +43,7 @@ public class PortalModifyHack extends BasicHack { Location to; switch (getTargetWorld(player).getEnvironment()) { case NETHER: - to = new Location(getTargetWorld(player), event.getFrom().getX(), 125, event.getFrom().getZ()); + to = new Location(getTargetWorld(player), player.getLocation().getX(), 125, player.getLocation().getZ()); break; case NORMAL: to = getTargetWorld(player).getHighestBlockAt(player.getLocation(), HeightMap.WORLD_SURFACE).getLocation().toCenterLocation().add(0,1,0); @@ -48,7 +51,8 @@ public class PortalModifyHack extends BasicHack { default: return; } - event.setTo(to); + event.setCancelled(true); + player.teleport(to, PlayerTeleportEvent.TeleportCause.END_PORTAL); if (to.getWorld().getName().equals(targetWorld)) { spawnExit(to); }