From 929c17da361ea3534fcb00816e6fbe13f5f33ab5 Mon Sep 17 00:00:00 2001 From: altrisi Date: Sun, 27 Dec 2020 15:53:44 +0100 Subject: [PATCH] Fix Value mess --- .../java/carpet/script/CarpetScriptHost.java | 4 +- .../java/carpet/script/api/Auxiliary.java | 10 +- .../carpet/script/bundled/FileModule.java | 12 ++- .../java/carpet/script/bundled/Module.java | 4 +- .../script/utils/ScarpetJsonDeserializer.java | 102 +++++++++--------- 5 files changed, 69 insertions(+), 63 deletions(-) diff --git a/src/main/java/carpet/script/CarpetScriptHost.java b/src/main/java/carpet/script/CarpetScriptHost.java index 3bed089d..60070cdc 100644 --- a/src/main/java/carpet/script/CarpetScriptHost.java +++ b/src/main/java/carpet/script/CarpetScriptHost.java @@ -18,6 +18,8 @@ import carpet.script.value.NumericValue; import carpet.script.value.StringValue; import carpet.script.value.Value; import carpet.utils.Messenger; + +import com.google.gson.JsonElement; import com.mojang.brigadier.builder.ArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; @@ -720,7 +722,7 @@ public class CarpetScriptHost extends ScriptHost return Module.listFile(main, resource, type, isShared); } - public Value readJsonFile(String resource, String type, boolean isShared) + public JsonElement readJsonFile(String resource, String type, boolean isShared) { if (getName() == null && !isShared) return null; return Module.readJsonFile(main, resource, type, isShared); diff --git a/src/main/java/carpet/script/api/Auxiliary.java b/src/main/java/carpet/script/api/Auxiliary.java index 0949b6bd..0fe2a643 100644 --- a/src/main/java/carpet/script/api/Auxiliary.java +++ b/src/main/java/carpet/script/api/Auxiliary.java @@ -35,9 +35,6 @@ import carpet.script.value.StringValue; import carpet.script.value.Value; import carpet.script.value.ValueConversions; import carpet.utils.Messenger; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - import net.minecraft.block.BlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; @@ -73,6 +70,10 @@ import net.minecraft.world.World; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -821,7 +822,8 @@ public class Auxiliary { } else if (fdesc.getMiddle().equals("json")) { - Value parsedJson = ((CarpetScriptHost) c.host).readJsonFile(fdesc.getLeft(), fdesc.getMiddle(), fdesc.getRight()); + JsonElement json = ((CarpetScriptHost) c.host).readJsonFile(fdesc.getLeft(), fdesc.getMiddle(), fdesc.getRight()); + Value parsedJson = gson.fromJson(json, Value.class); if (parsedJson == null) retVal = Value.NULL; else diff --git a/src/main/java/carpet/script/bundled/FileModule.java b/src/main/java/carpet/script/bundled/FileModule.java index ad798e27..8c32034e 100644 --- a/src/main/java/carpet/script/bundled/FileModule.java +++ b/src/main/java/carpet/script/bundled/FileModule.java @@ -25,8 +25,9 @@ import java.util.List; import java.util.Locale; import java.util.stream.Stream; -import carpet.script.api.Auxiliary; -import carpet.script.value.Value; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.stream.JsonReader; public class FileModule extends Module { @@ -180,10 +181,11 @@ public class FileModule extends Module } } - public static Value readJsonContent(Path filePath) + public static JsonElement readJsonContent(Path filePath) { - try (BufferedReader reader = Files.newBufferedReader(filePath, StandardCharsets.UTF_8)) { - return Auxiliary.gson.fromJson(reader, Value.class); + try (BufferedReader reader = Files.newBufferedReader(filePath, StandardCharsets.UTF_8)) + { + return new JsonParser().parse(new JsonReader(reader)); } catch (IOException e) { diff --git a/src/main/java/carpet/script/bundled/Module.java b/src/main/java/carpet/script/bundled/Module.java index 510aa6e0..4a352e8e 100644 --- a/src/main/java/carpet/script/bundled/Module.java +++ b/src/main/java/carpet/script/bundled/Module.java @@ -1,12 +1,12 @@ package carpet.script.bundled; import carpet.CarpetServer; -import carpet.script.value.Value; import net.minecraft.nbt.Tag; import net.minecraft.util.WorldSavePath; import org.apache.commons.io.FilenameUtils; import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonElement; import java.nio.file.Files; import java.nio.file.Path; @@ -80,7 +80,7 @@ public abstract class Module synchronized (writeIOSync) { return FileModule.listFileContent(dataFile); } } - public static Value readJsonFile(Module module, String resourceName, String type, boolean isShared) { + public static JsonElement readJsonFile(Module module, String resourceName, String type, boolean isShared) { Path dataFile = resolveResource(module, resourceName, supportedTypes.get(type), isShared); if (dataFile == null) return null; if (!dataFile.toFile().exists()) return null; diff --git a/src/main/java/carpet/script/utils/ScarpetJsonDeserializer.java b/src/main/java/carpet/script/utils/ScarpetJsonDeserializer.java index 759e0dd5..9b13ddc5 100644 --- a/src/main/java/carpet/script/utils/ScarpetJsonDeserializer.java +++ b/src/main/java/carpet/script/utils/ScarpetJsonDeserializer.java @@ -22,57 +22,57 @@ import carpet.script.value.Value; public class ScarpetJsonDeserializer implements JsonDeserializer{ - @Override - public Value deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - return parseElement(json); - } - - private Value parseElement(JsonElement element) throws JsonParseException { - if (element.isJsonObject()) - { - return parseMap(element.getAsJsonObject()); - } - else if (element.isJsonArray()) - { - return parseList(element.getAsJsonArray()); - } - else if (element.isJsonPrimitive()) - { - return parsePrimitive(element.getAsJsonPrimitive()); - } - return Value.NULL; - } + @Override + public Value deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + return parseElement(json); + } + + private Value parseElement(JsonElement element) throws JsonParseException { + if (element.isJsonObject()) + { + return parseMap(element.getAsJsonObject()); + } + else if (element.isJsonArray()) + { + return parseList(element.getAsJsonArray()); + } + else if (element.isJsonPrimitive()) + { + return parsePrimitive(element.getAsJsonPrimitive()); + } + return Value.NULL; + } - private Value parseMap(JsonObject jsonMap) throws JsonParseException { - Map map = new HashMap(); - jsonMap.entrySet().forEach(entry -> { - map.put(new StringValue(entry.getKey()), parseElement(entry.getValue())); - }); - return MapValue.wrap(map); - } + private Value parseMap(JsonObject jsonMap) throws JsonParseException { + Map map = new HashMap(); + jsonMap.entrySet().forEach(entry -> { + map.put(new StringValue(entry.getKey()), parseElement(entry.getValue())); + }); + return MapValue.wrap(map); + } - private Value parseList(JsonArray jsonList) throws JsonParseException { - List list = new ArrayList(); - jsonList.forEach(elem -> { - list.add(parseElement(elem)); - }); - return new ListValue(list); - } - - private Value parsePrimitive(JsonPrimitive primitive) throws JsonParseException { - if (primitive.isString()) - { - return new StringValue(primitive.getAsString()); - } - else if (primitive.isBoolean()) - { - return primitive.getAsBoolean() ? Value.TRUE : Value.FALSE; - } - else if (primitive.isNumber()) - { - return NumericValue.of(primitive.getAsNumber()); - } - return Value.NULL; - } + private Value parseList(JsonArray jsonList) throws JsonParseException { + List list = new ArrayList(); + jsonList.forEach(elem -> { + list.add(parseElement(elem)); + }); + return new ListValue(list); + } + + private Value parsePrimitive(JsonPrimitive primitive) throws JsonParseException { + if (primitive.isString()) + { + return new StringValue(primitive.getAsString()); + } + else if (primitive.isBoolean()) + { + return primitive.getAsBoolean() ? Value.TRUE : Value.FALSE; + } + else if (primitive.isNumber()) + { + return NumericValue.of(primitive.getAsNumber()); + } + return Value.NULL; + } }