From 66c24d852de6b5e78f21c4391591d8568a67bf07 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Tue, 11 Feb 2025 21:27:34 +0100 Subject: [PATCH] Refactor and enhance flag capture notification system. Extracted the flag capture notification logic into a dedicated method for better readability and reusability. Added team-specific title messages to notify players of the flag capture, improving clarity and game immersion. --- src/main/java/com/alttd/ctf/flag/Flag.java | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alttd/ctf/flag/Flag.java b/src/main/java/com/alttd/ctf/flag/Flag.java index 004a114..d437af0 100644 --- a/src/main/java/com/alttd/ctf/flag/Flag.java +++ b/src/main/java/com/alttd/ctf/flag/Flag.java @@ -12,6 +12,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import net.kyori.adventure.title.Title; import org.bukkit.*; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; @@ -28,6 +29,8 @@ import java.util.stream.Collectors; @Slf4j public class Flag implements Runnable { + private static final MiniMessage miniMessage = MiniMessage.miniMessage(); + private final HashMap teamFlagPointCount = new HashMap<>(); private final ItemStack flagItem = new ItemStack(Material.BLACK_BANNER); private final BossBar bossBar = createBossBar(); @@ -167,10 +170,7 @@ public class Flag implements Runnable { spawnParticlesOnSquareBorder(winningTeam.getWorldBorderCenter(), GameConfig.FLAG.TURN_IN_RADIUS); return; } - //TODO better message? mayb with a text thing on the screen? - Bukkit.broadcast(MiniMessage.miniMessage().deserialize(" captured the flag for !", - Placeholder.component("player", flagCarrier.displayName()), - Placeholder.component("team", winningTeam.getName()))); + notifyAboutCapture(); spawnFlag(); wins.merge(winningTeam.getId(), 1, Integer::sum); winningTeam = null; @@ -186,6 +186,23 @@ public class Flag implements Runnable { particleTrail.clear(); } + private void notifyAboutCapture() { + Bukkit.broadcast(miniMessage.deserialize(" captured the flag for !", + Placeholder.component("player", flagCarrier.displayName()), + Placeholder.component("team", winningTeam.getName()))); + Title capturingTeamTitle = Title.title(miniMessage.deserialize(" captured the flag!", + Placeholder.component("team", winningTeam.getName())), + miniMessage.deserialize("protect while they bring it to your base.", + Placeholder.component("player", flagCarrier.displayName()))); + Title huntingTeamTitle = Title.title(miniMessage.deserialize(" captured the flag!", + Placeholder.component("team", winningTeam.getName())), + miniMessage.deserialize("kill before they bring it to their base.", + Placeholder.component("player", flagCarrier.displayName()))); + Bukkit.getOnlinePlayers().forEach(player -> + gameManager.getTeam(player.getUniqueId()).ifPresent(team -> + player.showTitle(team.getId() == winningTeam.getId() ? capturingTeamTitle : huntingTeamTitle))); + } + private Optional winnerExists() { Optional> max = teamFlagPointCount.entrySet().stream() .max(Map.Entry.comparingByValue());