diff --git a/build.gradle b/build.gradle index 59a169b..cde8e04 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,7 @@ dependencies { include modImplementation("io.gitlab.jfronny.libjf:libjf-data-manipulation-v0:${project.jfapi_version}") include("io.gitlab.jfronny.libjf:libjf-unsafe-v0:${project.jfapi_version}") include("io.gitlab.jfronny.libjf:libjf-base:${project.jfapi_version}") + include modRuntimeOnly('io.gitlab.jfronny:gson:2.9.0.2022.4.2.19.45.43') // Dependency of LibJF 2.7.0 modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-devutil-v0:${project.jfapi_version}") testImplementation('org.junit.jupiter:junit-jupiter:5.8.2') diff --git a/gradle.properties b/gradle.properties index ef257d5..8257cbc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ loader_version=0.13.3 maven_group=io.gitlab.jfronny archives_base_name=respackopts fabric_version=0.47.8+1.18.2 -jfapi_version=2.5.0 +jfapi_version=2.7.0 modrinth_id=TiF5QWZY modrinth_required_dependencies=P7dR8mSH diff --git a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java index adf5573..1a4d447 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java @@ -12,8 +12,6 @@ import io.gitlab.jfronny.respackopts.gson.entry.EnumEntrySerializer; import io.gitlab.jfronny.respackopts.gson.entry.NumericEntrySerializer; import io.gitlab.jfronny.respackopts.integration.FrexCompat; import io.gitlab.jfronny.respackopts.model.ConfigFile; -import io.gitlab.jfronny.respackopts.model.DirRpo; -import io.gitlab.jfronny.respackopts.model.FileRpo; import io.gitlab.jfronny.respackopts.model.condition.Condition; import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry; import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch; @@ -72,8 +70,6 @@ public class Respackopts implements ClientModInitializer { .registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer()) .registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer()) .registerTypeAdapter(Script.class, new ScriptDeserializer()) - .registerTypeAdapter(FileRpo.class, new FileRpoDeserializer()) - .registerTypeAdapter(DirRpo.class, new DirRpoDeserializer()) .registerTypeAdapter(Condition.class, new ConditionDeserializer()) .registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory()) diff --git a/src/main/java/io/gitlab/jfronny/respackopts/filters/DirFilterEventImpl.java b/src/main/java/io/gitlab/jfronny/respackopts/filters/DirFilterEventImpl.java index bb26080..a02671e 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/filters/DirFilterEventImpl.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/filters/DirFilterEventImpl.java @@ -87,10 +87,10 @@ public class DirFilterEventImpl { } private static boolean dirHidden(DirRpo rpo, String packId, String file) { - if (rpo.conditions == null) + if (rpo.condition == null) return false; try { - return !rpo.conditions.evaluate(packId); + return !rpo.condition.evaluate(packId); } catch (RpoFormatException e) { Respackopts.LOGGER.error("Couldn't parse dir conditions for " + file + " (" + packId + ")", e); } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/filters/util/FileExclusionProvider.java b/src/main/java/io/gitlab/jfronny/respackopts/filters/util/FileExclusionProvider.java index a65db07..b733b96 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/filters/util/FileExclusionProvider.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/filters/util/FileExclusionProvider.java @@ -8,10 +8,10 @@ import net.minecraft.resource.ResourcePack; public class FileExclusionProvider { public static boolean fileHidden(ResourcePack pack, String file) { return FileRpoSearchProvider.modifyWithRpo(file, pack, rpo -> { - if (rpo.conditions == null) + if (rpo.condition == null) return false; try { - return !rpo.conditions.evaluate(MetaCache.getId(MetaCache.getKeyByPack(pack))); + return !rpo.condition.evaluate(MetaCache.getId(MetaCache.getKeyByPack(pack))); } catch (RpoFormatException e) { Respackopts.LOGGER.error("Could not evaluate condition " + file, e); return false; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/gson/DirRpoDeserializer.java b/src/main/java/io/gitlab/jfronny/respackopts/gson/DirRpoDeserializer.java deleted file mode 100644 index dbad7df..0000000 --- a/src/main/java/io/gitlab/jfronny/respackopts/gson/DirRpoDeserializer.java +++ /dev/null @@ -1,32 +0,0 @@ -package io.gitlab.jfronny.respackopts.gson; - -import com.google.gson.*; -import io.gitlab.jfronny.respackopts.Respackopts; -import io.gitlab.jfronny.respackopts.model.DirRpo; -import io.gitlab.jfronny.respackopts.model.condition.Condition; - -import java.lang.reflect.Type; -import java.util.Map; - -public class DirRpoDeserializer implements JsonDeserializer { - @Override - public DirRpo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (!json.isJsonObject()) - throw new JsonParseException("Rpo must be a json object"); - DirRpo rpo = new DirRpo(); - for (Map.Entry entry : json.getAsJsonObject().entrySet()) { - switch (entry.getKey()) { - case "conditions", "condition" -> rpo.conditions = context.deserialize(entry.getValue(), Condition.class); - case "fallbacks", "fallback" -> { - if (entry.getValue().isJsonPrimitive() && entry.getValue().getAsJsonPrimitive().isString()) { - rpo.fallback = entry.getValue().getAsString(); - } - else { - throw new JsonParseException("Directory .rpos only support a single fallback"); - } - } - } - } - return rpo; - } -} diff --git a/src/main/java/io/gitlab/jfronny/respackopts/gson/FileRpoDeserializer.java b/src/main/java/io/gitlab/jfronny/respackopts/gson/FileRpoDeserializer.java deleted file mode 100644 index bea20ac..0000000 --- a/src/main/java/io/gitlab/jfronny/respackopts/gson/FileRpoDeserializer.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.gitlab.jfronny.respackopts.gson; - -import com.google.gson.*; -import com.google.gson.reflect.TypeToken; -import io.gitlab.jfronny.respackopts.Respackopts; -import io.gitlab.jfronny.respackopts.model.FileRpo; -import io.gitlab.jfronny.respackopts.model.condition.Condition; -import meteordevelopment.starscript.Script; - -import java.lang.reflect.Type; -import java.util.Map; -import java.util.Set; - -public class FileRpoDeserializer implements JsonDeserializer { - private static final Type stringScriptMapType = new TypeToken>(){}.getType(); - private static final Type stringSetType = new TypeToken>(){}.getType(); - @Override - public FileRpo deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (!json.isJsonObject()) - throw new JsonParseException("Rpo must be a json object"); - FileRpo rpo = new FileRpo(); - for (Map.Entry entry : json.getAsJsonObject().entrySet()) { - switch (entry.getKey()) { - case "conditions", "condition" -> rpo.conditions = context.deserialize(entry.getValue(), Condition.class); - case "fallbacks", "fallback" -> rpo.fallbacks = context.deserialize(entry.getValue(), stringSetType); - case "expansions", "expansion" -> rpo.expansions = context.deserialize(entry.getValue(), stringScriptMapType); - } - } - return rpo; - } -} diff --git a/src/main/java/io/gitlab/jfronny/respackopts/model/DirRpo.java b/src/main/java/io/gitlab/jfronny/respackopts/model/DirRpo.java index 54b18e8..a7ef829 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/model/DirRpo.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/model/DirRpo.java @@ -1,10 +1,13 @@ package io.gitlab.jfronny.respackopts.model; +import com.google.gson.annotations.SerializedName; import io.gitlab.jfronny.libjf.gson.GsonHidden; import io.gitlab.jfronny.respackopts.model.condition.Condition; public class DirRpo { - public Condition conditions; + @SerializedName(value = "condition", alternate = {"conditions"}) + public Condition condition; + @SerializedName(value = "fallback", alternate = {"fallbacks"}) public String fallback; @GsonHidden diff --git a/src/main/java/io/gitlab/jfronny/respackopts/model/FileRpo.java b/src/main/java/io/gitlab/jfronny/respackopts/model/FileRpo.java index 2ea74a1..ed1b007 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/model/FileRpo.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/model/FileRpo.java @@ -1,5 +1,6 @@ package io.gitlab.jfronny.respackopts.model; +import com.google.gson.annotations.SerializedName; import io.gitlab.jfronny.libjf.gson.GsonHidden; import io.gitlab.jfronny.respackopts.model.condition.Condition; import meteordevelopment.starscript.Script; @@ -8,8 +9,11 @@ import java.util.Map; import java.util.Set; public class FileRpo { - public Condition conditions; + @SerializedName(value = "condition", alternate = {"conditions"}) + public Condition condition; + @SerializedName(value = "fallback", alternate = {"fallbacks"}) public Set fallbacks; + @SerializedName(value = "expansion", alternate = {"expansions"}) public Map expansions; @GsonHidden diff --git a/src/main/java/io/gitlab/jfronny/respackopts/model/condition/RpoBooleanCondition.java b/src/main/java/io/gitlab/jfronny/respackopts/model/condition/RpoBooleanCondition.java index e63c816..eb2e06a 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/model/condition/RpoBooleanCondition.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/model/condition/RpoBooleanCondition.java @@ -6,14 +6,12 @@ import io.gitlab.jfronny.respackopts.model.cache.CacheKey; import io.gitlab.jfronny.respackopts.model.cache.CachedPackState; import io.gitlab.jfronny.respackopts.util.MetaCache; import io.gitlab.jfronny.respackopts.model.ThrowingBiConsumer; -import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch; import io.gitlab.jfronny.respackopts.util.RpoFormatException; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.VersionParsingException; import net.fabricmc.loader.api.metadata.version.VersionPredicate; -import java.nio.file.Path; import java.util.Objects; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; diff --git a/src/test/java/io/gitlab/jfronny/respackopts/TemplateTree.java b/src/test/java/io/gitlab/jfronny/respackopts/TemplateTree.java index b0eecff..7741fc5 100644 --- a/src/test/java/io/gitlab/jfronny/respackopts/TemplateTree.java +++ b/src/test/java/io/gitlab/jfronny/respackopts/TemplateTree.java @@ -7,8 +7,6 @@ import io.gitlab.jfronny.respackopts.gson.entry.BooleanEntrySerializer; import io.gitlab.jfronny.respackopts.gson.entry.ConfigBranchSerializer; import io.gitlab.jfronny.respackopts.gson.entry.EnumEntrySerializer; import io.gitlab.jfronny.respackopts.gson.entry.NumericEntrySerializer; -import io.gitlab.jfronny.respackopts.model.DirRpo; -import io.gitlab.jfronny.respackopts.model.FileRpo; import io.gitlab.jfronny.respackopts.model.condition.Condition; import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry; import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch; @@ -23,8 +21,6 @@ public class TemplateTree { .registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer()) .registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer()) .registerTypeAdapter(Script.class, new ScriptDeserializer()) - .registerTypeAdapter(FileRpo.class, new FileRpoDeserializer()) - .registerTypeAdapter(DirRpo.class, new DirRpoDeserializer()) .registerTypeAdapter(Condition.class, new ConditionDeserializer()) .registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory())