From a0fd720e7c00a542933b9e8544c5fb3e8f3d7cb8 Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 11 Mar 2024 00:03:37 -0700 Subject: [PATCH] Fix client crash issue if empty recipe is sent (#4485) * Fix client crash issue if empty recipe is sent Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * More efficent order Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * Recipes are recipies Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --------- Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/JavaClientboundRecipesTranslator.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java index fbf4c6f7b..3fe5abff8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.protocol.java; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundRecipePacket; import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -47,12 +46,22 @@ public class JavaClientboundRecipesTranslator extends PacketTranslator { + List recipes = getBedrockRecipes(session, packet.getRecipes()); + if (recipes.isEmpty()) { + // Sending an empty list here packet will crash the client as of 1.20.60 + return; + } recipesPacket.setAction(UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); - recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getRecipes())); + recipesPacket.getUnlockedRecipes().addAll(recipes); } case REMOVE -> { + List recipes = getBedrockRecipes(session, packet.getRecipes()); + if (recipes.isEmpty()) { + // Sending an empty list here will crash the client as of 1.20.60 + return; + } recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); - recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getRecipes())); + recipesPacket.getUnlockedRecipes().addAll(recipes); } } session.sendUpstreamPacket(recipesPacket); @@ -70,5 +79,4 @@ public class JavaClientboundRecipesTranslator extends PacketTranslator