diff --git a/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java index beb10db863b..7598287448b 100644 --- a/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java @@ -272,7 +272,12 @@ public void hideElement(GuiElement... elements) { elementSet.add(HUD_ELEMENT_VALUES[element.id()]); } - session.sendUpstreamPacket(packet); + if (session.isSentSpawnPacket()) { + session.sendUpstreamPacket(packet); + } else { + // Ensures hidden GUI elements properly hide when we spawn in the spectator gamemode + session.getUpstream().queuePostStartGamePacket(packet); + } } @Override diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java index 7ccf8fdfbe0..2e6f9be7923 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakGeyserRateLimiter.java @@ -44,7 +44,6 @@ public RakGeyserRateLimiter(Channel channel) { @Override protected int getAddressMaxPacketCount(InetAddress address) { - // The default packet limit is already padded, so we reduce it by 20% - return (int) (super.getAddressMaxPacketCount(address) * sessionManager.getAddressMultiplier(address) * 0.8); + return super.getAddressMaxPacketCount(address) * sessionManager.getAddressMultiplier(address); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index 5bb839a430c..7a33c53d67d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -82,6 +82,7 @@ public void translate(GeyserSession session, ClientboundLoginPacket packet) { session.setDimensionType(newDimension); session.setWorldName(spawnInfo.getWorldName()); session.setLevels(Arrays.stream(packet.getWorldNames()).map(Key::asString).toArray(String[]::new)); + session.setGameMode(spawnInfo.getGameMode()); boolean needsSpawnPacket = !session.isSentSpawnPacket(); if (needsSpawnPacket) { @@ -97,7 +98,6 @@ public void translate(GeyserSession session, ClientboundLoginPacket packet) { session.sendUpstreamPacket(playerGameTypePacket); } - session.setGameMode(spawnInfo.getGameMode()); entity.setLastDeathPosition(spawnInfo.getLastDeathPos()); entity.updateBedrockMetadata();