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.
This commit is contained in:
parent
7acf39b600
commit
66c24d852d
|
|
@ -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<Integer, Integer> 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("<player> captured the flag for <team>!",
|
||||
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("<player> captured the flag for <team>!",
|
||||
Placeholder.component("player", flagCarrier.displayName()),
|
||||
Placeholder.component("team", winningTeam.getName())));
|
||||
Title capturingTeamTitle = Title.title(miniMessage.deserialize("<green><team> captured the flag!</green>",
|
||||
Placeholder.component("team", winningTeam.getName())),
|
||||
miniMessage.deserialize("<green>protect <player> while they bring it to your base.</green>",
|
||||
Placeholder.component("player", flagCarrier.displayName())));
|
||||
Title huntingTeamTitle = Title.title(miniMessage.deserialize("<red><team> captured the flag!</red>",
|
||||
Placeholder.component("team", winningTeam.getName())),
|
||||
miniMessage.deserialize("<red>kill <player> before they bring it to their base.</red>",
|
||||
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<Team> winnerExists() {
|
||||
Optional<Map.Entry<Integer, Integer>> max = teamFlagPointCount.entrySet().stream()
|
||||
.max(Map.Entry.comparingByValue());
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user