From 56a6cfc2fb3db91c37a6505fcbaa342458f8a5b7 Mon Sep 17 00:00:00 2001 From: KrystilizeNevaDies Date: Tue, 29 Aug 2023 10:01:30 +1000 Subject: [PATCH] Allow serialisation of empty nbt components --- src/main/java/net/minestom/server/tag/Serializers.java | 4 +++- src/main/java/net/minestom/server/tag/TagHandlerImpl.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/tag/Serializers.java b/src/main/java/net/minestom/server/tag/Serializers.java index 3a13bd436..40258e9ce 100644 --- a/src/main/java/net/minestom/server/tag/Serializers.java +++ b/src/main/java/net/minestom/server/tag/Serializers.java @@ -12,6 +12,8 @@ import java.util.function.Function; * Basic serializers for {@link Tag tags}. */ final class Serializers { + static final boolean SERIALIZE_EMPTY_COMPOUND = System.getProperty("minestom.serialization.serialize-nbt-compound", "false").equalsIgnoreCase("true"); + static final Entry BYTE = new Entry<>(NBTType.TAG_Byte, NBTByte::getValue, NBT::Byte); static final Entry BOOLEAN = new Entry<>(NBTType.TAG_Byte, NBTByte::asBoolean, NBT::Boolean); static final Entry SHORT = new Entry<>(NBTType.TAG_Short, NBTShort::getValue, NBT::Short); @@ -31,7 +33,7 @@ final class Serializers { static Entry fromTagSerializer(TagSerializer serializer) { return new Serializers.Entry<>(NBTType.TAG_Compound, (NBTCompound compound) -> { - if (compound.isEmpty()) return null; + if ((!SERIALIZE_EMPTY_COMPOUND) && compound.isEmpty()) return null; return serializer.read(TagHandler.fromCompound(compound)); }, (value) -> { diff --git a/src/main/java/net/minestom/server/tag/TagHandlerImpl.java b/src/main/java/net/minestom/server/tag/TagHandlerImpl.java index dc80a01f9..67ec75db6 100644 --- a/src/main/java/net/minestom/server/tag/TagHandlerImpl.java +++ b/src/main/java/net/minestom/server/tag/TagHandlerImpl.java @@ -281,7 +281,7 @@ final class TagHandlerImpl implements TagHandler { this.entries.forValues(entry -> { final Tag tag = entry.tag; final NBT nbt = entry.updatedNbt(); - if (!tag.entry.isPath() || !((NBTCompound) nbt).isEmpty()) { + if (!tag.entry.isPath() || (!Serializers.SERIALIZE_EMPTY_COMPOUND) && !((NBTCompound) nbt).isEmpty()) { tmp.put(tag.getKey(), nbt); } }); @@ -313,7 +313,7 @@ final class TagHandlerImpl implements TagHandler { tmp.put(tag.getKey(), nbt); entries.put(tag.index, valueToEntry(result, tag, value)); }); - if (tmp.isEmpty() && parent != null) + if ((!Serializers.SERIALIZE_EMPTY_COMPOUND) && tmp.isEmpty() && parent != null) return null; // Empty child node result.compound = tmp.toCompound(); return result;