From 3448930f879baf3c39da93f749ae22aaa1ff06b8 Mon Sep 17 00:00:00 2001 From: ryanhamshire Date: Tue, 30 Dec 2014 18:21:40 -0800 Subject: [PATCH] Nether portal redirections. When a player doesn't have permission to build in a land claim where a new portal is to be created, redirect his teleport to outside the land claim. --- .../GriefPrevention/PlayerEventHandler.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java index 483182c..78583a1 100644 --- a/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java +++ b/src/me/ryanhamshire/GriefPrevention/PlayerEventHandler.java @@ -769,7 +769,7 @@ class PlayerEventHandler implements Listener } //when a player teleports via a portal - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.HIGHEST) void onPlayerPortal(PlayerPortalEvent event) { Player player = event.getPlayer(); @@ -780,6 +780,23 @@ class PlayerEventHandler implements Listener CheckForPortalTrapTask task = new CheckForPortalTrapTask(player, event.getFrom()); GriefPrevention.instance.getServer().getScheduler().scheduleSyncDelayedTask(GriefPrevention.instance, task, 100L); } + + //FEATURE: if the player teleporting doesn't have permission to build a nether portal and none already exists at the destination, redirect the portal + Location existingPortalLocation = event.getPortalTravelAgent().findPortal(event.getTo()); + boolean creatingPortal = event.getPortalTravelAgent().getCanCreatePortal() && (existingPortalLocation == null); + + //if creating a new portal + if(creatingPortal) + { + //and it goes to a land claim + Claim claim = this.dataStore.getClaimAt(event.getTo(), false, null); + while(claim != null && claim.allowBuild(player, Material.PORTAL) != null) + { + //redirect to outside the land claim + event.setTo(claim.getLesserBoundaryCorner().clone().add(-50, 0, -50)); + claim = this.dataStore.getClaimAt(event.getTo(), false, null); + } + } } //when a player teleports