From d6f623ee8e1f8b90b4bf16fde7653868dd5940d7 Mon Sep 17 00:00:00 2001 From: fullwall Date: Fri, 22 Apr 2016 00:54:11 +0800 Subject: [PATCH] Add configurable warmup delay for teleporting --- .../java/net/citizensnpcs/EventListen.java | 19 +++++++++++++++++-- src/main/java/net/citizensnpcs/Settings.java | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index 6313868d7..0d6624f0b 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -33,6 +33,7 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.event.vehicle.VehicleDestroyEvent; import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.world.ChunkLoadEvent; @@ -41,6 +42,7 @@ import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.scoreboard.Team; import com.google.common.base.Predicates; @@ -423,8 +425,21 @@ public class EventListen implements Listener { skinUpdateTracker.updatePlayer(event.getPlayer(), 15, true); } - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerTeleport(PlayerTeleportEvent event) { + @EventHandler(ignoreCancelled = true) + public void onPlayerTeleport(final PlayerTeleportEvent event) { + if (event.getCause() == TeleportCause.PLUGIN && !event.getPlayer().hasMetadata("citizens-force-teleporting") + && npcRegistry.getNPC(event.getPlayer()) != null && Setting.TELEPORT_DELAY.asInt() > 0) { + event.setCancelled(true); + Bukkit.getScheduler().scheduleSyncDelayedTask(CitizensAPI.getPlugin(), new Runnable() { + @Override + public void run() { + event.getPlayer().setMetadata("citizens-force-teleporting", + new FixedMetadataValue(CitizensAPI.getPlugin(), true)); + event.getPlayer().teleport(event.getTo()); + event.getPlayer().removeMetadata("citizens-force-teleporting", CitizensAPI.getPlugin()); + } + }, Setting.TELEPORT_DELAY.asInt()); + } skinUpdateTracker.updatePlayer(event.getPlayer(), 15, true); } diff --git a/src/main/java/net/citizensnpcs/Settings.java b/src/main/java/net/citizensnpcs/Settings.java index 6dfe0a9eb..745fddefb 100644 --- a/src/main/java/net/citizensnpcs/Settings.java +++ b/src/main/java/net/citizensnpcs/Settings.java @@ -115,6 +115,7 @@ public class Settings { TALK_CLOSE_MAXIMUM_COOLDOWN("npc.text.max-talk-cooldown", 5), TALK_CLOSE_MINIMUM_COOLDOWN("npc.text.min-talk-cooldown", 10), TALK_ITEM("npc.text.talk-item", "340"), + TELEPORT_DELAY("npc.teleport-delay", -1), USE_BOAT_CONTROLS("npc.controllable.use-boat-controls", true), USE_NEW_PATHFINDER("npc.pathfinding.use-new-finder", false), USE_SCOREBOARD_TEAMS("npc.player-scoreboard-teams.enable", true);