Update LibJF, use @SerializedName

This commit is contained in:
Johannes Frohnmeyer 2022-04-03 18:58:49 +02:00
parent 998056636c
commit fdcc989566
Signed by: Johannes
GPG Key ID: E76429612C2929F4
11 changed files with 15 additions and 80 deletions

View File

@ -28,6 +28,7 @@ dependencies {
include modImplementation("io.gitlab.jfronny.libjf:libjf-data-manipulation-v0:${project.jfapi_version}") 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-unsafe-v0:${project.jfapi_version}")
include("io.gitlab.jfronny.libjf:libjf-base:${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}") modRuntimeOnly("io.gitlab.jfronny.libjf:libjf-devutil-v0:${project.jfapi_version}")
testImplementation('org.junit.jupiter:junit-jupiter:5.8.2') testImplementation('org.junit.jupiter:junit-jupiter:5.8.2')

View File

@ -5,7 +5,7 @@ loader_version=0.13.3
maven_group=io.gitlab.jfronny maven_group=io.gitlab.jfronny
archives_base_name=respackopts archives_base_name=respackopts
fabric_version=0.47.8+1.18.2 fabric_version=0.47.8+1.18.2
jfapi_version=2.5.0 jfapi_version=2.7.0
modrinth_id=TiF5QWZY modrinth_id=TiF5QWZY
modrinth_required_dependencies=P7dR8mSH modrinth_required_dependencies=P7dR8mSH

View File

@ -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.gson.entry.NumericEntrySerializer;
import io.gitlab.jfronny.respackopts.integration.FrexCompat; import io.gitlab.jfronny.respackopts.integration.FrexCompat;
import io.gitlab.jfronny.respackopts.model.ConfigFile; 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.condition.Condition;
import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry; import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry;
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch; import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
@ -72,8 +70,6 @@ public class Respackopts implements ClientModInitializer {
.registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer()) .registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer())
.registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer()) .registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer())
.registerTypeAdapter(Script.class, new ScriptDeserializer()) .registerTypeAdapter(Script.class, new ScriptDeserializer())
.registerTypeAdapter(FileRpo.class, new FileRpoDeserializer())
.registerTypeAdapter(DirRpo.class, new DirRpoDeserializer())
.registerTypeAdapter(Condition.class, new ConditionDeserializer()) .registerTypeAdapter(Condition.class, new ConditionDeserializer())
.registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory())
.registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory())

View File

