Inceptum/src/main/java/io/gitlab/jfronny/glaunch/gson/MinecraftArgumentDeserializer.java

32 lines
1.4 KiB
Java
Raw Normal View History

2021-10-27 22:00:08 +02:00
package io.gitlab.jfronny.glaunch.gson;
import com.google.gson.*;
import io.gitlab.jfronny.glaunch.model.MinecraftArgument;
import io.gitlab.jfronny.glaunch.model.Rules;
import java.lang.reflect.Type;
import java.util.LinkedHashSet;
import java.util.Set;
public class MinecraftArgumentDeserializer implements JsonDeserializer<MinecraftArgument> {
@Override
public MinecraftArgument deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonPrimitive() && json.getAsJsonPrimitive().isString()) {
return new MinecraftArgument(Set.of(json.getAsString()));
}
else if (json.isJsonObject()) {
JsonObject jo = json.getAsJsonObject();
if (jo.size() != 2 || !jo.has("rules") || !jo.has("value"))
throw new JsonParseException("Not a valid minecraft argument");
Rules r = context.deserialize(jo.get("rules"), Rules.class);
if (!r.allow()) return new MinecraftArgument(Set.of());
Set<String> sel = new LinkedHashSet<>();
for (JsonElement value : jo.get("value").getAsJsonArray()) {
sel.add(value.getAsString());
}
return new MinecraftArgument(Set.copyOf(sel));
}
else throw new JsonParseException("Not a valid minecraft argument");
}
}