From e0c5c6ecf512821f3788f3b3a152f481821cf11b Mon Sep 17 00:00:00 2001 From: Lynx Date: Mon, 22 Dec 2025 23:43:47 -0800 Subject: [PATCH 1/2] broadcast when targeting players via spectator menu --- .../managers/admin/AdminManager.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java b/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java index d10f0c1..215dc92 100644 --- a/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java +++ b/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java @@ -1,6 +1,7 @@ package org.modernbeta.admintoolbox.managers.admin; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import org.bukkit.Bukkit; @@ -24,6 +25,7 @@ import org.bukkit.inventory.ItemStack; import org.modernbeta.admintoolbox.AdminToolboxPlugin; import org.modernbeta.admintoolbox.managers.admin.AdminState.TeleportHistory; +import org.modernbeta.admintoolbox.utils.LocationUtils; import javax.annotation.Nullable; import java.util.Map; @@ -281,9 +283,34 @@ void onAdminTeleport(PlayerTeleportEvent teleportEvent) { Player player = teleportEvent.getPlayer(); if (!isActiveAdmin(player)) return; if (teleportEvent.getCause() != PlayerTeleportEvent.TeleportCause.SPECTATE) return; - if (player.hasPermission(TARGET_PLAYER_PERMISSION)) - // allow if admin can spectate players directly, allow it + if (player.hasPermission(TARGET_PLAYER_PERMISSION)) { + // allow if admin can spectate players directly, broadcast and allow it + Location dest = teleportEvent.getTo(); + + Bukkit.getRegionScheduler().run(plugin, dest, (task) -> { + dest.getNearbyPlayers(0.5).stream() + .filter((nearbyPlayer) -> !nearbyPlayer.getUniqueId().equals(player.getUniqueId())) + .findFirst() + .ifPresentOrElse((target) -> { + plugin.getAdminAudience().sendMessage(Component.text() + .color(NamedTextColor.GOLD) + .append(Component.text(player.getName())) + .append(Component.text(" is spectating at ")) + .append(Component.text(target.getName())) + .build()); + }, () -> { + plugin.getAdminAudience().sendMessage(Component.text() + .color(NamedTextColor.GOLD) + .append(Component.text(player.getName())) + .append(Component.text(" is spectating at ")) + .append(Component.text( + LocationUtils.prettifyCoordinates(teleportEvent.getTo())) + ) + .build()); + }); + }); return; + } player.sendRichMessage("You don't have permission to spectate players"); teleportEvent.setCancelled(true); From 3809de27dd964ecf218be73730a827597b75ee00 Mon Sep 17 00:00:00 2001 From: Lynx Date: Tue, 23 Dec 2025 00:04:26 -0800 Subject: [PATCH 2/2] doc: PlayerTeleportEvent does not not fire on Folia --- .../modernbeta/admintoolbox/managers/admin/AdminManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java b/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java index 215dc92..849baca 100644 --- a/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java +++ b/src/main/java/org/modernbeta/admintoolbox/managers/admin/AdminManager.java @@ -277,6 +277,10 @@ void onAdminJoin(PlayerJoinEvent joinEvent) { /** * Prevent players in admin mode from using the spectator teleport menu unless they have * permission to teleport to players directly. + * + *

+ * PlayerTeleportEvent does not fire on Folia servers. + * See PaperMC/Folia#105 */ @EventHandler void onAdminTeleport(PlayerTeleportEvent teleportEvent) {