From 61accce977ee37e7512182fdaecb0b94f78dfce4 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Fri, 20 Mar 2026 20:28:24 +0100 Subject: [PATCH] Re structured property --- .../config/property/BoolProperty.java | 2 +- .../config/property/ColorProperty.java | 16 +- .../config/property/FloatProperty.java | 4 +- .../config/property/IntProperty.java | 2 +- .../config/property/KeybindingProperty.java | 4 +- .../config/property/NamespaceProperty.java | 2 +- .../config/property/Property.java | 163 +++++++++--------- .../config/property/SelectProperty.java | 18 +- .../config/property/StringProperty.java | 4 +- 9 files changed, 114 insertions(+), 101 deletions(-) diff --git a/src/main/java/org/saturnclient/config/property/BoolProperty.java b/src/main/java/org/saturnclient/config/property/BoolProperty.java index 8f3edc7..233d4fa 100644 --- a/src/main/java/org/saturnclient/config/property/BoolProperty.java +++ b/src/main/java/org/saturnclient/config/property/BoolProperty.java @@ -1,7 +1,7 @@ package org.saturnclient.config.property; public class BoolProperty extends Property { - public final boolean value; + public boolean value; public final boolean defaultValue; public BoolProperty(boolean defaultValue) { diff --git a/src/main/java/org/saturnclient/config/property/ColorProperty.java b/src/main/java/org/saturnclient/config/property/ColorProperty.java index 64913af..ac52d42 100644 --- a/src/main/java/org/saturnclient/config/property/ColorProperty.java +++ b/src/main/java/org/saturnclient/config/property/ColorProperty.java @@ -1,11 +1,25 @@ package org.saturnclient.config.property; public class ColorProperty extends Property { - public final int value; + public int value; public final int defaultValue; public ColorProperty(int defaultValue) { this.value = defaultValue; this.defaultValue = defaultValue; } + + public static int parseHexToInt(String hex) { + + hex = hex.replace("#", ""); + + if (hex.length() == 6) + hex = "FF" + hex; + + if (hex.length() != 8) + throw new IllegalArgumentException( + "Hex must be 6 or 8 chars long, got '" + hex + "'"); + + return (int) Long.parseLong(hex, 16); + } } diff --git a/src/main/java/org/saturnclient/config/property/FloatProperty.java b/src/main/java/org/saturnclient/config/property/FloatProperty.java index 00c7eee..9775160 100644 --- a/src/main/java/org/saturnclient/config/property/FloatProperty.java +++ b/src/main/java/org/saturnclient/config/property/FloatProperty.java @@ -1,7 +1,7 @@ package org.saturnclient.config.property; -public class FloatProperty { - public final float value; +public class FloatProperty extends Property { + public float value; public final float defaultValue; public FloatProperty(float defaultValue) { diff --git a/src/main/java/org/saturnclient/config/property/IntProperty.java b/src/main/java/org/saturnclient/config/property/IntProperty.java index 5e27dd4..b3ed3a2 100644 --- a/src/main/java/org/saturnclient/config/property/IntProperty.java +++ b/src/main/java/org/saturnclient/config/property/IntProperty.java @@ -1,7 +1,7 @@ package org.saturnclient.config.property; public class IntProperty extends Property { - public final int value; + public int value; public final int defaultValue; public IntProperty(int defaultValue) { diff --git a/src/main/java/org/saturnclient/config/property/KeybindingProperty.java b/src/main/java/org/saturnclient/config/property/KeybindingProperty.java index f2723f4..5c109ab 100644 --- a/src/main/java/org/saturnclient/config/property/KeybindingProperty.java +++ b/src/main/java/org/saturnclient/config/property/KeybindingProperty.java @@ -2,8 +2,8 @@ package org.saturnclient.config.property; import org.saturnclient.common.provider.Providers; -public class KeybindingProperty { - public final int value; +public class KeybindingProperty extends Property { + public int value; public final int defaultValue; public boolean wasPressedLastTick = false; diff --git a/src/main/java/org/saturnclient/config/property/NamespaceProperty.java b/src/main/java/org/saturnclient/config/property/NamespaceProperty.java index 1ec4bf4..c6bc221 100644 --- a/src/main/java/org/saturnclient/config/property/NamespaceProperty.java +++ b/src/main/java/org/saturnclient/config/property/NamespaceProperty.java @@ -2,7 +2,7 @@ package org.saturnclient.config.property; import java.util.Map; -public class NamespaceProperty { +public class NamespaceProperty extends Property { public final Map value; public NamespaceProperty(Map value) { diff --git a/src/main/java/org/saturnclient/config/property/Property.java b/src/main/java/org/saturnclient/config/property/Property.java index b26ca8c..b35eafc 100644 --- a/src/main/java/org/saturnclient/config/property/Property.java +++ b/src/main/java/org/saturnclient/config/property/Property.java @@ -6,8 +6,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import java.util.Map; -import org.saturnclient.common.provider.Providers; - public abstract class Property { public enum PropertyType { @@ -75,41 +73,46 @@ public abstract class Property { public JsonNode toJson() { - switch (type) { - - case BOOLEAN: - return JsonNodeFactory.instance.booleanNode((Boolean) value); - - case INTEGER: - return JsonNodeFactory.instance.numberNode((Integer) value); - - case FLOAT: - return JsonNodeFactory.instance.numberNode((Float) value); - - case STRING: - return JsonNodeFactory.instance.textNode((String) value); - - case HEX: - return JsonNodeFactory.instance.textNode( - String.format("#%08X", (Integer) value)); - - case KEYBINDING: - case SELECT: - return JsonNodeFactory.instance.numberNode((Integer) value); - - case NAMESPACE: - - ObjectNode nested = JsonNodeFactory.instance.objectNode(); - - getNamespaceValue().forEach((k, v) -> { - nested.set(k, v.toJson()); - }); - - return nested; - - default: - return JsonNodeFactory.instance.textNode(String.valueOf(value)); + if (this instanceof BoolProperty p) { + return JsonNodeFactory.instance.booleanNode(p.value); } + + if (this instanceof IntProperty p) { + return JsonNodeFactory.instance.numberNode(p.value); + } + + if (this instanceof FloatProperty p) { + return JsonNodeFactory.instance.numberNode(p.value); + } + + if (this instanceof StringProperty p) { + return JsonNodeFactory.instance.textNode(p.value); + } + + if (this instanceof ColorProperty p) { + return JsonNodeFactory.instance.textNode( + String.format("#%08X", p.value)); + } + + if (this instanceof KeybindingProperty p) { + return JsonNodeFactory.instance.numberNode(p.value); + } + + if (this instanceof SelectProperty p) { + return JsonNodeFactory.instance.numberNode(p.value); + } + + if (this instanceof NamespaceProperty p) { + ObjectNode nested = JsonNodeFactory.instance.objectNode(); + + p.value.forEach((k, v) -> { + nested.set(k, v.toJson()); + }); + + return nested; + } + + return null; } public void loadFromJson(JsonNode element) { @@ -117,58 +120,58 @@ public abstract class Property { if (element == null) return; - switch (type) { + if (this instanceof BoolProperty p) { + if (element.isBoolean()) + p.value = element.booleanValue(); + return; + } - case BOOLEAN: - if (element.isBoolean()) - setValue(element.booleanValue()); - break; + if (this instanceof IntProperty p) { + if (element.isInt()) + p.value = element.intValue(); + else if (element.isTextual()) + p.value = ColorProperty.parseHexToInt(element.textValue()); + return; + } - case INTEGER: - if (element.isInt()) - setValue(element.intValue()); - else if (element.isTextual()) - setValue(parseHexToInt(element.textValue())); - break; + if (this instanceof FloatProperty p) { + if (element.isNumber()) + p.value = element.floatValue(); + return; + } - case FLOAT: - if (element.isNumber()) - setValue(element.floatValue()); - break; + if (this instanceof StringProperty p) { + if (element.isTextual()) + p.value = element.textValue(); + return; + } - case STRING: - if (element.isTextual()) - setValue(element.textValue()); - break; + if (this instanceof ColorProperty p) { + if (element.isTextual()) + p.value = ColorProperty.parseHexToInt(element.textValue()); + return; + } - case HEX: - if (element.isTextual()) - setValue(parseHexToInt(element.textValue())); - break; + if (this instanceof NamespaceProperty p) { + if (element.isObject()) { + ObjectNode obj = (ObjectNode) element; - case NAMESPACE: + p.value.forEach((k, v) -> { + v.loadFromJson(obj.get(k)); + }); + } + return; + } - if (element.isObject()) { + if (this instanceof SelectProperty p) { + if (element.isInt()) + p.setSelection(element.intValue()); + return; + } - ObjectNode obj = (ObjectNode) element; - - getNamespaceValue().forEach((k, v) -> { - v.loadFromJson(obj.get(k)); - }); - - } - - break; - - case SELECT: - if (element.isInt()) - setSelection(element.intValue()); - break; - - case KEYBINDING: - if (element.isInt()) - setValue(element.intValue()); - break; + if (this instanceof KeybindingProperty p) { + if (element.isInt()) + p.value = element.intValue(); } } } \ No newline at end of file diff --git a/src/main/java/org/saturnclient/config/property/SelectProperty.java b/src/main/java/org/saturnclient/config/property/SelectProperty.java index d8f1642..b5171f7 100644 --- a/src/main/java/org/saturnclient/config/property/SelectProperty.java +++ b/src/main/java/org/saturnclient/config/property/SelectProperty.java @@ -1,9 +1,7 @@ package org.saturnclient.config.property; -import org.saturnclient.config.property.Property.PropertyType; - public class SelectProperty extends Property { - public final int value; + public int value; public final int defaultValue; public final String[] availableValues; @@ -15,23 +13,21 @@ public class SelectProperty extends Property { public void next() { int i = (Integer) value; - setValue((i < availableValues.length - 1) ? i + 1 : 0); + this.value = (i < availableValues.length - 1) ? i + 1 : 0; } public void prev() { - if (type == PropertyType.SELECT) { - int i = (Integer) value; - setValue((i > 0) ? i - 1 : availableValues.length - 1); - } + int i = (Integer) value; + this.value = (i > 0) ? i - 1 : availableValues.length - 1; } public void setSelection(int selection) { - if (type == PropertyType.SELECT && selection >= 0 && selection < availableValues.length) { - setValue(selection); + if (selection >= 0 && selection < availableValues.length) { + this.value = selection; } } public String getSelection() { - return (type == PropertyType.SELECT) ? availableValues[(Integer) value] : null; + return availableValues[(Integer) value]; } } diff --git a/src/main/java/org/saturnclient/config/property/StringProperty.java b/src/main/java/org/saturnclient/config/property/StringProperty.java index a81675c..1526ce2 100644 --- a/src/main/java/org/saturnclient/config/property/StringProperty.java +++ b/src/main/java/org/saturnclient/config/property/StringProperty.java @@ -1,7 +1,7 @@ package org.saturnclient.config.property; -public class StringProperty { - public final String value; +public class StringProperty extends Property { + public String value; public final String defaultValue; public StringProperty(String defaultValue) {