Skip to content

Commit bc82147

Browse files
committed
Fix skins not appearing on avatar entities and player heads, update protocol library for further fixes
1 parent 0cdd31e commit bc82147

File tree

9 files changed

+28
-139
lines changed

9 files changed

+28
-139
lines changed

core/src/main/java/org/geysermc/geyser/entity/type/player/MannequinEntity.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,15 @@
2727

2828
import net.kyori.adventure.text.Component;
2929
import org.cloudburstmc.math.vector.Vector3f;
30+
import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket;
3031
import org.geysermc.geyser.entity.EntityDefinition;
3132
import org.geysermc.geyser.session.GeyserSession;
33+
import org.geysermc.geyser.skin.SkinManager;
34+
import org.geysermc.geyser.util.PlayerListUtils;
3235
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata;
3336
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile;
3437

38+
import java.util.List;
3539
import java.util.Optional;
3640
import java.util.UUID;
3741

@@ -42,7 +46,10 @@ public MannequinEntity(GeyserSession session, int entityId, long geyserId, UUID
4246
}
4347

4448
public void setProfile(EntityMetadata<ResolvableProfile, ?> entityMetadata) {
45-
setSkin(entityMetadata.getValue(), true, () -> {});
49+
PlayerListUtils.batchSendPlayerList(session, List.of(SkinManager.buildCachedEntry(session, this)), PlayerListPacket.Action.ADD);
50+
setSkin(entityMetadata.getValue(), true, () -> {
51+
PlayerListUtils.batchSendPlayerList(session, List.of(new PlayerListPacket.Entry(uuid)), PlayerListPacket.Action.REMOVE);
52+
});
4653
}
4754

4855
@Override

core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,20 @@
2828
import lombok.Getter;
2929
import org.cloudburstmc.math.vector.Vector3f;
3030
import org.cloudburstmc.math.vector.Vector3i;
31-
import org.cloudburstmc.protocol.bedrock.data.GameType;
32-
import org.cloudburstmc.protocol.bedrock.data.PlayerPermission;
33-
import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission;
3431
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
3532
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
36-
import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket;
33+
import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket;
3734
import org.geysermc.geyser.entity.EntityDefinitions;
3835
import org.geysermc.geyser.level.block.property.Properties;
3936
import org.geysermc.geyser.level.block.type.BlockState;
4037
import org.geysermc.geyser.level.block.type.WallSkullBlock;
4138
import org.geysermc.geyser.level.physics.Direction;
4239
import org.geysermc.geyser.session.GeyserSession;
4340
import org.geysermc.geyser.session.cache.SkullCache;
44-
import org.geysermc.geyser.skin.SkullSkinManager;
45-
import org.geysermc.geyser.translator.item.ItemTranslator;
41+
import org.geysermc.geyser.skin.SkinManager;
42+
import org.geysermc.geyser.util.PlayerListUtils;
4643

