Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import com.recursive_pineapple.matter_manipulator.common.data.WeightedSpecList;
import com.recursive_pineapple.matter_manipulator.common.items.MMUpgrades;
import com.recursive_pineapple.matter_manipulator.common.items.manipulator.ItemMatterManipulator.ManipulatorTier;
import com.recursive_pineapple.matter_manipulator.common.persist.BitSetJsonAdapter;
import com.recursive_pineapple.matter_manipulator.common.persist.NBTJsonAdapter;
import com.recursive_pineapple.matter_manipulator.common.persist.StaticEnumJsonAdapter;
import com.recursive_pineapple.matter_manipulator.common.persist.UIDJsonAdapter;
Expand All @@ -78,6 +79,7 @@ public class MMState {
.registerTypeAdapter(NBTTagCompound.class, new NBTJsonAdapter())
.registerTypeAdapter(ForgeDirection.class, new StaticEnumJsonAdapter<>(ForgeDirection.class))
.registerTypeAdapter(WeightedSpecList.class, new WeightedListJsonAdapter())
.registerTypeAdapter(BitSet.class, new BitSetJsonAdapter())
.create();

@SerializedName("jv")
Expand All @@ -91,7 +93,7 @@ public class MMState {
public double charge;

public BitSet installedUpgrades = new BitSet();
public int upgradeProvidedCapabilities;
public transient int upgradeProvidedCapabilities;

public transient ItemMatterManipulator manipulator;

Expand Down Expand Up @@ -148,9 +150,20 @@ private static void migrateJson(JsonObject obj) {
config.remove("replaceWhitelist");
config.remove("replaceWith");
}

version = 1;
}

if (version == 1) {
// Load with the default encoder
BitSet bitSet = new Gson().fromJson(obj.get("installedUpgrades"), BitSet.class);

// Save with the new encoder
obj.add("installedUpgrades", GSON.toJsonTree(bitSet));

version = 2;
}

obj.addProperty("jv", version);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.recursive_pineapple.matter_manipulator.common.persist;

import java.lang.reflect.Type;
import java.util.Base64;
import java.util.BitSet;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class BitSetJsonAdapter implements JsonSerializer<BitSet>, JsonDeserializer<BitSet> {

@Override
public BitSet deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String str = context.deserialize(json, String.class);

byte[] data = Base64.getDecoder().decode(str);

return BitSet.valueOf(data);
}

@Override
public JsonElement serialize(BitSet src, Type typeOfSrc, JsonSerializationContext context) {
byte[] data = src.toByteArray();

String str = Base64.getEncoder().encodeToString(data);

return context.serialize(str);
}
}