Compare commits

...

2 Commits

Author SHA1 Message Date
Teriuihi 237cae37ca Refactor flag capture and turn-in notifications.
Extracted and separated notification logic for flag capture and turn-in events into distinct methods to improve clarity and maintainability. Updated messaging to better align with game events and streamlined title displays for players.
2025-02-11 22:12:31 +01:00
Teriuihi a3c22cf074 Refactor flag reset logic for clarity and reuse.
Consolidated flag reset responsibilities into `resetFlagCarrier` and `resetAll` methods to improve code readability and maintainability. Replaced redundant flag reset operations with the new methods across the codebase. Updated `EndedPhase` to use `resetAll` for consistent behavior.
2025-02-11 22:08:58 +01:00
3 changed files with 43 additions and 36 deletions

View File

@ -81,15 +81,9 @@ public class Flag implements Runnable {
//TODO add de-buffs and enable buffs for others? //TODO add de-buffs and enable buffs for others?
player.getInventory().setItem(EquipmentSlot.HEAD, flagItem); player.getInventory().setItem(EquipmentSlot.HEAD, flagItem);
Bukkit.getScheduler().runTask(main, () -> flagLocation.getBlock().setType(Material.AIR)); Bukkit.getScheduler().runTask(main, () -> flagLocation.getBlock().setType(Material.AIR));
Bukkit.broadcast(MiniMessage.miniMessage().deserialize("<green><player> from <team> captured the flag!", TagResolver.resolver( notifyAboutCapture();
Placeholder.component("player", player.displayName()),
Placeholder.component("team", teamPlayer.getTeam().getName())
)));
flagCarrier = player; flagCarrier = player;
teamFlagPointCount.clear(); resetFlag();
winningTeam = null;
lastWinningTeamId = -1;
bossBar.setProgress(0);
} }
public void spawnFlag() { public void spawnFlag() {
@ -146,24 +140,38 @@ public class Flag implements Runnable {
updateDisplay(); updateDisplay();
} else { } else {
winningTeam = optionalTeam.get(); winningTeam = optionalTeam.get();
bossBar.setVisible(false); resetFlag();
bossBar.setProgress(0);
//TODO stop capture and let ppl know they can now capture the flag //TODO stop capture and let ppl know they can now capture the flag
} }
} }
private void notifyAboutCapture() {
Bukkit.broadcast(miniMessage.deserialize("<player> is carrying the flag for <team>!",
Placeholder.component("player", flagCarrier.displayName()),
Placeholder.component("team", winningTeam.getName())));
Title capturingTeamTitle = Title.title(miniMessage.deserialize("<green><team> obtained 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> obtained 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 void spawnParticlesOnSquareBorder(Location center, double size) { private void spawnParticlesOnSquareBorder(Location center, double size) {
double step = 0.2; double step = 0.2;
World world = center.getWorld(); World world = center.getWorld();
Location finalCenter = center.clone().add(0, 0.5, 0); Location finalCenter = center.clone().add(0, 0.5, 0);
Bukkit.getScheduler().runTask(main, () -> { Bukkit.getScheduler().runTask(main, () -> {
// Top and Bottom (Z varies, X constant)
for (double z = -size; z <= size; z += step) { for (double z = -size; z <= size; z += step) {
world.spawnParticle(Particle.FLAME, finalCenter.getX() + size, finalCenter.getY(), finalCenter.getZ() + z, 1, 0, 0, 0, 0); world.spawnParticle(Particle.FLAME, finalCenter.getX() + size, finalCenter.getY(), finalCenter.getZ() + z, 1, 0, 0, 0, 0);
world.spawnParticle(Particle.FLAME, finalCenter.getX() - size, finalCenter.getY(), finalCenter.getZ() + z, 1, 0, 0, 0, 0); world.spawnParticle(Particle.FLAME, finalCenter.getX() - size, finalCenter.getY(), finalCenter.getZ() + z, 1, 0, 0, 0, 0);
} }
// Left and Right (X varies, Z constant)
for (double x = -size; x <= size; x += step) { for (double x = -size; x <= size; x += step) {
world.spawnParticle(Particle.FLAME, finalCenter.getX() + x, finalCenter.getY(), finalCenter.getZ() + size, 1, 0, 0, 0, 0); world.spawnParticle(Particle.FLAME, finalCenter.getX() + x, finalCenter.getY(), finalCenter.getZ() + size, 1, 0, 0, 0, 0);
world.spawnParticle(Particle.FLAME, finalCenter.getX() + x, finalCenter.getY(), finalCenter.getZ() - size, 1, 0, 0, 0, 0); world.spawnParticle(Particle.FLAME, finalCenter.getX() + x, finalCenter.getY(), finalCenter.getZ() - size, 1, 0, 0, 0, 0);
@ -184,8 +192,7 @@ public class Flag implements Runnable {
private void checkFlagCarrier() { private void checkFlagCarrier() {
if (flagCarrier.isDead() || !flagCarrier.isOnline()) { if (flagCarrier.isDead() || !flagCarrier.isOnline()) {
flagCarrier = null; resetFlagCarrier();
particleTrail.clear();
spawnFlag(); spawnFlag();
return; return;
} }
@ -198,7 +205,7 @@ public class Flag implements Runnable {
spawnParticlesOnSquareBorder(winningTeam.getFlagTurnInLocation(), GameConfig.FLAG.TURN_IN_RADIUS); spawnParticlesOnSquareBorder(winningTeam.getFlagTurnInLocation(), GameConfig.FLAG.TURN_IN_RADIUS);
return; return;
} }
notifyAboutCapture(); notifyAboutTurnIn();
spawnFlag(); spawnFlag();
wins.merge(winningTeam.getId(), 1, Integer::sum); wins.merge(winningTeam.getId(), 1, Integer::sum);
winningTeam = null; winningTeam = null;
@ -210,25 +217,18 @@ public class Flag implements Runnable {
teamPlayer.getGameClass().setArmor(flagCarrier, teamPlayer); teamPlayer.getGameClass().setArmor(flagCarrier, teamPlayer);
flagCarrier.getInventory().setItem(EquipmentSlot.HEAD, null); flagCarrier.getInventory().setItem(EquipmentSlot.HEAD, null);
} }
flagCarrier = null; resetFlagCarrier();
particleTrail.clear();
} }
private void notifyAboutCapture() { private void notifyAboutTurnIn() {
Bukkit.broadcast(miniMessage.deserialize("<player> captured the flag for <team>!", Bukkit.broadcast(miniMessage.deserialize("<player> captured the flag for <team>!",
Placeholder.component("player", flagCarrier.displayName()), Placeholder.component("player", flagCarrier.displayName()),
Placeholder.component("team", winningTeam.getName()))); Placeholder.component("team", winningTeam.getName())));
Title capturingTeamTitle = Title.title(miniMessage.deserialize("<green><team> captured the flag!</green>", Title title = Title.title(miniMessage.deserialize("<green><player> captured the flag for team <team>!</green>",
Placeholder.component("team", winningTeam.getName())), Placeholder.component("team", winningTeam.getName())),
miniMessage.deserialize("<green>protect <player> while they bring it to your base.</green>", miniMessage.deserialize("<green>protect <player> while they bring it to your base.</green>",
Placeholder.component("player", flagCarrier.displayName()))); Placeholder.component("player", flagCarrier.displayName())));
Title huntingTeamTitle = Title.title(miniMessage.deserialize("<red><team> captured the flag!</red>", Bukkit.getOnlinePlayers().forEach(player -> player.showTitle(title));
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() {
@ -349,17 +349,25 @@ public class Flag implements Runnable {
return winsByTeam; return winsByTeam;
} }
public void reset() { public void resetFlagCarrier() {
flagCarrier = null;
winningTeam = null;
particleTrail.clear();
}
public void resetFlag() {
bossBar.setVisible(false); bossBar.setVisible(false);
teamFlagPointCount.clear(); teamFlagPointCount.clear();
bossBar.setProgress(0); bossBar.setProgress(0);
winningTeam = null;
flagCarrier = null;
particleTrail.clear();
wins.clear();
lastWinningTeamId = -1; lastWinningTeamId = -1;
} }
public void resetAll() {
resetFlagCarrier();
resetFlag();
wins.clear();
}
public void handleCarrierDeathOrDisconnect(Player player) { public void handleCarrierDeathOrDisconnect(Player player) {
if (flagCarrier == null) { if (flagCarrier == null) {
return; return;
@ -367,8 +375,7 @@ public class Flag implements Runnable {
if (!flagCarrier.getUniqueId().equals(player.getUniqueId())) { if (!flagCarrier.getUniqueId().equals(player.getUniqueId())) {
return; return;
} }
flagCarrier = null; resetFlagCarrier();
particleTrail.clear();
spawnFlag(); spawnFlag();
gameManager.getTeam(player.getUniqueId()) gameManager.getTeam(player.getUniqueId())
.ifPresentOrElse(team -> Bukkit.broadcast(MiniMessage.miniMessage() .ifPresentOrElse(team -> Bukkit.broadcast(MiniMessage.miniMessage()

View File

@ -50,7 +50,7 @@ public class EndedPhase implements GamePhaseExecutor {
maxHealthAttribute.setBaseValue(20); maxHealthAttribute.setBaseValue(20);
player.setHealth(20); player.setHealth(20);
}); });
flag.reset(); flag.resetAll();
}).start(); }).start();
// TODO reset world (coreprotect) to prep for next round // TODO reset world (coreprotect) to prep for next round
} }

View File

@ -1,3 +1,3 @@
#Tue Feb 11 21:46:26 CET 2025 #Tue Feb 11 22:04:16 CET 2025
buildNumber=39 buildNumber=42
version=0.1 version=0.1