Scoreboard updates and fixes
Some checks failed
Build plugin / build (push) Has been cancelled

This commit is contained in:
2vb 2024-07-10 13:27:03 -07:00
parent f54dcbcfdf
commit b393f8fde2
4 changed files with 59 additions and 29 deletions

View File

@ -50,22 +50,30 @@ public class GameCommand {
@Permission("sgm.games.start") @Permission("sgm.games.start")
void start(@Context Player player) { void start(@Context Player player) {
Minigame game = SGM.getInstance().getGameManager().findGame(player); Minigame game = SGM.getInstance().getGameManager().findGame(player);
CustomPlayer cPlayer = new CustomPlayer(player);
if (game == null) { if (game == null) {
CustomPlayer cPlayer = new CustomPlayer(player);
cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found"));
} else { } else {
game.start(player); if (game.getState() == Minigame.GameState.READY) {
game.start(player);
} else {
cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.cant-start"));
}
} }
} }
@Execute(name = "team") @Execute(name = "team")
void teamJoin(@Context Player player) { void teamJoin(@Context Player player) {
Minigame game = SGM.getInstance().getGameManager().findGame(player); Minigame game = SGM.getInstance().getGameManager().findGame(player);
CustomPlayer cPlayer = new CustomPlayer(player);
if (game == null) { if (game == null) {
CustomPlayer cPlayer = new CustomPlayer(player);
cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found"));
} else { } else {
new TeamGui(player).getGui().show(player); if (game.getState() == Minigame.GameState.READY) {
new TeamGui(player).getGui().show(player);
} else {
cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.started"));
}
} }
} }

View File

@ -152,14 +152,39 @@ public class CTB implements Minigame {
} }
private String getBrickCount(ScoreboardTeam team) { private String getBrickCount(ScoreboardTeam team) {
String icon = "\uD83D\uDDC3"; String icon = "\uD83D\uDDC3"; // Full colored icon
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
for (int i = 1; i <= this.bricks; i++) { int score = getScore(team); // Get the score for the specified team
builder.append(icon + " ");
String fullIcon = null;
if (team == redTeam) {
fullIcon = "<red><bold>" + icon;
} else if (team == blueTeam) {
fullIcon = "<blue><bold>" + icon;
} }
return builder.toString();
String grayIcon = "<gray><bold>" + icon;
for (int i = 1; i <= this.bricks; i++) {
if (i <= score) {
builder.append(fullIcon).append(" ");
} else {
builder.append(grayIcon).append(" ");
}
}
return builder.toString().trim(); // trim() removes the trailing space
} }
// private String getBrickCount(ScoreboardTeam team) {
// String icon = "\uD83D\uDDC3";
// StringBuilder builder = new StringBuilder();
// for (int i = 1; i <= this.bricks; i++) {
// builder.append(icon + " ");
// }
// return builder.toString();
// }
@Override @Override
public void onTick() { public void onTick() {
if (players.isEmpty()) { if (players.isEmpty()) {
@ -214,11 +239,11 @@ public class CTB implements Minigame {
public void start(CommandSender sender) { public void start(CommandSender sender) {
if (checkStart(sender)) { if (checkStart(sender)) {
for (Player player : players) { for (Player player : players) {
EntityEquipment playerEquipment = player.getEquipment();
player.getInventory().clear(); player.getInventory().clear();
sb.addPlayer(player); sb.addPlayer(player);
player.setGameMode(GameMode.ADVENTURE); player.setGameMode(GameMode.ADVENTURE);
playerStateMap.put(player, CtbData.PlayerState.Free); playerStateMap.put(player, CtbData.PlayerState.Free);
player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getValue());
for (ScoreboardTeam teams : teamManager.teams()) { for (ScoreboardTeam teams : teamManager.teams()) {
if (teams == redTeam && teams.defaultDisplay().entries().contains(player.getName())) { if (teams == redTeam && teams.defaultDisplay().entries().contains(player.getName())) {
player.teleport(this.redSpawnLocation); player.teleport(this.redSpawnLocation);
@ -235,7 +260,7 @@ public class CTB implements Minigame {
this.taskId = task.getTaskId(); this.taskId = task.getTaskId();
state = GameState.STARTED; state = GameState.STARTED;
sendMessageToAllPlayers("The game has started!"); sendMessageToAllPlayers(SGM.getInstance().getMessages().getString("sgm.game.start"));
} }
} }
@ -402,6 +427,8 @@ public class CTB implements Minigame {
if (!players.contains(player)) return; if (!players.contains(player)) return;
ScoreboardTeam team = getTeam(player); ScoreboardTeam team = getTeam(player);
addScore(team, 1); addScore(team, 1);
EntityEquipment entityEquipment = player.getEquipment();
entityEquipment.setHelmet(new ItemStack(Material.AIR));
} }
void addScore(ScoreboardTeam team, int scoreToAdd) { void addScore(ScoreboardTeam team, int scoreToAdd) {
@ -427,8 +454,6 @@ public class CTB implements Minigame {
if (!players.contains(player)) return; if (!players.contains(player)) return;
if (this.state != GameState.STARTED) return; if (this.state != GameState.STARTED) return;
if (playerStateMap.get(player) != CtbData.PlayerState.Stealing) return; if (playerStateMap.get(player) != CtbData.PlayerState.Stealing) return;
EntityEquipment entityEquipment = player.getEquipment();
entityEquipment.setHelmet(new ItemStack(Material.AIR));
player.sendMessage(event.getMessage()); player.sendMessage(event.getMessage());
} }
@ -517,11 +542,11 @@ public class CTB implements Minigame {
Player tagger = event.getTagger(); Player tagger = event.getTagger();
if (this.state != GameState.STARTED) return; if (this.state != GameState.STARTED) return;
if (!players.contains(tagged) || !players.contains(tagger)) return; if (!players.contains(tagged) || !players.contains(tagger)) return;
taggedPlayerHashMap.putIfAbsent(tagger, tagged); taggedPlayerHashMap.put(tagger, tagged);
CustomPlayer cTagged = new CustomPlayer(tagged); CustomPlayer cTagged = new CustomPlayer(tagged);
CustomPlayer cTagger = new CustomPlayer(tagger); CustomPlayer cTagger = new CustomPlayer(tagger);
cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName())); cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName()).replace("%seconds%", String.valueOf(this.tagTime)));
cTagger.sendMessage(messages.getString("system.player.tag.info").replace("%player%", tagged.getName())); cTagger.sendMessage(messages.getString("system.player.tag.info").replace("%player%", tagged.getName()).replace("%seconds%", String.valueOf(this.tagTime)));
Entity seatEntity = gameWorld.spawnEntity(tagger.getLocation(), EntityType.ARMOR_STAND); Entity seatEntity = gameWorld.spawnEntity(tagger.getLocation(), EntityType.ARMOR_STAND);
ArmorStand armorStandEntity = (ArmorStand) seatEntity; ArmorStand armorStandEntity = (ArmorStand) seatEntity;
armorStandEntity.setInvisible(true); armorStandEntity.setInvisible(true);
@ -694,13 +719,13 @@ public class CTB implements Minigame {
if (team == redTeam) { if (team == redTeam) {
if (interactedEquipment.getHelmet().getType().equals(Material.BLUE_WOOL)) { if (interactedEquipment.getHelmet().getType().equals(Material.BLUE_WOOL)) {
interactedEquipment.setHelmet(new ItemStack(Material.AIR)); interactedEquipment.setHelmet(new ItemStack(Material.AIR));
placeBrick(interacted.getLocation(), blueTeam);
} }
placeBrick(interacted.getLocation(), blueTeam);
} else if (team == blueTeam) { } else if (team == blueTeam) {
if (interactedEquipment.getHelmet().getType().equals(Material.RED_WOOL)) { if (interactedEquipment.getHelmet().getType().equals(Material.RED_WOOL)) {
interactedEquipment.setHelmet(new ItemStack(Material.AIR)); interactedEquipment.setHelmet(new ItemStack(Material.AIR));
placeBrick(interacted.getLocation(), redTeam);
} }
placeBrick(interacted.getLocation(), redTeam);
} }
} }
playerStateMap.replace(interacted, CtbData.PlayerState.Tagged); playerStateMap.replace(interacted, CtbData.PlayerState.Tagged);
@ -718,23 +743,19 @@ public class CTB implements Minigame {
Player brickTaker = event.getPlayer(); Player brickTaker = event.getPlayer();
if (!(rightClicked instanceof ArmorStand)) return; if (!(rightClicked instanceof ArmorStand)) return;
if (!players.contains(brickTaker)) return; if (!players.contains(brickTaker)) return;
EntityEquipment equipment = ((ArmorStand) rightClicked).getEquipment();
Material brickMaterial = null;
if (equipment.getHelmet().getType().equals(Material.RED_WOOL)) {
brickMaterial = Material.RED_WOOL;
} else if (equipment.getHelmet().getType().equals(Material.BLUE_WOOL)) {
brickMaterial = Material.BLUE_WOOL;
}
ScoreboardTeam taggerTeam = getTeam(brickTaker); ScoreboardTeam taggerTeam = getTeam(brickTaker);
event.setCancelled(true); event.setCancelled(true);
CtbData.Territory territory = getTerritory(brickTaker); CtbData.Territory territory = getTerritory(brickTaker);
if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return; if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return;
if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return; if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return;
if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return; if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return;
if (brickMaterial == null) return;
playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing); playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing);
EntityEquipment playerEquipment = event.getPlayer().getEquipment(); EntityEquipment playerEquipment = brickTaker.getEquipment();
playerEquipment.setHelmet(new ItemStack(brickMaterial)); if (taggerTeam == redTeam) {
playerEquipment.setHelmet(new ItemStack(Material.BLUE_WOOL));
} else if (taggerTeam == blueTeam) {
playerEquipment.setHelmet(new ItemStack(Material.RED_WOOL));
}
PlayerStealBrickEvent playerStealBrickEvent = new PlayerStealBrickEvent(brickTaker); PlayerStealBrickEvent playerStealBrickEvent = new PlayerStealBrickEvent(brickTaker);
playerStealBrickEvent.callEvent(); playerStealBrickEvent.callEvent();
rightClicked.remove(); rightClicked.remove();

View File

@ -21,7 +21,7 @@ system:
info: "&7You have tagged %player%! You have %seconds% seconds to take them to Jail! Crouch if you would like to set them free." info: "&7You have tagged %player%! You have %seconds% seconds to take them to Jail! Crouch if you would like to set them free."
released: released:
notify: "&7You have released %player%" notify: "&7You have released %player%"
info: "&7%player% let you free! You must head back to Neutral before you can do anything." info: "&7%player% let you free!"
full: "&7You have returned to Neutral. You can now get back to the game!" full: "&7You have returned to Neutral. You can now get back to the game!"
brick: brick:
steal: steal:

View File

@ -14,8 +14,9 @@ sgm:
new: "&7A new %game% has started and can now be joined!" new: "&7A new %game% has started and can now be joined!"
not-found: "&7Game couldn't be found!" not-found: "&7Game couldn't be found!"
cant-start: "&7Game couldn't be started!" cant-start: "&7Game couldn't be started!"
started: "&7Game has already started!"
cant-join: "&7Could not join this game!" cant-join: "&7Could not join this game!"
started: "&7Game has started!" start: "&7Game has started!"
win: "&7Congratulations to %winner% for winning!" win: "&7Congratulations to %winner% for winning!"
level: level:
new: "&7A level with the name %level% has been created." new: "&7A level with the name %level% has been created."