From 0562425271609ee7620741c3d6ed2c8e67970f81 Mon Sep 17 00:00:00 2001 From: Byteflux Date: Tue, 8 Mar 2016 19:25:44 -0800 Subject: [PATCH] Fix deserialization errors introduced by previous commit. This addresses an issue where items do not retain integer-based item meta such as repair cost, enchantment levels etc. --- .../vaultmanagement/Serialization.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java b/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java index 55101bf..1154a51 100644 --- a/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java +++ b/src/main/java/com/drtshock/playervaults/vaultmanagement/Serialization.java @@ -139,15 +139,17 @@ public class Serialization { } @SuppressWarnings({"unchecked", "rawtypes"}) - public static ConfigurationSerializable deserialize(Map map) { + public static Object deserialize(Map map) { for (Entry entry : map.entrySet()) { - if (entry.getValue() instanceof Map && ((Map) entry.getValue()).containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) { + if (entry.getValue() instanceof Map) { entry.setValue(deserialize((Map) entry.getValue())); } else if (entry.getValue() instanceof Iterable) { entry.setValue(convertIterable((Iterable) entry.getValue())); + } else if (entry.getValue() instanceof Number) { + entry.setValue(convertNumber((Number) entry.getValue())); } } - return ConfigurationSerialization.deserializeObject(map); + return map.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY) ? ConfigurationSerialization.deserializeObject(map) : map; } private static List convertIterable(Iterable iterable) { @@ -157,9 +159,21 @@ public class Serialization { object = deserialize((Map) object); } else if (object instanceof List) { object = convertIterable((Iterable) object); + } else if (object instanceof Number) { + object = convertNumber((Number) object); } newList.add(object); } return newList; } + + private static Number convertNumber(Number number) { + if (number instanceof Long) { + Long longObj = (Long) number; + if (longObj.longValue() == longObj.intValue()) { + return new Integer(longObj.intValue()); + } + } + return number; + } } \ No newline at end of file