|
|
|
@ -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()
|
|
|
|
|