From 01d91c0acd0e8b494578d63683088e6f1d67509f Mon Sep 17 00:00:00 2001 From: kuba6000 Date: Thu, 18 Aug 2022 00:12:14 +0200 Subject: Cache Mob Handler map --- src/main/java/kubatech/api/utils/GSONUtils.java | 70 +++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/main/java/kubatech/api/utils/GSONUtils.java (limited to 'src/main/java/kubatech/api/utils/GSONUtils.java') diff --git a/src/main/java/kubatech/api/utils/GSONUtils.java b/src/main/java/kubatech/api/utils/GSONUtils.java new file mode 100644 index 0000000000..1c0e7ec3f4 --- /dev/null +++ b/src/main/java/kubatech/api/utils/GSONUtils.java @@ -0,0 +1,70 @@ +package kubatech.api.utils; + +import com.google.gson.*; +import java.io.IOException; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Type; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.nbt.NBTTagCompound; + +public class GSONUtils { + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.FIELD) + public @interface SkipGSON {} + + private static final ExclusionStrategy GSONStrategy = new ExclusionStrategy() { + @Override + public boolean shouldSkipField(FieldAttributes f) { + return f.getAnnotation(SkipGSON.class) != null; + } + + @Override + public boolean shouldSkipClass(Class clazz) { + return false; + } + }; + + private static final JsonSerializer NBTTagCompoundSerializer = + new JsonSerializer() { + + @Override + public JsonElement serialize(NBTTagCompound src, Type typeOfSrc, JsonSerializationContext context) { + try { + JsonArray array = new JsonArray(); + for (byte b : CompressedStreamTools.compress(src)) { + array.add(new JsonPrimitive(b)); + } + return array; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }; + + private static final JsonDeserializer NBTTagCompoundDeserializer = + new JsonDeserializer() { + @Override + public NBTTagCompound deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (!(json instanceof JsonArray)) return null; + byte[] bytes = new byte[((JsonArray) json).size()]; + for (int i = 0; i < bytes.length; i++) + bytes[i] = ((JsonArray) json).get(i).getAsByte(); + return CompressedStreamTools.func_152457_a(bytes, new NBTSizeTracker(2097152L)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }; + + public static final GsonBuilder GSON_BUILDER = new GsonBuilder() + .addSerializationExclusionStrategy(GSONStrategy) + .addDeserializationExclusionStrategy(GSONStrategy) + .registerTypeAdapter(NBTTagCompound.class, NBTTagCompoundDeserializer) + .registerTypeAdapter(NBTTagCompound.class, NBTTagCompoundSerializer); +} -- cgit