diff --git a/paper-api/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java b/paper-api/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java index 177944d4e..9ebd44949 100644 --- a/paper-api/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java +++ b/paper-api/src/main/java/org/bukkit/configuration/serialization/ConfigurationSerializable.java @@ -1,6 +1,7 @@ package org.bukkit.configuration.serialization; import java.util.Map; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; /** @@ -30,8 +31,12 @@ public interface ConfigurationSerializable { * This class must provide a method to restore this class, as defined in * the {@link ConfigurationSerializable} interface javadocs. * + * nb: It is not intended for this method to be called directly, this will + * be called by the {@link ConfigurationSerialization} class. + * * @return Map containing the current state of this class */ @NotNull + @ApiStatus.OverrideOnly public Map serialize(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 060f0c5f1..f78cfd9c0 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -60,6 +60,7 @@ import org.bukkit.advancement.Advancement; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.block.data.BlockData; +import org.bukkit.configuration.MemorySection; import org.bukkit.craftbukkit.CraftRegistry; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; @@ -565,7 +566,17 @@ public final class CraftMagicNumbers implements UnsafeValues { } case "components" -> { if (version == 1) { - final Map componentMap = (Map) value; + Map componentMap; + if (value instanceof Map) { + componentMap = (Map) value; + } else if (value instanceof MemorySection memory) { + componentMap = new HashMap<>(); + for (final String memoryKey : memory.getKeys(false)) { + componentMap.put(memoryKey, memory.getString(memoryKey)); + } + } else { + throw new IllegalArgumentException("components must be a Map"); + } final CompoundTag componentsTag = new CompoundTag(); componentMap.forEach((componentKey, componentString) -> { final Tag componentTag;