Reimplement extension sync according to suggestions

This commit is contained in:
altrisi committed 2020-11-29 02:51:01 +01:00
1 parent 39bfb51992
commit b4ac2c85e4
2 files changed
+27 -19

No files matched your search

@@ -26,35 +26,39 @@ public class ClientNetworkHandler
{ {
dataHandlers.put("Rules", (p, t) -> { dataHandlers.put("Rules", (p, t) -> {
CompoundTag ruleset = (CompoundTag)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; SettingsManager manager = null;
String ruleName; String ruleName;
if (separatorPos > -1) if (ruleNBT.contains("Manager"))
{ {
String identifier = fullRuleName.substring(0, separatorPos); ruleName = ruleNBT.getString("Rule");
ruleName = fullRuleName.substring(separatorPos + 1); String managerName = ruleNBT.getString("Manager");
for (CarpetExtension extension: CarpetServer.extensions) { if (managerName == "carpet")
SettingsManager eManager = extension.customSettingsManager(); {
if (eManager != null && identifier.equals(eManager.getIdentifier())) manager = CarpetServer.settingsManager;
{ }
manager = eManager; else
break; {
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; manager = CarpetServer.settingsManager;
ruleName = ruleKey;
} }
ParsedRule<?> rule = (manager != null) ? manager.getRule(ruleName) : null; ParsedRule<?> rule = (manager != null) ? manager.getRule(ruleName) : null;
if (rule == null) if (rule != null)
CarpetSettings.LOG.error("Received unknown rule: " + fullRuleName);
else
{ {
CompoundTag ruleNBT = (CompoundTag) ruleset.get(fullRuleName);
String value = ruleNBT.getString("Value"); String value = ruleNBT.getString("Value");
rule.set(null, value); rule.set(null, value);
} }
@@ -241,10 +241,14 @@ public class ServerNetworkHandler
rules = new CompoundTag(); rules = new CompoundTag();
tag.put("Rules", rules); 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(); CompoundTag ruleNBT = new CompoundTag();
ruleNBT.putString("Value", rule.getAsString()); 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; return this;
} }