diff options
Diffstat (limited to 'src/main/java/kubatech/api/utils')
-rw-r--r-- | src/main/java/kubatech/api/utils/GSONUtils.java | 70 | ||||
-rw-r--r-- | src/main/java/kubatech/api/utils/ModUtils.java | 29 |
2 files changed, 96 insertions, 3 deletions
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<NBTTagCompound> NBTTagCompoundSerializer = + new JsonSerializer<NBTTagCompound>() { + + @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<NBTTagCompound> NBTTagCompoundDeserializer = + new JsonDeserializer<NBTTagCompound>() { + @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); +} diff --git a/src/main/java/kubatech/api/utils/ModUtils.java b/src/main/java/kubatech/api/utils/ModUtils.java index 0f598dcfa8..447796ddbf 100644 --- a/src/main/java/kubatech/api/utils/ModUtils.java +++ b/src/main/java/kubatech/api/utils/ModUtils.java @@ -20,9 +20,11 @@ package kubatech.api.utils; import cpw.mods.fml.common.Loader; -import java.util.AbstractMap; -import java.util.HashMap; -import java.util.Map; +import cpw.mods.fml.common.ModContainer; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.util.*; +import javax.xml.bind.DatatypeConverter; import net.minecraft.launchwrapper.Launch; public class ModUtils { @@ -47,4 +49,25 @@ public class ModUtils { .orElse(emptyEntry) .getValue(); } + + private static String modListVersion = null; + + public static String getModListVersion() { + if (modListVersion != null) return modListVersion; + ArrayList<ModContainer> modlist = (ArrayList<ModContainer>) + ((ArrayList<ModContainer>) Loader.instance().getActiveModList()).clone(); + String sortedList = modlist.stream() + .filter(m -> m.getMod() != null) + .sorted(Comparator.comparing(ModContainer::getModId)) + .collect(String::new, (a, b) -> a += b.getModId() + b.getVersion(), (a, b) -> a += ", " + b); + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + modListVersion = DatatypeConverter.printHexBinary(md.digest(sortedList.getBytes(StandardCharsets.UTF_8))) + .toUpperCase(); + return modListVersion; + } catch (Exception e) { + modListVersion = sortedList; + return sortedList; + } + } } |