From f73589fdb46a9e2daea8f746a0687a1f74aaaecf Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 23 Mar 2024 01:38:07 +0000 Subject: [PATCH 1/2] 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); } From 8c8e1cdab5d55ed397bbd7c6791e16dc4a062c5c Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 23 Mar 2024 01:59:33 +0000 Subject: [PATCH 2/2] delay teleport --- .../hacks/basic/PortalModifyHack.java | 21 +++++++++++++++---- 1 file changed, 17 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 995f802f9..63a8e3b85 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 @@ -1,5 +1,6 @@ package com.programmerdan.minecraft.simpleadminhacks.hacks.basic; +import com.destroystokyo.paper.event.server.ServerTickEndEvent; import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHack; import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; @@ -13,15 +14,19 @@ 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; +import java.util.Map; + public class PortalModifyHack extends BasicHack { @AutoLoad private String targetWorld; @AutoLoad private String homeWorld; + + private final Map teleports = new HashMap<>(); public PortalModifyHack(SimpleAdminHacks plugin, BasicHackConfig config) { super(plugin, config); @@ -52,10 +57,18 @@ public class PortalModifyHack extends BasicHack { return; } event.setCancelled(true); - player.teleport(to, PlayerTeleportEvent.TeleportCause.END_PORTAL); - if (to.getWorld().getName().equals(targetWorld)) { - spawnExit(to); + teleports.put(player, to); + } + + @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()); + } } + teleports.clear(); } private World getTargetWorld(Player player) {