aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/torui/coflsky/configuration
diff options
context:
space:
mode:
authorTorui <44932079+ToruiDev@users.noreply.github.com>2022-05-08 13:05:09 +0200
committerGitHub <noreply@github.com>2022-05-08 13:05:09 +0200
commita7d7277bfa5274c816b93e4493447989c3d562da (patch)
treec61821e43af07ad31b166b2cac797471d21548f4 /src/main/java/de/torui/coflsky/configuration
parent176abc9c9ab1004e99417b11e91d6c3f21bd7f69 (diff)
downloadCOFL-a7d7277bfa5274c816b93e4493447989c3d562da.tar.gz
COFL-a7d7277bfa5274c816b93e4493447989c3d562da.tar.bz2
COFL-a7d7277bfa5274c816b93e4493447989c3d562da.zip
Feature/configuration (#59)
* initial commit of configuration management * Updated Configuration Options * Review Feedback, IntelliJ was angry about TimerCountdown.java import Co-authored-by: Florian Rinke <florian@torui.de>
Diffstat (limited to 'src/main/java/de/torui/coflsky/configuration')
-rw-r--r--src/main/java/de/torui/coflsky/configuration/Configuration.java37
-rw-r--r--src/main/java/de/torui/coflsky/configuration/ConfigurationManager.java119
-rw-r--r--src/main/java/de/torui/coflsky/configuration/Description.java20
3 files changed, 176 insertions, 0 deletions
diff --git a/src/main/java/de/torui/coflsky/configuration/Configuration.java b/src/main/java/de/torui/coflsky/configuration/Configuration.java
new file mode 100644
index 0000000..bdd6186
--- /dev/null
+++ b/src/main/java/de/torui/coflsky/configuration/Configuration.java
@@ -0,0 +1,37 @@
+package de.torui.coflsky.configuration;
+
+public class Configuration {
+ public Configuration() {
+
+ }
+
+ private static Configuration instance;
+
+ public static Configuration getInstance() {
+ if (instance == null)
+ instance = new Configuration();
+ return instance;
+ }
+
+ public static void setInstance(Configuration config) {
+ instance = config;
+ }
+
+ public String ChatRegex;
+ public boolean CollectChat;
+ public boolean CollectInventory;
+ public boolean CollectTab;
+ public boolean CollectScoreboard;
+ public boolean AllowProxy;
+ public boolean CollectInvClick;
+ public boolean CollectChatClicks;
+ public boolean CollectLobbyChanges;
+ public boolean CollectEntities;
+
+ @Description("Wherever or not to send item descriptions for extending to the server")
+ public boolean ExtendDescriptions;
+
+ @Description("Chat input starting with one of these prefixes is sent to the server")
+ public String[] CommandPrefixes;
+
+}
diff --git a/src/main/java/de/torui/coflsky/configuration/ConfigurationManager.java b/src/main/java/de/torui/coflsky/configuration/ConfigurationManager.java
new file mode 100644
index 0000000..7930210
--- /dev/null
+++ b/src/main/java/de/torui/coflsky/configuration/ConfigurationManager.java
@@ -0,0 +1,119 @@
+package de.torui.coflsky.configuration;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+
+import de.torui.coflsky.network.WSClient;
+import net.minecraft.client.Minecraft;
+import net.minecraft.event.HoverEvent;
+import net.minecraft.util.ChatComponentText;
+import net.minecraft.util.ChatStyle;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.IChatComponent;
+
+public class ConfigurationManager {
+
+ public Configuration Config;
+
+ public ConfigurationManager() {
+ this.Config = Configuration.getInstance();
+ }
+
+ public void UpdateConfiguration(String data) {
+
+ Configuration newConfig = WSClient.gson.fromJson(data, Configuration.class);
+
+ if (newConfig == null) {
+ System.out.println("Could not deserialize configuration " + data);
+ }
+
+
+ try {
+ if (CompareProperties(Config, newConfig)) {
+ Configuration.setInstance(newConfig);
+ }
+ } catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public boolean CompareProperties(Configuration old, Configuration newConfiguration)
+ throws IllegalArgumentException, IllegalAccessException {
+
+ int updatedProperties = 0;
+ for (Field f : Configuration.class.getFields()) {
+
+ switch (f.getGenericType().getTypeName()) {
+
+ case "int":
+ if (f.getInt(old) != f.getInt(newConfiguration)) {
+ UpdatedProperty(f);
+ updatedProperties++;
+ }
+ break;
+ case "boolean":
+ if (f.getBoolean(old) != f.getBoolean(newConfiguration)) {
+ UpdatedProperty(f);
+ updatedProperties++;
+ }
+ break;
+ case "java.lang.String":
+
+ if (f.get(old) != null && !f.get(old).equals(f.get(newConfiguration))) {
+ UpdatedProperty(f);
+ updatedProperties++;
+ }
+ break;
+ case "java.lang.String[]":
+ if (!Arrays.deepEquals((String[]) f.get(old), (String[]) f.get(newConfiguration))) {
+ UpdatedProperty(f);
+ updatedProperties++;
+ }
+ break;
+
+ default:
+ throw new RuntimeException("Invalid Configuration Type " + f.getGenericType().getTypeName());
+ }
+
+ }
+
+ return updatedProperties > 0;
+ }
+
+ private IChatComponent GetNameFormatted(Field propertyName) {
+ Description description = propertyName.getAnnotation(Description.class);
+ ChatComponentText toReturn = new ChatComponentText(propertyName.getName());
+
+ ChatStyle style = new ChatStyle();
+ style.setColor(EnumChatFormatting.WHITE);
+
+ if (description != null) {
+ style.setChatHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
+ new ChatComponentText(description.value())));
+ }
+
+ return toReturn.setChatStyle(style);
+
+ }
+
+ public void UpdatedProperty(Field propertyName) {
+ IChatComponent comp;
+
+ comp = new ChatComponentText("The Configuration Setting ")
+ .setChatStyle(new ChatStyle().setColor(EnumChatFormatting.BLUE))
+ .appendSibling(GetNameFormatted(propertyName))
+ .appendSibling(new ChatComponentText(" has been updated")
+ .setChatStyle(new ChatStyle().setColor(EnumChatFormatting.BLUE)));
+
+
+ System.out.println("Field " + propertyName.getName() + " has no description!");
+
+
+ Minecraft.getMinecraft().thePlayer.addChatMessage(comp);
+ }
+
+}
diff --git a/src/main/java/de/torui/coflsky/configuration/Description.java b/src/main/java/de/torui/coflsky/configuration/Description.java
new file mode 100644
index 0000000..4a54278
--- /dev/null
+++ b/src/main/java/de/torui/coflsky/configuration/Description.java
@@ -0,0 +1,20 @@
+/**
+ *
+ */
+package de.torui.coflsky.configuration;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Retention(RUNTIME)
+@Target(FIELD)
+/**
+ * @author Florian Rinke
+ *
+ */
+public @interface Description {
+ public String value();
+}