From 4966024847b3fc278fc47c1d434968433b2c03cf Mon Sep 17 00:00:00 2001 From: JFronny Date: Tue, 13 Jul 2021 13:33:27 +0200 Subject: [PATCH] Hopefully fix WrappedPack --- build.gradle | 3 ++- .../respackopts/data/entry/ConfigBranch.java | 19 ++++++++++++++----- .../respackopts/data/entry/ConfigEntry.java | 14 ++++++++++++-- .../data/entry/ConfigEnumEntry.java | 6 +++--- .../respackopts/filters/WrappedPack.java | 6 +++--- 5 files changed, 34 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 6535965..dad3faa 100644 --- a/build.gradle +++ b/build.gradle @@ -22,9 +22,10 @@ dependencies { modApi("me.shedaniel.cloth:cloth-config-fabric:5.0.34") modCompileOnly "grondag:frex-mc117:+" + /*TODO re-enable after canvas works on 1.17.1 modRuntime("grondag:canvas-mc117-1.17:+") { exclude(group: "me.shedaniel.cloth") - } + }*/ testImplementation('org.junit.jupiter:junit-jupiter:5.6.2') } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java index 0986b21..cfeece8 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigBranch.java @@ -21,23 +21,23 @@ public class ConfigBranch extends ConfigEntry>> { public boolean getBoolean(String name) throws RpoError { String[] sp = name.split("\\."); if (!super.getValue().containsKey(sp[0])) - throw new RpoError("Invalid path to key"); + throw new RpoError("Invalid path to key in " + getName()); ConfigEntry e = super.getValue().get(sp[0]); if (sp.length == 1) { if (e instanceof ConfigBooleanEntry b) return b.getValue(); - throw new RpoError("Not a boolean"); + throw new RpoError("Not a boolean in " + getName()); } if (sp.length == 2 && e instanceof ConfigEnumEntry en) { for (String entry : en.values) { if (entry.equals(sp[1])) return entry.equals(en.getValue()); } - throw new RpoError("Could not find enum entry"); + throw new RpoError("Could not find enum entry in " + getName()); } if (e instanceof ConfigBranch b) return b.getBoolean(name.substring(name.indexOf('.') + 1)); - throw new RpoError("Invalid path to key"); + throw new RpoError("Invalid path to key in " + getName()); } @Override @@ -52,7 +52,7 @@ public class ConfigBranch extends ConfigEntry>> { syncSub(current, (ConfigEntry)e.getValue(), mode); } else { - Respackopts.LOGGER.warn("Type mismatch in config, ignoring"); + Respackopts.LOGGER.warn("Type mismatch in config (" + getName() + "), ignoring"); } } } @@ -64,12 +64,21 @@ public class ConfigBranch extends ConfigEntry>> { public void add(String name, ConfigEntry val) { val.setVersion(version); + val.parent = this; super.getValue().put(name, val); } public ConfigEntry get(String key) { return super.getValue().get(key); } + + public String getEntryName(ConfigEntry entry) { + for (Map.Entry> e : getValue().entrySet()) { + if (e.getValue() == entry) + return e.getKey(); + } + throw new IndexOutOfBoundsException(); + } public boolean has(String key) { return super.getValue().containsKey(key); diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java index dc34567..73e22c4 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEntry.java @@ -12,6 +12,16 @@ public abstract class ConfigEntry { private T defaultValue; private T value; protected int version; + protected ConfigBranch parent; + + public String getName() { + if (parent == null) + return ""; + String n = parent.getName() + "." + parent.getEntryName(this); + if (n.startsWith(".")) + n = n.substring(0, 1); + return n; + } public void setVersion(int version) { this.version = version; @@ -23,7 +33,7 @@ public abstract class ConfigEntry { public T getValue() { if (value == null) { if (defaultValue == null) { - Respackopts.LOGGER.warn("No default value or current value set for entry, returning null"); + Respackopts.LOGGER.warn("No default value or current value set for entry, returning null in " + getName()); return null; } value = getDefault(); @@ -39,7 +49,7 @@ public abstract class ConfigEntry { public T getDefault() { if (defaultValue == null) { defaultValue = getValue(); - Respackopts.LOGGER.warn("No default value set for entry, using current"); + Respackopts.LOGGER.warn("No default value set for entry, using current in " + getName()); } return defaultValue; } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java index 9bc87fb..124dae6 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/data/entry/ConfigEnumEntry.java @@ -32,7 +32,7 @@ public class ConfigEnumEntry extends ConfigEntry { setValue(v); } else { - throw new NullPointerException("Could not get value"); + throw new NullPointerException("Could not get value in " + getName()); } } return v; @@ -43,7 +43,7 @@ public class ConfigEnumEntry extends ConfigEntry { String v = super.getDefault(); if (v == null) { if (values.size() == 0) - throw new NullPointerException("Could not get default entry as the entry array is empty"); + throw new NullPointerException("Could not get default entry as the entry array is empty in " + getName()); else v = values.get(0); } @@ -63,7 +63,7 @@ public class ConfigEnumEntry extends ConfigEntry { setValue(values.get(n.nextValue)); } else { - Respackopts.LOGGER.error("Could not load default value for enum"); + Respackopts.LOGGER.error("Could not load default value for enum in " + getName()); } } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/filters/WrappedPack.java b/src/main/java/io/gitlab/jfronny/respackopts/filters/WrappedPack.java index 8d0d483..70ea930 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/filters/WrappedPack.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/filters/WrappedPack.java @@ -36,11 +36,11 @@ public class WrappedPack implements ResourcePack { }; FileContainedProvider contains = s -> { Tuple p = pathGetter.split(s); - return this.pack.contains(p.left(), p.right()); + return this.contains(p.left(), p.right()); }; FileOpenProvider open = s -> { Tuple p = pathGetter.split(s); - return this.pack.open(p.left(), p.right()); + return this.open(p.left(), p.right()); }; rpo = new ResourcePackFilter(contains, open); fbt = new FallbackFilter(contains, open); @@ -59,7 +59,7 @@ public class WrappedPack implements ResourcePack { @Override public InputStream open(ResourceType type, Identifier id) throws IOException { - if (pack.contains(type, id) && containsFileWasFallback) { + if (contains(type, id) && containsFileWasFallback) { return fbt.getReplacement(getFilename(type, id), new FileNotFoundException()); } return pack.open(type, id);