From d4e33aa9d2f25bbd4abb8a90786b38a5bc19f5d9 Mon Sep 17 00:00:00 2001 From: William Date: Sat, 22 Jun 2024 18:06:17 +0100 Subject: [PATCH] fix: ensure data version is passed to deserialize methods Fixes an issue where upgraded stacks would only have a size of 1 --- .../husksync/data/DataSnapshot.java | 2 +- .../husksync/data/SerializerRegistry.java | 30 +++++++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/net/william278/husksync/data/DataSnapshot.java b/common/src/main/java/net/william278/husksync/data/DataSnapshot.java index 13b9bbbd..9e707734 100644 --- a/common/src/main/java/net/william278/husksync/data/DataSnapshot.java +++ b/common/src/main/java/net/william278/husksync/data/DataSnapshot.java @@ -395,7 +395,7 @@ public class DataSnapshot { .map(entry -> Map.entry(plugin.getIdentifier(entry.getKey()).orElseThrow(), entry.getValue())) .collect(Collectors.toMap( Map.Entry::getKey, - entry -> plugin.deserializeData(entry.getKey(), entry.getValue()), + entry -> plugin.deserializeData(entry.getKey(), entry.getValue(), getMinecraftVersion()), (a, b) -> b, () -> Maps.newTreeMap(SerializerRegistry.DEPENDENCY_ORDER_COMPARATOR) )); } diff --git a/common/src/main/java/net/william278/husksync/data/SerializerRegistry.java b/common/src/main/java/net/william278/husksync/data/SerializerRegistry.java index 4ce4a812..32e46a21 100644 --- a/common/src/main/java/net/william278/husksync/data/SerializerRegistry.java +++ b/common/src/main/java/net/william278/husksync/data/SerializerRegistry.java @@ -19,6 +19,7 @@ package net.william278.husksync.data; +import net.william278.desertwell.util.Version; import net.william278.husksync.HuskSync; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -119,19 +120,36 @@ public interface SerializerRegistry { } /** - * Deserialize data for the given {@link Identifier} + * Deserialize data of a given {@link Version Minecraft version} for the given {@link Identifier data identifier} + * + * @param identifier the {@link Identifier} to deserialize data for + * @param data the data to deserialize + * @param dataMcVersion the Minecraft version of the data + * @return the deserialized data + * @throws IllegalStateException if no serializer is found for the given {@link Identifier} + * @since 3.6.4 + */ + @NotNull + default Data deserializeData(@NotNull Identifier identifier, @NotNull String data, + @NotNull Version dataMcVersion) throws IllegalStateException { + return getSerializer(identifier).map(serializer -> serializer.deserialize(data, dataMcVersion)).orElseThrow( + () -> new IllegalStateException("No serializer found for %s".formatted(identifier)) + ); + } + + /** + * Deserialize data for the given {@link Identifier data identifier} * * @param identifier the {@link Identifier} to deserialize data for * @param data the data to deserialize * @return the deserialized data - * @throws IllegalStateException if no serializer is found for the given {@link Identifier} * @since 3.5.4 + * @deprecated Use {@link #deserializeData(Identifier, String, Version)} instead */ @NotNull - default Data deserializeData(@NotNull Identifier identifier, @NotNull String data) throws IllegalStateException { - return getSerializer(identifier).map(serializer -> serializer.deserialize(data)).orElseThrow( - () -> new IllegalStateException("No serializer found for %s".formatted(identifier)) - ); + @Deprecated(since = "3.6.5") + default Data deserializeData(@NotNull Identifier identifier, @NotNull String data) { + return deserializeData(identifier, data, getPlugin().getMinecraftVersion()); } /**