mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-15 23:20:44 +00:00
Merge pull request #386 from CivMC/fix-portals
Fix portal hack not triggering
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user