44+
import java.util.List;
4745
import java.util.Objects;
4846
import java.util.UUID;
4947
import java.util.concurrent.TimeUnit;
@@ -84,10 +82,12 @@ public void updateSkull(SkullCache.Skull skull) {
8482
updateBedrockMetadata();
8583

8684
skullUUID = skull.getUuid();
85+
PlayerListUtils.batchSendPlayerList(session, List.of(SkinManager.buildCachedEntry(session, this)), PlayerListPacket.Action.ADD);
8786
setSkin(skull.getTexturesProperty(), false, () -> session.scheduleInEventLoop(() -> {
8887
// Delay to minimize split-second "player" pop-in
8988
setFlag(EntityFlag.INVISIBLE, false);
9089
updateBedrockMetadata();
90+
PlayerListUtils.batchSendPlayerList(session, List.of(new PlayerListPacket.Entry(uuid)), PlayerListPacket.Action.REMOVE);
9191
}, 250, TimeUnit.MILLISECONDS));
9292
} else {
9393
// Just a rotation/position change

core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@
8383
import org.cloudburstmc.protocol.bedrock.packet.SimpleEventPacket;
8484
import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket;
8585
import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket;
86-
import org.cloudburstmc.protocol.bedrock.packet.TextPacket;
8786
import org.cloudburstmc.protocol.common.util.VarInts;
88-
import org.geysermc.geyser.network.codec.CustomTextPacketSerializer;
8987

9088
/**
9189
* Processes the Bedrock codec to remove or modify unused or unsafe packets and fields.
@@ -307,10 +305,6 @@ static BedrockCodec processCodec(BedrockCodec codec) {
307305
.updateSerializer(PlayerInputPacket.class, ILLEGAL_SERIALIZER);
308306
}
309307

310-
if (GameProtocol.is1_21_130orHigher(codec.getProtocolVersion())) {
311-
codecBuilder.updateSerializer(TextPacket.class, CustomTextPacketSerializer.INSTANCE);
312-
}
313-
314308
if (!Boolean.getBoolean("Geyser.ReceiptPackets")) {
315309
codecBuilder.updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER);
316310
codecBuilder.updateSerializer(PurchaseReceiptPacket.class, IGNORED_SERIALIZER);

core/src/main/java/org/geysermc/geyser/network/GameProtocol.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844;
3636
import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859;
3737
import org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860;
38-
import org.cloudburstmc.protocol.bedrock.codec.v897.Bedrock_v897;
38+
import org.cloudburstmc.protocol.bedrock.codec.v898.Bedrock_v898;
3939
import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec;
4040
import org.geysermc.geyser.api.util.MinecraftVersion;
4141
import org.geysermc.geyser.impl.MinecraftVersionImpl;
@@ -92,8 +92,7 @@ public final class GameProtocol {
9292
register(Bedrock_v844.CODEC, "1.21.111", "1.21.112", "1.21.113", "1.21.114");
9393
register(Bedrock_v859.CODEC, "1.21.120", "1.21.121", "1.21.122", "1.21.123");
9494
register(Bedrock_v860.CODEC);
95-
register(Bedrock_v897.CODEC);
96-
register(Bedrock_v897.CODEC.toBuilder().protocolVersion(898).build());
95+
register(Bedrock_v898.CODEC);
9796

9897
MinecraftVersion latestBedrock = SUPPORTED_BEDROCK_VERSIONS.get(SUPPORTED_BEDROCK_VERSIONS.size() - 1);
9998
DEFAULT_BEDROCK_VERSION = latestBedrock.versionString();
@@ -158,7 +157,7 @@ public static boolean is1_21_110orHigher(int protocolVersion) {
158157
}
159158

160159
public static boolean is1_21_130orHigher(int protocolVersion) {
161-
return protocolVersion >= Bedrock_v897.CODEC.getProtocolVersion();
160+
return protocolVersion >= Bedrock_v898.CODEC.getProtocolVersion();
162161
}
163162

164163
/**

core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ PacketSignal defaultHandler(BedrockPacket packet) {
119119

120120
private boolean setCorrectCodec(int protocolVersion) {
121121
BedrockCodec packetCodec = GameProtocol.getBedrockCodec(protocolVersion);
122+
// temp fix allowing 1.21.130 preview to join
123+
if (protocolVersion == 897) {
124+
packetCodec = GameProtocol.getBedrockCodec(898);
125+
}
122126
if (packetCodec == null) {
123127
// None of our Bedrock codecs support this client version, so we can simply compare it to our default protocol.
124128
String supportedVersions = GameProtocol.getAllSupportedBedrockVersions();

core/src/main/java/org/geysermc/geyser/network/codec/CustomTextPacketSerializer.java

Lines changed: 0 additions & 115 deletions
This file was deleted.

core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844;
5151
import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859;
5252
import org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860;
53-
import org.cloudburstmc.protocol.bedrock.codec.v897.Bedrock_v897;
53+
import org.cloudburstmc.protocol.bedrock.codec.v898.Bedrock_v898;
5454
import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData;
5555
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
5656
import org.geysermc.geyser.GeyserImpl;
@@ -133,7 +133,7 @@ private static void registerBedrockBlocks() {
133133
.put(ObjectIntPair.of("1_21_110", Bedrock_v859.CODEC.getProtocolVersion()), tag -> tag)
134134
.put(ObjectIntPair.of("1_21_110", Bedrock_v860.CODEC.getProtocolVersion()), tag -> tag)
135135
// No changes in .130 block palette either!
136-
.put(ObjectIntPair.of("1_21_110", Bedrock_v897.CODEC.getProtocolVersion()), tag -> tag)
136+
.put(ObjectIntPair.of("1_21_110", Bedrock_v898.CODEC.getProtocolVersion()), tag -> tag)
137137
.build();
138138

139139
// We can keep this strong as nothing should be garbage collected

core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844;
5252
import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859;
5353
import org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860;
54-
import org.cloudburstmc.protocol.bedrock.codec.v897.Bedrock_v897;
54+
import org.cloudburstmc.protocol.bedrock.codec.v898.Bedrock_v898;
5555
import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition;
5656
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
5757
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
@@ -203,7 +203,7 @@ public static void populate() {
203203
paletteVersions.add(new PaletteVersion("1_21_110", Bedrock_v844.CODEC.getProtocolVersion()));
204204
paletteVersions.add(new PaletteVersion("1_21_120", Bedrock_v859.CODEC.getProtocolVersion()));
205205
paletteVersions.add(new PaletteVersion("1_21_120", Bedrock_v860.CODEC.getProtocolVersion()));
206-
paletteVersions.add(new PaletteVersion("1_21_130", Bedrock_v897.CODEC.getProtocolVersion()));
206+
paletteVersions.add(new PaletteVersion("1_21_130", Bedrock_v898.CODEC.getProtocolVersion()));
207207

208208
GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap();
209209

gradle/libs.versions.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ guava = "29.0-jre"
1313
gson = "2.3.1" # Provided by Spigot 1.8.8 TODO bump to 2.8.1 or similar (Spigot 1.16.5 version) after Merge
1414
gson-runtime = "2.10.1"
1515
websocket = "1.5.1"
16-
protocol-connection = "3.0.0.Beta11-20251208.164944-9"
17-
protocol-common = "3.0.0.Beta11-20251208.164944-8"
18-
protocol-codec = "3.0.0.Beta11-20251208.164944-9"
16+
protocol-connection = "3.0.0.Beta11-20251209.183710-13"
17+
protocol-common = "3.0.0.Beta11-20251209.183710-12"
18+
protocol-codec = "3.0.0.Beta11-20251209.183710-13"
1919
raknet = "1.0.0.CR3-20251208.214317-23"
2020
minecraftauth = "5.0.0"
2121
mcprotocollib = "1.21.9-20251029.184056-18"

0 commit comments

Comments
 (0)