From b393f8fde21d683f20f4b205029a6492afd7ff44 Mon Sep 17 00:00:00 2001 From: 2vb <2vb@protonmail.com> Date: Wed, 10 Jul 2024 13:27:03 -0700 Subject: [PATCH] Scoreboard updates and fixes --- .../twovb/sgm/commands/impl/GameCommand.java | 16 +++-- .../sgm/games/impl/capturethebrick/CTB.java | 67 ++++++++++++------- .../games/capturethebrick/messages.yml | 2 +- src/main/resources/messages.yml | 3 +- 4 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java index 3394915..58e475d 100644 --- a/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java +++ b/src/main/java/xyz/twovb/sgm/commands/impl/GameCommand.java @@ -50,22 +50,30 @@ public class GameCommand { @Permission("sgm.games.start") void start(@Context Player player) { Minigame game = SGM.getInstance().getGameManager().findGame(player); + CustomPlayer cPlayer = new CustomPlayer(player); if (game == null) { - CustomPlayer cPlayer = new CustomPlayer(player); cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); } 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") void teamJoin(@Context Player player) { Minigame game = SGM.getInstance().getGameManager().findGame(player); + CustomPlayer cPlayer = new CustomPlayer(player); if (game == null) { - CustomPlayer cPlayer = new CustomPlayer(player); cPlayer.sendMessage(SGM.getInstance().getMessages().getString("sgm.game.not-found")); } 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")); + } } } diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java index c61b659..0c61a5f 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -152,14 +152,39 @@ public class CTB implements Minigame { } private String getBrickCount(ScoreboardTeam team) { - String icon = "\uD83D\uDDC3"; + String icon = "\uD83D\uDDC3"; // Full colored icon StringBuilder builder = new StringBuilder(); - for (int i = 1; i <= this.bricks; i++) { - builder.append(icon + " "); + int score = getScore(team); // Get the score for the specified team + + String fullIcon = null; + if (team == redTeam) { + fullIcon = "" + icon; + } else if (team == blueTeam) { + fullIcon = "" + icon; } - return builder.toString(); + + String grayIcon = "" + 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 public void onTick() { if (players.isEmpty()) { @@ -214,11 +239,11 @@ public class CTB implements Minigame { public void start(CommandSender sender) { if (checkStart(sender)) { for (Player player : players) { - EntityEquipment playerEquipment = player.getEquipment(); player.getInventory().clear(); sb.addPlayer(player); player.setGameMode(GameMode.ADVENTURE); playerStateMap.put(player, CtbData.PlayerState.Free); + player.setHealth(Objects.requireNonNull(player.getAttribute(Attribute.GENERIC_MAX_HEALTH)).getValue()); for (ScoreboardTeam teams : teamManager.teams()) { if (teams == redTeam && teams.defaultDisplay().entries().contains(player.getName())) { player.teleport(this.redSpawnLocation); @@ -235,7 +260,7 @@ public class CTB implements Minigame { this.taskId = task.getTaskId(); 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; ScoreboardTeam team = getTeam(player); addScore(team, 1); + EntityEquipment entityEquipment = player.getEquipment(); + entityEquipment.setHelmet(new ItemStack(Material.AIR)); } void addScore(ScoreboardTeam team, int scoreToAdd) { @@ -427,8 +454,6 @@ public class CTB implements Minigame { if (!players.contains(player)) return; if (this.state != GameState.STARTED) return; if (playerStateMap.get(player) != CtbData.PlayerState.Stealing) return; - EntityEquipment entityEquipment = player.getEquipment(); - entityEquipment.setHelmet(new ItemStack(Material.AIR)); player.sendMessage(event.getMessage()); } @@ -517,11 +542,11 @@ public class CTB implements Minigame { Player tagger = event.getTagger(); if (this.state != GameState.STARTED) return; if (!players.contains(tagged) || !players.contains(tagger)) return; - taggedPlayerHashMap.putIfAbsent(tagger, tagged); + taggedPlayerHashMap.put(tagger, tagged); CustomPlayer cTagged = new CustomPlayer(tagged); CustomPlayer cTagger = new CustomPlayer(tagger); - cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName())); - cTagger.sendMessage(messages.getString("system.player.tag.info").replace("%player%", tagged.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()).replace("%seconds%", String.valueOf(this.tagTime))); Entity seatEntity = gameWorld.spawnEntity(tagger.getLocation(), EntityType.ARMOR_STAND); ArmorStand armorStandEntity = (ArmorStand) seatEntity; armorStandEntity.setInvisible(true); @@ -694,13 +719,13 @@ public class CTB implements Minigame { if (team == redTeam) { if (interactedEquipment.getHelmet().getType().equals(Material.BLUE_WOOL)) { interactedEquipment.setHelmet(new ItemStack(Material.AIR)); - placeBrick(interacted.getLocation(), blueTeam); } + placeBrick(interacted.getLocation(), blueTeam); } else if (team == blueTeam) { if (interactedEquipment.getHelmet().getType().equals(Material.RED_WOOL)) { interactedEquipment.setHelmet(new ItemStack(Material.AIR)); - placeBrick(interacted.getLocation(), redTeam); } + placeBrick(interacted.getLocation(), redTeam); } } playerStateMap.replace(interacted, CtbData.PlayerState.Tagged); @@ -718,23 +743,19 @@ public class CTB implements Minigame { Player brickTaker = event.getPlayer(); if (!(rightClicked instanceof ArmorStand)) 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); event.setCancelled(true); CtbData.Territory territory = getTerritory(brickTaker); if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return; if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return; if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return; - if (brickMaterial == null) return; playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing); - EntityEquipment playerEquipment = event.getPlayer().getEquipment(); - playerEquipment.setHelmet(new ItemStack(brickMaterial)); + EntityEquipment playerEquipment = brickTaker.getEquipment(); + 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.callEvent(); rightClicked.remove(); diff --git a/src/main/resources/games/capturethebrick/messages.yml b/src/main/resources/games/capturethebrick/messages.yml index 76bb4c7..6bcde69 100644 --- a/src/main/resources/games/capturethebrick/messages.yml +++ b/src/main/resources/games/capturethebrick/messages.yml @@ -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." released: 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!" brick: steal: diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index e4375e9..19ec970 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -14,8 +14,9 @@ sgm: new: "&7A new %game% has started and can now be joined!" not-found: "&7Game couldn't be found!" cant-start: "&7Game couldn't be started!" + started: "&7Game has already started!" cant-join: "&7Could not join this game!" - started: "&7Game has started!" + start: "&7Game has started!" win: "&7Congratulations to %winner% for winning!" level: new: "&7A level with the name %level% has been created."