diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java index a9dca185..8761b82e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java @@ -95,7 +95,7 @@ public void registerPackets() { final TrackedEntity trackedEntity = tracker(wrapper.user()).entity(entityId); trackedEntity.put(mannequinData); - sendInitialPlayerInfoUpdate(wrapper.user(), mannequinData, new GameProfile.Property[0]); + sendInitialPlayerInfoUpdate(wrapper.user(), mannequinData, new GameProfile.Property[0], false); mannequinData.setPosition(x, y, z); mannequinData.setRotation(yaw, pitch); @@ -255,7 +255,8 @@ private void storeMovementMannequinData(final PacketWrapper wrapper, final boole } } - private void sendInitialPlayerInfoUpdate(final UserConnection connection, final MannequinData mannequinData, final GameProfile.Property[] properties) { + private void sendInitialPlayerInfoUpdate(final UserConnection connection, final MannequinData mannequinData, + final GameProfile.Property[] properties, final boolean registerTeam) { final PacketWrapper playerInfo = PacketWrapper.create(ClientboundPackets1_21_6.PLAYER_INFO_UPDATE, connection); final BitSet actions = new BitSet(8); @@ -276,7 +277,9 @@ private void sendInitialPlayerInfoUpdate(final UserConnection connection, final playerInfo.write(Types.BOOLEAN, true); // Show hat playerInfo.send(Protocol1_21_9To1_21_7.class); - sendPlayerTeamDisplayName(connection, mannequinData, mannequinData.displayName()); + if (registerTeam) { + sendPlayerTeamDisplayName(connection, mannequinData, mannequinData.displayName()); + } } private void sendPlayerInfoDisplayNameUpdate(final UserConnection connection, final MannequinData mannequinData, @Nullable final Tag displayName) { @@ -294,16 +297,16 @@ private void sendPlayerInfoDisplayNameUpdate(final UserConnection connection, fi private void sendPlayerTeamDisplayName(final UserConnection connection, final MannequinData mannequinData, final Tag displayName) { // Send the display name as a team prefix - final Tag nonNullDisplayName = displayName != null ? displayName : new StringTag("Mannequin"); + boolean hasName = displayName != null && !displayName.asRawString().isEmpty(); final PacketWrapper addTeam = PacketWrapper.create(ClientboundPackets1_21_6.SET_PLAYER_TEAM, connection); addTeam.write(Types.STRING, mannequinData.name()); addTeam.write(Types.BYTE, mannequinData.hasTeam() ? (byte) 2 : 0); // Mode - addTeam.write(Types.TRUSTED_TAG, nonNullDisplayName); // Display Name + addTeam.write(Types.TRUSTED_TAG, hasName ? displayName : new StringTag("Mannequin")); // Display Name addTeam.write(Types.BYTE, (byte) 0); // Flags - addTeam.write(Types.VAR_INT, 0); // Nametag visibility + addTeam.write(Types.VAR_INT, hasName ? 0 : 1); // Nametag visibility addTeam.write(Types.VAR_INT, 0); // Collision rule addTeam.write(Types.VAR_INT, 15); // Color - addTeam.write(Types.TRUSTED_TAG, nonNullDisplayName); // Prefix + addTeam.write(Types.TRUSTED_TAG, hasName ? displayName : new StringTag("")); // Prefix addTeam.write(Types.TRUSTED_TAG, new StringTag("")); // Suffix if (!mannequinData.hasTeam()) { addTeam.write(Types.STRING_ARRAY, new String[]{mannequinData.name()}); @@ -410,7 +413,10 @@ protected void registerRewrites() { playerInfoRemove.send(Protocol1_21_9To1_21_7.class); // Spawn new entity - sendInitialPlayerInfoUpdate(event.user(), mannequinData, profile.profile().properties()); + if (profile.profile().name() != null) { + mannequinData.setName(profile.profile().name()); + } + sendInitialPlayerInfoUpdate(event.user(), mannequinData, profile.profile().properties(), true); final PacketWrapper spawnEntityPacket = PacketWrapper.create(ClientboundPackets1_21_6.ADD_ENTITY, event.user()); spawnEntityPacket.write(Types.VAR_INT, event.entityId()); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java index c1089aba..49f3fc2e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java @@ -30,7 +30,7 @@ public final class MannequinData implements StorableObject { private final UUID uuid; - private final String name; + private String name; private boolean hasTeam; @@ -85,6 +85,10 @@ public void setPassengers(final int[] passengers) { this.passengers = passengers; } + public void setName(String name) { + this.name = name; + } + public double x() { return x; }