From 80f5808d56d26f3f7a6e7c92c25efa4f88def9b0 Mon Sep 17 00:00:00 2001 From: okx-code Date: Tue, 2 Nov 2021 21:44:02 +0000 Subject: [PATCH] Fix deserialization problems --- build.gradle | 2 +- .../java/sh/okx/rankup/ranksgui/RanksGui.java | 19 ++++++++++++++++--- .../serialization/ShadowDeserializer.java | 10 ++++++---- .../serialization/YamlDeserializer.java | 4 +++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 88e2e13..dc3751a 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'sh.okx' -version '3.13' +version '3.13.1' java { sourceCompatibility = JavaVersion.VERSION_1_8 diff --git a/src/main/java/sh/okx/rankup/ranksgui/RanksGui.java b/src/main/java/sh/okx/rankup/ranksgui/RanksGui.java index 1a94fe4..4e94a62 100644 --- a/src/main/java/sh/okx/rankup/ranksgui/RanksGui.java +++ b/src/main/java/sh/okx/rankup/ranksgui/RanksGui.java @@ -35,9 +35,9 @@ public class RanksGui { ConfigurationSection basePath = plugin.getMessages().getConfigurationSection("rankup.ranksgui"); String title = get(ConfigurationSection::getString, "title", playerPath, basePath, "Ranks"); - int rows = get(ConfigurationSection::getInt, "rows", playerPath, basePath, 3); - int offset = get(ConfigurationSection::getInt, "offset", playerPath, basePath, 10); - int width = get(ConfigurationSection::getInt, "width", playerPath, basePath, 7); + int rows = get(this::getInt, "rows", playerPath, basePath, 3); + int offset = get(this::getInt, "offset", playerPath, basePath, 10); + int width = get(this::getInt, "width", playerPath, basePath, 7); inventory = Bukkit.createInventory(null, rows * 9, Colour.translate(title)); @@ -87,6 +87,19 @@ public class RanksGui { player.openInventory(inventory); } + private Integer getInt(ConfigurationSection section, String key) { + String string = section.getString(key); + if (string == null) { + return null; + } else { + try { + return Integer.parseInt(string); + } catch (IllegalArgumentException ex) { + return null; + } + } + } + private T get(BiFunction fun, String path, ConfigurationSection primary, ConfigurationSection secondary, T def) { T get = null; if (primary != null) { diff --git a/src/main/java/sh/okx/rankup/serialization/ShadowDeserializer.java b/src/main/java/sh/okx/rankup/serialization/ShadowDeserializer.java index b75bcbb..2936367 100644 --- a/src/main/java/sh/okx/rankup/serialization/ShadowDeserializer.java +++ b/src/main/java/sh/okx/rankup/serialization/ShadowDeserializer.java @@ -57,10 +57,12 @@ public class ShadowDeserializer { private static void updateMap(Map map, UnmodifiableConfig config, String prefix) { for (Entry message : config.entrySet()) { Object value = message.getValue(); - if (value instanceof String) { - map.put(prefix + message.getKey(), (String) value); - } else if (value instanceof UnmodifiableConfig) { - updateMap(map, (UnmodifiableConfig) value, prefix + message.getKey() + "."); + if (value != null) { + if (value instanceof UnmodifiableConfig) { + updateMap(map, (UnmodifiableConfig) value, prefix + message.getKey() + "."); + } else { + map.put(prefix + message.getKey(), String.valueOf(value)); + } } } } diff --git a/src/main/java/sh/okx/rankup/serialization/YamlDeserializer.java b/src/main/java/sh/okx/rankup/serialization/YamlDeserializer.java index 202e3e8..df117a4 100644 --- a/src/main/java/sh/okx/rankup/serialization/YamlDeserializer.java +++ b/src/main/java/sh/okx/rankup/serialization/YamlDeserializer.java @@ -43,7 +43,9 @@ public class YamlDeserializer { Set rankup = rankupSection.getKeys(true); messages = new HashMap<>(rankup.size()); for (String key : rankup) { - messages.put(MemorySection.createPath(rankupSection, key, section), rankupSection.getString(key)); + if (!rankupSection.isConfigurationSection(key)) { + messages.put(MemorySection.createPath(rankupSection, key, section), rankupSection.getString(key)); + } } } else { messages = Collections.emptyMap();