|
10 | 10 | import net.minestom.server.coordinate.Pos; |
11 | 11 | import net.minestom.server.entity.GameMode; |
12 | 12 | import net.minestom.server.instance.InstanceContainer; |
| 13 | +import net.minestom.server.network.packet.server.play.TeamsPacket; |
13 | 14 | import net.minestom.server.tag.Tag; |
14 | 15 | import net.minestom.server.timer.TaskSchedule; |
15 | 16 | import net.swofty.commons.ServerType; |
@@ -150,6 +151,7 @@ public void rejoin(MurderMysteryPlayer player) { |
150 | 151 | GameRole role = roleManager.getRole(player.getUuid()); |
151 | 152 | if (role != null) { |
152 | 153 | setupPlayerForGame(player, role); |
| 154 | + addPlayerToHiddenNametagsTeam(player); |
153 | 155 | player.setInstance(instanceContainer, getWaitingPosition()); |
154 | 156 | player.sendMessage(Component.text("You have rejoined the game!", NamedTextColor.GREEN)); |
155 | 157 | } else { |
@@ -182,6 +184,7 @@ public void startGame() { |
182 | 184 | murdererReceivedSword = false; |
183 | 185 |
|
184 | 186 | roleManager.assignRoles(); |
| 187 | + setupHiddenNametags(); |
185 | 188 |
|
186 | 189 | for (MurderMysteryPlayer player : players) { |
187 | 190 | GameRole role = roleManager.getRole(player.getUuid()); |
@@ -389,6 +392,66 @@ private void setupPlayerForSpectator(MurderMysteryPlayer player) { |
389 | 392 | player.setFlying(true); |
390 | 393 | } |
391 | 394 |
|
| 395 | + private void setupHiddenNametags() { |
| 396 | + // Create a team with hidden nametags for all players |
| 397 | + List<String> playerNames = players.stream() |
| 398 | + .map(MurderMysteryPlayer::getUsername) |
| 399 | + .toList(); |
| 400 | + |
| 401 | + TeamsPacket createTeamPacket = new TeamsPacket( |
| 402 | + "mm_hidden", |
| 403 | + new TeamsPacket.CreateTeamAction( |
| 404 | + Component.empty(), |
| 405 | + (byte) 0x00, |
| 406 | + TeamsPacket.NameTagVisibility.NEVER, |
| 407 | + TeamsPacket.CollisionRule.ALWAYS, |
| 408 | + NamedTextColor.WHITE, |
| 409 | + Component.empty(), |
| 410 | + Component.empty(), |
| 411 | + playerNames |
| 412 | + ) |
| 413 | + ); |
| 414 | + |
| 415 | + // Send to all players |
| 416 | + for (MurderMysteryPlayer player : players) { |
| 417 | + player.sendPacket(createTeamPacket); |
| 418 | + } |
| 419 | + } |
| 420 | + |
| 421 | + private void addPlayerToHiddenNametagsTeam(MurderMysteryPlayer newPlayer) { |
| 422 | + // Send existing team info to the new player |
| 423 | + List<String> allPlayerNames = players.stream() |
| 424 | + .map(MurderMysteryPlayer::getUsername) |
| 425 | + .toList(); |
| 426 | + |
| 427 | + TeamsPacket createTeamPacket = new TeamsPacket( |
| 428 | + "mm_hidden", |
| 429 | + new TeamsPacket.CreateTeamAction( |
| 430 | + Component.empty(), |
| 431 | + (byte) 0x00, |
| 432 | + TeamsPacket.NameTagVisibility.NEVER, |
| 433 | + TeamsPacket.CollisionRule.ALWAYS, |
| 434 | + NamedTextColor.WHITE, |
| 435 | + Component.empty(), |
| 436 | + Component.empty(), |
| 437 | + allPlayerNames |
| 438 | + ) |
| 439 | + ); |
| 440 | + newPlayer.sendPacket(createTeamPacket); |
| 441 | + |
| 442 | + // Tell existing players to add the new player to the team |
| 443 | + TeamsPacket addPlayerPacket = new TeamsPacket( |
| 444 | + "mm_hidden", |
| 445 | + new TeamsPacket.AddEntitiesToTeamAction(List.of(newPlayer.getUsername())) |
| 446 | + ); |
| 447 | + |
| 448 | + for (MurderMysteryPlayer player : players) { |
| 449 | + if (!player.equals(newPlayer)) { |
| 450 | + player.sendPacket(addPlayerPacket); |
| 451 | + } |
| 452 | + } |
| 453 | + } |
| 454 | + |
392 | 455 | private Pos getRandomSpawnPosition() { |
393 | 456 | var config = mapEntry.getConfiguration(); |
394 | 457 | if (config != null && config.getPlayerSpawns() != null && !config.getPlayerSpawns().isEmpty()) { |
|
0 commit comments