From 720c37b5dd9ea766b4633f5dc25a3caffb36f8d2 Mon Sep 17 00:00:00 2001 From: bloodshot Date: Fri, 13 Nov 2020 17:37:52 -0500 Subject: [PATCH] Fix player-deny-flight not resetting on teleport. --- .../listener/PlayerEventHandler.java | 3 ++- .../listener/EntityEventHandler.java | 16 ++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java b/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java index ec84c2c..566bad5 100644 --- a/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java +++ b/bukkit/src/main/java/com/griefdefender/listener/PlayerEventHandler.java @@ -932,6 +932,8 @@ public class PlayerEventHandler implements Listener { return; } GDCauseStackManager.getInstance().pushCause(player); + final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); + playerData.optionNoFly = null; // Reset no fly option on teleports as from/to claim would be the same if (!GDFlags.ENTITY_TELEPORT_FROM && !GDFlags.ENTITY_TELEPORT_TO) { return; } @@ -954,7 +956,6 @@ public class PlayerEventHandler implements Listener { if (type == TeleportCause.UNKNOWN && !sourceLocation.getWorld().getUID().equals(destination.getWorld().getUID())) { source = destination.getWorld().getEnvironment().name().toLowerCase().replace("the_", "") + "_portal"; } - final GDPlayerData playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); final GDClaim sourceClaim = this.dataStore.getClaimAtPlayer(playerData, player.getLocation()); if (playerData.inPvpCombat() && GDOptions.isOptionEnabled(Options.PVP_COMBAT_TELEPORT)) { // Cancel event if player is unable to teleport during PvP combat diff --git a/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java b/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java index bf43a2a..c3500cf 100644 --- a/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java +++ b/sponge/src/main/java/com/griefdefender/listener/EntityEventHandler.java @@ -708,13 +708,17 @@ public class EntityEventHandler { GDTimings.ENTITY_TELEPORT_EVENT.startTimingIfSync(); Player player = null; + GDClaim sourceClaim = null; + GDPlayerData playerData = null; GDPermissionUser user = null; if (entity instanceof Player) { player = (Player) entity; user = PermissionHolderCache.getInstance().getOrCreateUser(player); - final GDPlayerData playerData = user.getInternalPlayerData(); + playerData = user.getInternalPlayerData(); + playerData.optionNoFly = null; // Reset no fly option on teleports as from/to claim would be the same + sourceClaim = this.dataStore.getClaimAtPlayer(playerData, player.getLocation()); // Cancel event if player is unable to teleport during PvP combat - final boolean pvpCombatTeleport = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Boolean.class), player, Options.PVP_COMBAT_TELEPORT); + final boolean pvpCombatTeleport = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Boolean.class), player, Options.PVP_COMBAT_TELEPORT, sourceClaim); if (!pvpCombatTeleport && GDOptions.isOptionEnabled(Options.PVP_COMBAT_TELEPORT)) { final int combatTimeRemaining = playerData.getPvpCombatTimeRemaining(); if (combatTimeRemaining > 0) { @@ -731,6 +735,7 @@ public class EntityEventHandler { user = PermissionHolderCache.getInstance().getOrCreateUser(entity.getCreator().orElse(null)); if (user != null && user.getOnlinePlayer() != null) { player = user.getOnlinePlayer(); + playerData = user.getInternalPlayerData(); } } @@ -752,12 +757,7 @@ public class EntityEventHandler { return; } - GDClaim sourceClaim = null; - GDPlayerData playerData = null; - if (player != null) { - playerData = GriefDefenderPlugin.getInstance().dataStore.getOrCreatePlayerData(player.getWorld(), player.getUniqueId()); - sourceClaim = this.dataStore.getClaimAtPlayer(playerData, player.getLocation()); - } else { + if (sourceClaim == null) { sourceClaim = this.dataStore.getClaimAt(sourceLocation); }