From 3821953a23afa7ae14ce5dfc1601fce553641ca3 Mon Sep 17 00:00:00 2001 From: JFronny <33260128+jfronny@users.noreply.github.com> Date: Mon, 28 Dec 2020 09:41:02 +0100 Subject: [PATCH] Respect enum insertion order, add respackopts_loaded to allow canvas shaders to check whether rpo is loaded --- README.md | 1 + gradle.properties | 2 +- .../lumi/assets/respackopts/conf.json | 4 +++- .../gitlab/jfronny/respackopts/GuiFactory.java | 13 +++++++------ .../gitlab/jfronny/respackopts/Respackopts.java | 17 +++++++---------- .../respackopts/integration/FrexCompat.java | 1 + .../mixin/ResourcePackManagerMixin.java | 3 ++- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 522810d..c7bde2a 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ To use the information from the config you will need to use and integration modu For the ones included by default: ### Canvas Respackopts defines a config supplier, you can include it with `#include respackopts:config_supplier`\ +You can always check whether it was properly loaded by checking if `respackopts_loaded` is defined.\ Values can be accessed with `{packId}_{entryId}` for basic elements.\ Enum values can be accessed with `{packId}_{entryId}_{enumKey}`.\ Examples of using these are available [here](https://gitlab.com/JFronny/respackopts/-/tree/master/run/resourcepacks/lumi) diff --git a/gradle.properties b/gradle.properties index e0e4684..30eebff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.16.4 yarn_mappings=1.16.4+build.7 loader_version=0.10.8 # Mod Properties -mod_version=1.2.0 +mod_version=1.3.0 maven_group=io.gitlab.jfronny archives_base_name=respackopts # Dependencies diff --git a/run/resourcepacks/lumi/assets/respackopts/conf.json b/run/resourcepacks/lumi/assets/respackopts/conf.json index b7638f7..f287fdb 100644 --- a/run/resourcepacks/lumi/assets/respackopts/conf.json +++ b/run/resourcepacks/lumi/assets/respackopts/conf.json @@ -20,9 +20,11 @@ "thisIsCool": true, "numberInSub": 15, "enumInSub": [ + "zthis is default", "yay1", "yay2", - "yay3" + "yay3", + "athis is last" ], "enableLang": true } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java b/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java index b1b3f45..044acf3 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java @@ -19,6 +19,7 @@ import net.minecraft.util.Language; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.TreeSet; public class GuiFactory { @@ -75,19 +76,19 @@ public class GuiFactory { } } else if (e.isJsonArray()) { - TreeSet ev = Respackopts.enumKeys.get(screenId).get(n); + Set ev = Respackopts.enumKeys.get(screenId).get(n); Double c = Respackopts.numVals.get(screenId).get(n); - String sel = ev.first(); + String sel = ""; + String def = ""; int i = 0; for (String s1 : ev) { - if (c.intValue() == i) { - sel = s1; - } + if (i == 0) def = s1; + if (c.intValue() == i) sel = s1; i++; } config.addEntry(entryBuilder.startDropdownMenu(getText(n, b), (DropdownBoxEntry.SelectionTopCellElement) DropdownMenuBuilder.TopCellElementBuilder.of(sel, (s) -> s, (s) -> new LiteralText(s)), new DropdownBoxEntry.DefaultSelectionCellCreator()) .setSuggestionMode(false) - .setDefaultValue(ev.first()) + .setDefaultValue(def) .setSelections(() -> ev.iterator()) .setSaveConsumer(v -> { int j = 0; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java index 8aa4efb..9f6c032 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java @@ -12,25 +12,22 @@ import net.fabricmc.loader.api.FabricLoader; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Objects; -import java.util.TreeSet; +import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; @Environment(EnvType.CLIENT) public class Respackopts implements ClientModInitializer { - public static HashMap> boolVals; - public static HashMap> numVals; - public static HashMap> strVals; - public static HashMap>> enumKeys; + public static Map> boolVals; + public static Map> numVals; + public static Map> strVals; + public static Map>> enumKeys; public static Gson g = new Gson(); public static GuiFactory factory = new GuiFactory(); public static final Integer metaVersion = 1; - public static HashMap resPackMetas = new HashMap<>(); + public static Map resPackMetas = new HashMap<>(); public static final String ID = "respackopts"; static final Path p = FabricLoader.getInstance().getConfigDir().resolve("respackopts"); - public static final HashSet saveActions = new HashSet<>(); + public static final Set saveActions = new HashSet<>(); public static final String fileExtension = ".rpo"; public static boolean forceRespackReload = false; @Override diff --git a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java index b956da2..a69c1bd 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java @@ -48,6 +48,7 @@ public class FrexCompat implements FrexInitializer { sb.append(i.getAndIncrement()); }); })); + sb.append("\n#define respackopts_loaded"); return sb.toString(); }); System.out.println("[respackopts] enabled frex/canvas support"); diff --git a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java index 4b2c264..97c2d60 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackManagerMixin.java @@ -17,6 +17,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.TreeSet; @@ -85,7 +86,7 @@ public class ResourcePackManagerMixin { continue; } if (!Respackopts.enumKeys.get(id).containsKey(n)) { - Respackopts.enumKeys.get(id).put(n, new TreeSet<>()); + Respackopts.enumKeys.get(id).put(n, new LinkedHashSet<>()); } JsonPrimitive p = element.getAsJsonPrimitive(); if (!p.isString()) {