@ -87,10 +87,10 @@ public class DirFilterEventImpl {
} }
private static boolean dirHidden(DirRpo rpo, String packId, String file) { private static boolean dirHidden(DirRpo rpo, String packId, String file) {
if (rpo.conditions == null) if (rpo.condition == null)
return false; return false;
try { try {
return !rpo.conditions.evaluate(packId); return !rpo.condition.evaluate(packId);
} catch (RpoFormatException e) { } catch (RpoFormatException e) {
Respackopts.LOGGER.error("Couldn't parse dir conditions for " + file + " (" + packId + ")", e); Respackopts.LOGGER.error("Couldn't parse dir conditions for " + file + " (" + packId + ")", e);
} }

View File

@ -8,10 +8,10 @@ import net.minecraft.resource.ResourcePack;
public class FileExclusionProvider { public class FileExclusionProvider {
public static boolean fileHidden(ResourcePack pack, String file) { public static boolean fileHidden(ResourcePack pack, String file) {
return FileRpoSearchProvider.modifyWithRpo(file, pack, rpo -> { return FileRpoSearchProvider.modifyWithRpo(file, pack, rpo -> {
if (rpo.conditions == null) if (rpo.condition == null)
return false; return false;
try { try {
return !rpo.conditions.evaluate(MetaCache.getId(MetaCache.getKeyByPack(pack))); return !rpo.condition.evaluate(MetaCache.getId(MetaCache.getKeyByPack(pack)));
} catch (RpoFormatException e) { } catch (RpoFormatException e) {
Respackopts.LOGGER.error("Could not evaluate condition " + file, e); Respackopts.LOGGER.error("Could not evaluate condition " + file, e);
return false; return false;

View File

@ -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<DirRpo> {
@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<String, JsonElement> 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;
}
}

View File

@ -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<FileRpo> {
private static final Type stringScriptMapType = new TypeToken<Map<String, Script>>(){}.getType();
private static final Type stringSetType = new TypeToken<Set<String>>(){}.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<String, JsonElement> 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;
}
}

View File

@ -1,10 +1,13 @@
package io.gitlab.jfronny.respackopts.model; package io.gitlab.jfronny.respackopts.model;
import com.google.gson.annotations.SerializedName;
import io.gitlab.jfronny.libjf.gson.GsonHidden; import io.gitlab.jfronny.libjf.gson.GsonHidden;
import io.gitlab.jfronny.respackopts.model.condition.Condition; import io.gitlab.jfronny.respackopts.model.condition.Condition;
public class DirRpo { public class DirRpo {
public Condition conditions; @SerializedName(value = "condition", alternate = {"conditions"})
public Condition condition;
@SerializedName(value = "fallback", alternate = {"fallbacks"})
public String fallback; public String fallback;
@GsonHidden @GsonHidden

View File

@ -1,5 +1,6 @@
package io.gitlab.jfronny.respackopts.model; package io.gitlab.jfronny.respackopts.model;
import com.google.gson.annotations.SerializedName;
import io.gitlab.jfronny.libjf.gson.GsonHidden; import io.gitlab.jfronny.libjf.gson.GsonHidden;
import io.gitlab.jfronny.respackopts.model.condition.Condition; import io.gitlab.jfronny.respackopts.model.condition.Condition;
import meteordevelopment.starscript.Script; import meteordevelopment.starscript.Script;
@ -8,8 +9,11 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
public class FileRpo { public class FileRpo {
public Condition conditions; @SerializedName(value = "condition", alternate = {"conditions"})
public Condition condition;
@SerializedName(value = "fallback", alternate = {"fallbacks"})
public Set<String> fallbacks; public Set<String> fallbacks;
@SerializedName(value = "expansion", alternate = {"expansions"})
public Map<String, Script> expansions; public Map<String, Script> expansions;
@GsonHidden @GsonHidden

View File

@ -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.model.cache.CachedPackState;
import io.gitlab.jfronny.respackopts.util.MetaCache; import io.gitlab.jfronny.respackopts.util.MetaCache;
import io.gitlab.jfronny.respackopts.model.ThrowingBiConsumer; import io.gitlab.jfronny.respackopts.model.ThrowingBiConsumer;
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
import io.gitlab.jfronny.respackopts.util.RpoFormatException; import io.gitlab.jfronny.respackopts.util.RpoFormatException;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.ModContainer;
import net.fabricmc.loader.api.VersionParsingException; import net.fabricmc.loader.api.VersionParsingException;
import net.fabricmc.loader.api.metadata.version.VersionPredicate; import net.fabricmc.loader.api.metadata.version.VersionPredicate;
import java.nio.file.Path;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;

View File

@ -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.ConfigBranchSerializer;
import io.gitlab.jfronny.respackopts.gson.entry.EnumEntrySerializer; import io.gitlab.jfronny.respackopts.gson.entry.EnumEntrySerializer;
import io.gitlab.jfronny.respackopts.gson.entry.NumericEntrySerializer; 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.condition.Condition;
import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry; import io.gitlab.jfronny.respackopts.model.tree.ConfigBooleanEntry;
import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch; import io.gitlab.jfronny.respackopts.model.tree.ConfigBranch;
@ -23,8 +21,6 @@ public class TemplateTree {
.registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer()) .registerTypeAdapter(ConfigBooleanEntry.class, new BooleanEntrySerializer())
.registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer()) .registerTypeAdapter(ConfigBranch.class, new ConfigBranchSerializer())
.registerTypeAdapter(Script.class, new ScriptDeserializer()) .registerTypeAdapter(Script.class, new ScriptDeserializer())
.registerTypeAdapter(FileRpo.class, new FileRpoDeserializer())
.registerTypeAdapter(DirRpo.class, new DirRpoDeserializer())
.registerTypeAdapter(Condition.class, new ConditionDeserializer()) .registerTypeAdapter(Condition.class, new ConditionDeserializer())
.registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntrySetTypeAdapterFactory())
.registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory()) .registerTypeAdapterFactory(new SingleEntryListTypeAdapterFactory())