Merge pull request #386 from CivMC/fix-portals

Fix portal hack not triggering
This commit is contained in:
RedDevel2
2024-05-01 23:15:28 +02:00
committed by GitHub

View File

@@ -1,9 +1,11 @@
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;
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;
@@ -12,25 +14,31 @@ 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<Player, Location> teleports = new HashMap<>();
public PortalModifyHack(SimpleAdminHacks plugin, BasicHackConfig config) {
super(plugin, config);
}
//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 +48,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,10 +56,19 @@ public class PortalModifyHack extends BasicHack {
default:
return;
}
event.setTo(to);
if (to.getWorld().getName().equals(targetWorld)) {
spawnExit(to);
event.setCancelled(true);
teleports.put(player, to);
}
@EventHandler
public void onTick(ServerTickEndEvent event) {
for (Map.Entry<Player, Location> 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) {