From bba15e45cc528192d84e0495fe94cbcd780dd541 Mon Sep 17 00:00:00 2001 From: The456gamer Date: Tue, 1 Aug 2023 19:01:22 +0100 Subject: [PATCH] stop run on certain teleport causes and set gamemode on same-island teleport COMMAND, PLUGIN, NETHER_PORTAL, END_PORTAL, SPECTATE, END_GATEWAY, UNKNOWN --- .../listeners/CourseRunnerListener.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/world/bentobox/parkour/listeners/CourseRunnerListener.java b/src/main/java/world/bentobox/parkour/listeners/CourseRunnerListener.java index 8ee3176..de64268 100644 --- a/src/main/java/world/bentobox/parkour/listeners/CourseRunnerListener.java +++ b/src/main/java/world/bentobox/parkour/listeners/CourseRunnerListener.java @@ -19,6 +19,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.util.Vector; import world.bentobox.bentobox.api.commands.CompositeCommand; @@ -112,6 +113,38 @@ public void onVisitorFall(EntityDamageEvent e) { } + @EventHandler + public void onTeleport(PlayerTeleportEvent e) { + boolean shouldStopRun = switch (e.getCause()) { + case ENDER_PEARL, CHORUS_FRUIT, DISMOUNT, EXIT_BED -> false; + case COMMAND, PLUGIN, NETHER_PORTAL, END_PORTAL, SPECTATE, END_GATEWAY, UNKNOWN -> true; + }; + if (shouldStopRun) { + User user = User.getInstance(e.getPlayer().getUniqueId()); + if (parkourRunManager.getCheckpoints().containsKey(e.getPlayer().getUniqueId()) && user.isOnline()) { + user.notify("parkour.session-ended"); + } + parkourRunManager.clear(e.getPlayer().getUniqueId()); + } + + if (e.getTo() != null) { + Optional fromIsland = addon.getIslands().getIslandAt(e.getFrom()); + Optional toIsland = addon.getIslands().getIslandAt(e.getTo()); + + if (fromIsland.isPresent() && toIsland.isPresent() && fromIsland.get().equals(toIsland.get())) { + // same island teleport + Island island = fromIsland.get(); + User user = User.getInstance(e.getPlayer()); + if (island.getFlag(addon.CREATIVE_FLAG) <= island.getRank(user)) { + user.setGameMode(GameMode.CREATIVE); + } else { + user.setGameMode(GameMode.SURVIVAL); + } + } + } + } + + /** * Prevent players from issuing commands during a run *