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.Placeholder;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
|
import net.kyori.adventure.title.Title;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.boss.BarColor;
|
import org.bukkit.boss.BarColor;
|
||||||
import org.bukkit.boss.BarStyle;
|
import org.bukkit.boss.BarStyle;
|
||||||
|
|
@ -28,6 +29,8 @@ import java.util.stream.Collectors;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class Flag implements Runnable {
|
public class Flag implements Runnable {
|
||||||
|
|
||||||
|
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||||
|
|
||||||
private final HashMap<Integer, Integer> teamFlagPointCount = new HashMap<>();
|
private final HashMap<Integer, Integer> teamFlagPointCount = new HashMap<>();
|
||||||
private final ItemStack flagItem = new ItemStack(Material.BLACK_BANNER);
|
private final ItemStack flagItem = new ItemStack(Material.BLACK_BANNER);
|
||||||
private final BossBar bossBar = createBossBar();
|
private final BossBar bossBar = createBossBar();
|
||||||
|
|
@ -167,10 +170,7 @@ public class Flag implements Runnable {
|
||||||
spawnParticlesOnSquareBorder(winningTeam.getWorldBorderCenter(), GameConfig.FLAG.TURN_IN_RADIUS);
|
spawnParticlesOnSquareBorder(winningTeam.getWorldBorderCenter(), GameConfig.FLAG.TURN_IN_RADIUS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//TODO better message? mayb with a text thing on the screen?
|
notifyAboutCapture();
|
||||||
Bukkit.broadcast(MiniMessage.miniMessage().deserialize("<player> captured the flag for <team>!",
|
|
||||||
Placeholder.component("player", flagCarrier.displayName()),
|
|
||||||
Placeholder.component("team", winningTeam.getName())));
|
|
||||||
spawnFlag();
|
spawnFlag();
|
||||||
wins.merge(winningTeam.getId(), 1, Integer::sum);
|
wins.merge(winningTeam.getId(), 1, Integer::sum);
|
||||||
winningTeam = null;
|
winningTeam = null;
|
||||||
|
|
@ -186,6 +186,23 @@ public class Flag implements Runnable {
|
||||||
particleTrail.clear();
|
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() {
|
private Optional<Team> winnerExists() {
|
||||||
Optional<Map.Entry<Integer, Integer>> max = teamFlagPointCount.entrySet().stream()
|
Optional<Map.Entry<Integer, Integer>> max = teamFlagPointCount.entrySet().stream()
|
||||||
.max(Map.Entry.comparingByValue());
|
.max(Map.Entry.comparingByValue());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user