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("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')

View File

@ -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

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.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())

View File

@ -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);
}

View File

@ -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;

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;
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

View File

@ -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<String> fallbacks;
@SerializedName(value = "expansion", alternate = {"expansions"})
public Map<String, Script> expansions;
@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.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;

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.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())