From b4ac2c85e4e87bd493d0d9e0380f40546e06642e Mon Sep 17 00:00:00 2001 From: altrisi Date: Sun, 29 Nov 2020 02:51:01 +0100 Subject: [PATCH] Reimplement extension sync according to suggestions --- .../carpet/network/ClientNetworkHandler.java | 38 ++++++++++--------- .../carpet/network/ServerNetworkHandler.java | 8 +++- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/carpet/network/ClientNetworkHandler.java b/src/main/java/carpet/network/ClientNetworkHandler.java index fe8f1532..478d7a68 100644 --- a/src/main/java/carpet/network/ClientNetworkHandler.java +++ b/src/main/java/carpet/network/ClientNetworkHandler.java @@ -26,35 +26,39 @@ public class ClientNetworkHandler { dataHandlers.put("Rules", (p, t) -> { CompoundTag ruleset = (CompoundTag)t; - for (String fullRuleName: ruleset.getKeys()) + for (String ruleKey: ruleset.getKeys()) { - int separatorPos = fullRuleName.indexOf(':'); + CompoundTag ruleNBT = (CompoundTag) ruleset.get(ruleKey); SettingsManager manager = null; String ruleName; - if (separatorPos > -1) + if (ruleNBT.contains("Manager")) { - String identifier = fullRuleName.substring(0, separatorPos); - ruleName = fullRuleName.substring(separatorPos + 1); - for (CarpetExtension extension: CarpetServer.extensions) { - SettingsManager eManager = extension.customSettingsManager(); - if (eManager != null && identifier.equals(eManager.getIdentifier())) - { - manager = eManager; - break; + ruleName = ruleNBT.getString("Rule"); + String managerName = ruleNBT.getString("Manager"); + if (managerName == "carpet") + { + manager = CarpetServer.settingsManager; + } + else + { + for (CarpetExtension extension: CarpetServer.extensions) { + SettingsManager eManager = extension.customSettingsManager(); + if (eManager != null && managerName.equals(eManager.getIdentifier())) + { + manager = eManager; + break; + } } } } - else + else // Backwards compatibility { - ruleName = fullRuleName; manager = CarpetServer.settingsManager; + ruleName = ruleKey; } ParsedRule rule = (manager != null) ? manager.getRule(ruleName) : null; - if (rule == null) - CarpetSettings.LOG.error("Received unknown rule: " + fullRuleName); - else + if (rule != null) { - CompoundTag ruleNBT = (CompoundTag) ruleset.get(fullRuleName); String value = ruleNBT.getString("Value"); rule.set(null, value); } diff --git a/src/main/java/carpet/network/ServerNetworkHandler.java b/src/main/java/carpet/network/ServerNetworkHandler.java index 140e6dfd..5971e93d 100644 --- a/src/main/java/carpet/network/ServerNetworkHandler.java +++ b/src/main/java/carpet/network/ServerNetworkHandler.java @@ -241,10 +241,14 @@ public class ServerNetworkHandler rules = new CompoundTag(); tag.put("Rules", rules); } - String identifier = (rule.settingsManager != CarpetServer.settingsManager) ? rule.settingsManager.getIdentifier()+":" : ""; + String identifier = rule.settingsManager.getIdentifier(); + String key = rule.name; + while (rules.contains(key)) { key = key+"2";} CompoundTag ruleNBT = new CompoundTag(); ruleNBT.putString("Value", rule.getAsString()); - rules.put(identifier+rule.name, ruleNBT); + ruleNBT.putString("Manager",identifier); + ruleNBT.putString("Rule",rule.name); + rules.put(key, ruleNBT); return this; }