From e759a368b99648e1a0c7dd5093cae03d4580dc1e Mon Sep 17 00:00:00 2001 From: gnembon Date: Fri, 21 Aug 2020 01:44:19 -0300 Subject: [PATCH] Can has json version of a scarpet value --- .../java/carpet/script/value/ListValue.java | 11 +++++++++ .../java/carpet/script/value/MapValue.java | 10 ++++++++ .../java/carpet/script/value/NullValue.java | 8 +++++++ .../carpet/script/value/NumericValue.java | 24 ++++++++++++++++--- src/main/java/carpet/script/value/Value.java | 7 ++++++ 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/main/java/carpet/script/value/ListValue.java b/src/main/java/carpet/script/value/ListValue.java index 7409e9de..b12bb008 100644 --- a/src/main/java/carpet/script/value/ListValue.java +++ b/src/main/java/carpet/script/value/ListValue.java @@ -2,6 +2,8 @@ package carpet.script.value; import carpet.script.LazyValue; import carpet.script.exception.InternalExpressionException; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import net.minecraft.item.ItemStack; import net.minecraft.nbt.AbstractNumberTag; import net.minecraft.nbt.CompoundTag; @@ -525,4 +527,13 @@ public class ListValue extends AbstractListValue implements ContainerValueInterf } return tag; } + + @Override + public JsonElement toJson() + { + JsonArray array = new JsonArray(); + for (Value el: items) + array.add(el.toJson()); + return array; + } } diff --git a/src/main/java/carpet/script/value/MapValue.java b/src/main/java/carpet/script/value/MapValue.java index 9787304c..2cb3da44 100644 --- a/src/main/java/carpet/script/value/MapValue.java +++ b/src/main/java/carpet/script/value/MapValue.java @@ -1,6 +1,8 @@ package carpet.script.value; import carpet.script.exception.InternalExpressionException; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -256,4 +258,12 @@ public class MapValue extends AbstractListValue implements ContainerValueInterfa }); return tag; } + + @Override + public JsonElement toJson() + { + JsonObject jsonMap = new JsonObject(); + map.forEach((k, v) -> jsonMap.add(k.getString(), v.toJson())); + return jsonMap; + } } diff --git a/src/main/java/carpet/script/value/NullValue.java b/src/main/java/carpet/script/value/NullValue.java index 18ffcec1..eb0897cd 100644 --- a/src/main/java/carpet/script/value/NullValue.java +++ b/src/main/java/carpet/script/value/NullValue.java @@ -1,5 +1,7 @@ package carpet.script.value; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; import net.minecraft.nbt.StringTag; import net.minecraft.nbt.Tag; @@ -60,4 +62,10 @@ public class NullValue extends NumericValue // TODO check nonsingleton code if (!force) throw new NBTSerializableValue.IncompatibleTypeException(this); return StringTag.of("null"); } + + @Override + public JsonElement toJson() + { + return JsonNull.INSTANCE; + } } diff --git a/src/main/java/carpet/script/value/NumericValue.java b/src/main/java/carpet/script/value/NumericValue.java index b1c81eaf..61157dfe 100644 --- a/src/main/java/carpet/script/value/NumericValue.java +++ b/src/main/java/carpet/script/value/NumericValue.java @@ -1,6 +1,8 @@ package carpet.script.value; import carpet.script.exception.InternalExpressionException; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; import net.minecraft.nbt.DoubleTag; import net.minecraft.nbt.IntTag; import net.minecraft.nbt.LongTag; @@ -235,11 +237,11 @@ public class NumericValue extends Value { if (longValue != null) return LongTag.of(longValue); - long longValue = getLong(); - if (value == (double)longValue) + long lv = getLong(); + if (value == (double)lv) { if (abs(value) < Integer.MAX_VALUE-2) - return IntTag.of((int)longValue); + return IntTag.of((int)lv); return LongTag.of(getLong()); } else @@ -247,4 +249,20 @@ public class NumericValue extends Value return DoubleTag.of(value); } } + + @Override + public JsonElement toJson() + { + if (longValue != null) + return new JsonPrimitive(longValue); + long lv = getLong(); + if (value == (double)lv) + { + return new JsonPrimitive(getLong()); + } + else + { + return new JsonPrimitive(value); + } + } } diff --git a/src/main/java/carpet/script/value/Value.java b/src/main/java/carpet/script/value/Value.java index 94634bf0..e22b914c 100644 --- a/src/main/java/carpet/script/value/Value.java +++ b/src/main/java/carpet/script/value/Value.java @@ -1,6 +1,8 @@ package carpet.script.value; import carpet.script.exception.InternalExpressionException; +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; import net.minecraft.nbt.Tag; import java.util.regex.Matcher; @@ -206,4 +208,9 @@ public abstract class Value implements Comparable, Cloneable } public abstract Tag toTag(boolean force); + + public JsonElement toJson() + { + return new JsonPrimitive(getString()); + } }