From 2920cee2f617af4af05f07b10960424a52738c11 Mon Sep 17 00:00:00 2001 From: mworzala Date: Sat, 20 Apr 2024 20:29:53 -0400 Subject: [PATCH] fix: do not send close inventory packet when opening a new inventory while one is open --- .../serializer/nbt/NbtComponentSerializerImpl.java | 7 ++++++- src/main/java/net/minestom/server/entity/Player.java | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializerImpl.java b/src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializerImpl.java index 7e36842e6..610a72cf1 100644 --- a/src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializerImpl.java +++ b/src/main/java/net/minestom/server/adventure/serializer/nbt/NbtComponentSerializerImpl.java @@ -67,7 +67,9 @@ final class NbtComponentSerializerImpl implements NbtComponentSerializer { } else { // Try to infer the type from the fields present. Set keys = compound.keySet(); - if (keys.contains("text")) { + if (keys.isEmpty()) { + return Component.empty(); + } else if (keys.contains("text")) { builder = deserializeTextComponent(compound); } else if (keys.contains("translate")) { builder = deserializeTranslatableComponent(compound); @@ -79,6 +81,9 @@ final class NbtComponentSerializerImpl implements NbtComponentSerializer { builder = deserializeKeybindComponent(compound); } else if (keys.contains("nbt")) { builder = deserializeNbtComponent(compound); + } else if (keys.contains("")) { + //todo This feels like a bug, im not sure why this is created. + builder = Component.text().content(compound.getString("")); } else throw new UnsupportedOperationException("Unable to infer component type"); } diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 43bbafcec..bd4029d6d 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -1767,7 +1767,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, * It closes the player inventory (when opened) if {@link #getOpenInventory()} returns null. */ public void closeInventory() { - closeInventory(false); + closeInventory(true); } @ApiStatus.Internal