From 689ca4d535bd84a73d3646e38e01f3546f930d65 Mon Sep 17 00:00:00 2001 From: OurLobanov Date: Mon, 17 Jun 2024 11:20:05 +0300 Subject: [PATCH] EmoteListPacket RAM Overflow I do not know why they saved it if it is not used anywhere If they decide it is necessary, only one UUID is sent when changing emotions, with a limit of 50 I think that is sufficient, and the outdated ones can simply be deleted --- .../geyser/network/CodecProcessor.java | 57 +------------------ .../geyser/session/GeyserSession.java | 26 --------- 2 files changed, 3 insertions(+), 80 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java index e7cf81d47..fed2211ef 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java +++ b/core/src/main/java/org/geysermc/geyser/network/CodecProcessor.java @@ -29,56 +29,14 @@ import io.netty.buffer.ByteBuf; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper; import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobArmorEquipmentSerializer_v291; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.MobEquipmentSerializer_v291; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.PlayerHotbarSerializer_v291; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityLinkSerializer_v291; -import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.SetEntityMotionSerializer_v291; +import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.*; import org.cloudburstmc.protocol.bedrock.codec.v390.serializer.PlayerSkinSerializer_v390; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventoryContentSerializer_v407; import org.cloudburstmc.protocol.bedrock.codec.v407.serializer.InventorySlotSerializer_v407; import org.cloudburstmc.protocol.bedrock.codec.v486.serializer.BossEventSerializer_v486; import org.cloudburstmc.protocol.bedrock.codec.v557.serializer.SetEntityDataSerializer_v557; import org.cloudburstmc.protocol.bedrock.codec.v662.serializer.SetEntityMotionSerializer_v662; -import org.cloudburstmc.protocol.bedrock.packet.AnvilDamagePacket; -import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; -import org.cloudburstmc.protocol.bedrock.packet.BossEventPacket; -import org.cloudburstmc.protocol.bedrock.packet.ClientCacheBlobStatusPacket; -import org.cloudburstmc.protocol.bedrock.packet.ClientCacheStatusPacket; -import org.cloudburstmc.protocol.bedrock.packet.ClientCheatAbilityPacket; -import org.cloudburstmc.protocol.bedrock.packet.ClientToServerHandshakePacket; -import org.cloudburstmc.protocol.bedrock.packet.CodeBuilderSourcePacket; -import org.cloudburstmc.protocol.bedrock.packet.CraftingEventPacket; -import org.cloudburstmc.protocol.bedrock.packet.CreatePhotoPacket; -import org.cloudburstmc.protocol.bedrock.packet.DebugInfoPacket; -import org.cloudburstmc.protocol.bedrock.packet.EditorNetworkPacket; -import org.cloudburstmc.protocol.bedrock.packet.EntityFallPacket; -import org.cloudburstmc.protocol.bedrock.packet.GameTestRequestPacket; -import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; -import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; -import org.cloudburstmc.protocol.bedrock.packet.LabTablePacket; -import org.cloudburstmc.protocol.bedrock.packet.MapCreateLockedCopyPacket; -import org.cloudburstmc.protocol.bedrock.packet.MapInfoRequestPacket; -import org.cloudburstmc.protocol.bedrock.packet.MobArmorEquipmentPacket; -import org.cloudburstmc.protocol.bedrock.packet.MobEquipmentPacket; -import org.cloudburstmc.protocol.bedrock.packet.MultiplayerSettingsPacket; -import org.cloudburstmc.protocol.bedrock.packet.NpcRequestPacket; -import org.cloudburstmc.protocol.bedrock.packet.PhotoInfoRequestPacket; -import org.cloudburstmc.protocol.bedrock.packet.PhotoTransferPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerAuthInputPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerHotbarPacket; -import org.cloudburstmc.protocol.bedrock.packet.PlayerSkinPacket; -import org.cloudburstmc.protocol.bedrock.packet.PurchaseReceiptPacket; -import org.cloudburstmc.protocol.bedrock.packet.RefreshEntitlementsPacket; -import org.cloudburstmc.protocol.bedrock.packet.ScriptMessagePacket; -import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; -import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; -import org.cloudburstmc.protocol.bedrock.packet.SetEntityMotionPacket; -import org.cloudburstmc.protocol.bedrock.packet.SettingsCommandPacket; -import org.cloudburstmc.protocol.bedrock.packet.SimpleEventPacket; -import org.cloudburstmc.protocol.bedrock.packet.SubChunkRequestPacket; -import org.cloudburstmc.protocol.bedrock.packet.SubClientLoginPacket; -import org.cloudburstmc.protocol.bedrock.packet.TickSyncPacket; +import org.cloudburstmc.protocol.bedrock.packet.*; import org.cloudburstmc.protocol.common.util.VarInts; /** @@ -181,15 +139,6 @@ class CodecProcessor { } }; - /** - * Serializer that does nothing when trying to deserialize SetEntityMotionPacket since it is not used from the client for codec v291. - */ - private static final BedrockPacketSerializer SET_ENTITY_MOTION_SERIALIZER_V291 = new SetEntityMotionSerializer_v291() { - @Override - public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, SetEntityMotionPacket packet) { - } - }; - /** * Serializer that does nothing when trying to deserialize SetEntityMotionPacket since it is not used from the client for codec v662. */ @@ -251,6 +200,7 @@ class CodecProcessor { .updateSerializer(SettingsCommandPacket.class, IGNORED_SERIALIZER) .updateSerializer(AnvilDamagePacket.class, IGNORED_SERIALIZER) .updateSerializer(RefreshEntitlementsPacket.class, IGNORED_SERIALIZER) + .updateSerializer(EmoteListPacket.class, IGNORED_SERIALIZER) // Illegal when serverbound due to Geyser specific setup .updateSerializer(InventoryContentPacket.class, INVENTORY_CONTENT_SERIALIZER) .updateSerializer(InventorySlotPacket.class, INVENTORY_SLOT_SERIALIZER) @@ -277,7 +227,6 @@ class CodecProcessor { // Ignored bidirectional packets codecBuilder.updateSerializer(TickSyncPacket.class, IGNORED_SERIALIZER); } - return codecBuilder.build(); } diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index e228fc02f..ea40dc821 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -511,8 +511,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean waitingForStatistics = false; - private final Set emotes; - /** * Whether advanced tooltips will be added to the player's items. */ @@ -600,13 +598,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.spawned = false; this.loggedIn = false; - if (geyser.getConfig().getEmoteOffhandWorkaround() != EmoteOffhandWorkaroundOption.NO_EMOTES) { - this.emotes = new HashSet<>(); - geyser.getSessionManager().getSessions().values().forEach(player -> this.emotes.addAll(player.getEmotes())); - } else { - this.emotes = null; - } - this.remoteServer = geyser.defaultRemoteServer(); } @@ -1866,23 +1857,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.statistics.putAll(statistics); } - public void refreshEmotes(List emotes) { - this.emotes.addAll(emotes); - for (GeyserSession player : geyser.getSessionManager().getSessions().values()) { - List pieces = new ArrayList<>(); - for (UUID piece : emotes) { - if (!player.getEmotes().contains(piece)) { - pieces.add(piece); - } - player.getEmotes().add(piece); - } - EmoteListPacket emoteList = new EmoteListPacket(); - emoteList.setRuntimeEntityId(player.getPlayerEntity().getGeyserId()); - emoteList.getPieceIds().addAll(pieces); - player.sendUpstreamPacket(emoteList); - } - } - public boolean canUseCommandBlocks() { return instabuild && opPermissionLevel >= 2; }