From 9899f480b69621b9b2be7b85dd7e3122443a77e8 Mon Sep 17 00:00:00 2001 From: Matt Worzala <35708499+mworzala@users.noreply.github.com> Date: Sat, 5 Aug 2023 10:30:53 -0400 Subject: [PATCH] hollow-cube/display-name-and-team-fixes (#40) * Update Player.java * Remove useless team creation packets * Send display names to new players * Oops * Add display name test * Change to act * Do not send display name if they do not have one --------- Co-authored-by: emortaldev (cherry picked from commit ab35ab05877f34ad988392b4cd22fa2234fa32ce) --- .../minestom/server/entity/LivingEntity.java | 1 - .../net/minestom/server/entity/Player.java | 19 ++++------- .../entity/player/PlayerIntegrationTest.java | 34 +++++++++++++++++++ 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index 2ad606804..fae28391b 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -518,7 +518,6 @@ public class LivingEntity extends Entity implements EquipmentHandler { super.updateNewViewer(player); player.sendPacket(new LazyPacket(this::getEquipmentsPacket)); player.sendPacket(new LazyPacket(this::getPropertiesPacket)); - if (getTeam() != null) player.sendPacket(getTeam().createTeamsCreationPacket()); } @Override diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 816980d31..a13cfd533 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -313,8 +313,14 @@ public class Player extends LivingEntity implements CommandSender, Localizable, this.skin = skinInitEvent.getSkin(); // FIXME: when using Geyser, this line remove the skin of the client PacketUtils.broadcastPacket(getAddPlayerToList()); + for (var player : MinecraftServer.getConnectionManager().getOnlinePlayers()) { - if (player != this) sendPacket(player.getAddPlayerToList()); + if (player != this) { + sendPacket(player.getAddPlayerToList()); + if (player.displayName != null) { + sendPacket(new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, player.infoEntry())); + } + } } //Teams @@ -1479,13 +1485,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable, return heldSlot; } - public void setTeam(Team team) { - super.setTeam(team); - if (team != null) { - PacketUtils.broadcastPacket(team.createTeamsCreationPacket()); - } - } - /** * Changes the tag below the name. * @@ -2037,10 +2036,6 @@ public class Player extends LivingEntity implements CommandSender, Localizable, if (hasPassenger()) { connection.sendPacket(getPassengersPacket()); } - // Team - if (this.getTeam() != null) { - connection.sendPacket(this.getTeam().createTeamsCreationPacket()); - } connection.sendPacket(new EntityHeadLookPacket(getEntityId(), position.yaw())); } diff --git a/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java b/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java index bd9b1ef7c..68c42bc2b 100644 --- a/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java +++ b/src/test/java/net/minestom/server/entity/player/PlayerIntegrationTest.java @@ -1,5 +1,6 @@ package net.minestom.server.entity.player; +import net.kyori.adventure.text.Component; import net.minestom.server.entity.damage.DamageType; import net.minestom.server.message.ChatMessageType; import net.minestom.server.network.packet.client.play.ClientSettingsPacket; @@ -169,4 +170,37 @@ public class PlayerIntegrationTest { assertEquals(dimensionNamespace, player.getDeathLocation().dimension()); assertEquals(5, player.getDeathLocation().position().x()); } + + @Test + public void displayNameTest(Env env) { + var instance = env.createFlatInstance(); + var connection = env.createConnection(); + var tracker = connection.trackIncoming(PlayerInfoUpdatePacket.class); + var player = connection.connect(instance, new Pos(0, 42, 0)).join(); + + player.setDisplayName(Component.text("Display Name!")); + + var connection2 = env.createConnection(); + var tracker2 = connection2.trackIncoming(PlayerInfoUpdatePacket.class); + connection2.connect(instance, new Pos(0, 42, 0)).join(); + + var displayNamePackets = tracker2.collect().stream().filter((packet) -> + packet.actions().stream().anyMatch((act) -> act == PlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME)) + .count(); + assertEquals(1, displayNamePackets); + + var tracker3 = connection2.trackIncoming(PlayerInfoUpdatePacket.class); + + player.setDisplayName(Component.text("Other Name!")); + + var displayNamePackets2 = tracker3.collect().stream().filter((packet) -> + packet.actions().stream().anyMatch((act) -> act == PlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME)) + .count(); + assertEquals(1, displayNamePackets2); + + var displayNamePackets3 = tracker.collect().stream().filter((packet) -> + packet.actions().stream().anyMatch((act) -> act == PlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME)) + .count(); + assertEquals(2, displayNamePackets3); + } }