From 73f39210c8ee20f7793d5d3b165da4cc1d6d78d9 Mon Sep 17 00:00:00 2001 From: LlmDl Date: Fri, 31 May 2024 17:44:39 -0500 Subject: [PATCH] - API: Add SuccessfulTownyTeleportEvent - Thrown when a player is spawned by Towny after they use /res, /town, or /nation spawn. --- .../SuccessfulTownyTeleportEvent.java | 47 +++++++++++++++++++ .../towny/tasks/TeleportWarmupTimerTask.java | 3 ++ .../bukkit/towny/utils/SpawnUtil.java | 11 +++-- Towny/src/main/resources/ChangeLog.txt | 4 +- 4 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 Towny/src/main/java/com/palmergames/bukkit/towny/event/teleport/SuccessfulTownyTeleportEvent.java diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/event/teleport/SuccessfulTownyTeleportEvent.java b/Towny/src/main/java/com/palmergames/bukkit/towny/event/teleport/SuccessfulTownyTeleportEvent.java new file mode 100644 index 0000000000..e4a36ebfe6 --- /dev/null +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/event/teleport/SuccessfulTownyTeleportEvent.java @@ -0,0 +1,47 @@ +package com.palmergames.bukkit.towny.event.teleport; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; +import com.palmergames.bukkit.towny.object.Resident; + +/** + * Thrown when Towny teleports a player after they have used /res, /town, or + * /nation spawn. + * + * @author LlmDl + * @since 0.100.2.12 + */ +public class SuccessfulTownyTeleportEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + private Resident resident; + private Location teleportLocation; + + public SuccessfulTownyTeleportEvent(Resident resident, Location loc) { + super(!Bukkit.isPrimaryThread()); + this.resident = resident; + this.teleportLocation = loc; + } + + @NotNull + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + public Resident getResident() { + return resident; + } + + public Location getTeleportLocation() { + return teleportLocation; + } + +} diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/tasks/TeleportWarmupTimerTask.java b/Towny/src/main/java/com/palmergames/bukkit/towny/tasks/TeleportWarmupTimerTask.java index fcf0c11c1e..9ae34fc28f 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/tasks/TeleportWarmupTimerTask.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/tasks/TeleportWarmupTimerTask.java @@ -7,6 +7,7 @@ import com.palmergames.bukkit.towny.TownyTimerHandler; import com.palmergames.bukkit.towny.event.teleport.CancelledTownyTeleportEvent; import com.palmergames.bukkit.towny.event.teleport.CancelledTownyTeleportEvent.CancelledTeleportReason; +import com.palmergames.bukkit.towny.event.teleport.SuccessfulTownyTeleportEvent; import com.palmergames.bukkit.towny.object.Resident; import com.palmergames.bukkit.towny.object.TeleportWarmupParticle; import com.palmergames.bukkit.towny.object.TeleportRequest; @@ -67,6 +68,8 @@ public void run() { PaperLib.teleportAsync(player, request.destinationLocation(), TeleportCause.COMMAND); + BukkitTools.fireEvent(new SuccessfulTownyTeleportEvent(resident, request.destinationLocation())); + if (request.cooldown() > 0) CooldownTimerTask.addCooldownTimer(resident.getName(), "teleport", request.cooldown()); continue; diff --git a/Towny/src/main/java/com/palmergames/bukkit/towny/utils/SpawnUtil.java b/Towny/src/main/java/com/palmergames/bukkit/towny/utils/SpawnUtil.java index 854965fc89..fed2f94fd0 100644 --- a/Towny/src/main/java/com/palmergames/bukkit/towny/utils/SpawnUtil.java +++ b/Towny/src/main/java/com/palmergames/bukkit/towny/utils/SpawnUtil.java @@ -8,6 +8,7 @@ import com.palmergames.bukkit.towny.event.SpawnEvent; import com.palmergames.bukkit.towny.event.TownSpawnEvent; import com.palmergames.bukkit.towny.event.teleport.ResidentSpawnEvent; +import com.palmergames.bukkit.towny.event.teleport.SuccessfulTownyTeleportEvent; import com.palmergames.bukkit.towny.event.teleport.UnjailedResidentTeleportEvent; import com.palmergames.bukkit.towny.object.SpawnInformation; import com.palmergames.bukkit.towny.object.Translatable; @@ -658,18 +659,20 @@ private static SpawnEvent getSpawnEvent(Player player, SpawnType spawnType, Loca * @param refundAccount The account that the player paid the cost to, used for refunds if the player aborts the teleport. */ private static void initiateSpawn(Player player, Location spawnLoc, int cooldown, double cost, @Nullable Account refundAccount) { + Resident resident = TownyAPI.getInstance().getResident(player); + if (resident == null) + return; + if (TownyTimerHandler.isTeleportWarmupRunning() && !hasPerm(player, PermissionNodes.TOWNY_SPAWN_ADMIN_NOWARMUP)) { // Use teleport warmup TownyMessaging.sendMsg(player, Translatable.of("msg_town_spawn_warmup", TownySettings.getTeleportWarmupTime())); - - Resident resident = TownyAPI.getInstance().getResident(player); - if (resident != null) - TeleportWarmupTimerTask.requestTeleport(resident, spawnLoc, cooldown, refundAccount, cost); + TeleportWarmupTimerTask.requestTeleport(resident, spawnLoc, cooldown, refundAccount, cost); } else { // Don't use teleport warmup if (player.getVehicle() != null) player.getVehicle().eject(); PaperLib.teleportAsync(player, spawnLoc, TeleportCause.COMMAND); + BukkitTools.fireEvent(new SuccessfulTownyTeleportEvent(resident, spawnLoc)); if (cooldown > 0 && !hasPerm(player, PermissionNodes.TOWNY_SPAWN_ADMIN_NOCOOLDOWN)) CooldownTimerTask.addCooldownTimer(player.getName(), "teleport", cooldown); } diff --git a/Towny/src/main/resources/ChangeLog.txt b/Towny/src/main/resources/ChangeLog.txt index 486edc3ffc..19c34d84df 100644 --- a/Towny/src/main/resources/ChangeLog.txt +++ b/Towny/src/main/resources/ChangeLog.txt @@ -9789,4 +9789,6 @@ v0.92.0.11: - New Config Option: nation.default_map_color - Default: "" - When set, all new Nations will have their map color set to this color. You must use a colour listed in the global_nation_settings.allowed_map_colors setting below, ie aqua, azure, etc. - - Fix players who log into an area where they are outlawed not using the correct town. \ No newline at end of file + - Fix players who log into an area where they are outlawed not using the correct town. + - API: Add SuccessfulTownyTeleportEvent + - Thrown when a player is spawned by Towny after they use /res, /town, or /nation spawn. \ No newline at end of file