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 <me@emortal.dev>
(cherry picked from commit ab35ab0587)
This commit is contained in:
Matt Worzala 2023-08-05 10:30:53 -04:00
parent 802f72aa0d
commit 9899f480b6
3 changed files with 41 additions and 13 deletions

View File

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

View File

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

View File

@ -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);
}
}