Skip to content

Commit 2ec3928

Browse files
Merge pull request #126 from RecursivePineapple/fix-item-link-crash
Fix crash when linking upgraded MM
2 parents f6a86d9 + 7394dfe commit 2ec3928

2 files changed

Lines changed: 47 additions & 1 deletion

File tree

src/main/java/com/recursive_pineapple/matter_manipulator/common/items/manipulator/MMState.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import com.recursive_pineapple.matter_manipulator.common.data.WeightedSpecList;
5757
import com.recursive_pineapple.matter_manipulator.common.items.MMUpgrades;
5858
import com.recursive_pineapple.matter_manipulator.common.items.manipulator.ItemMatterManipulator.ManipulatorTier;
59+
import com.recursive_pineapple.matter_manipulator.common.persist.BitSetJsonAdapter;
5960
import com.recursive_pineapple.matter_manipulator.common.persist.NBTJsonAdapter;
6061
import com.recursive_pineapple.matter_manipulator.common.persist.StaticEnumJsonAdapter;
6162
import com.recursive_pineapple.matter_manipulator.common.persist.UIDJsonAdapter;
@@ -78,6 +79,7 @@ public class MMState {
7879
.registerTypeAdapter(NBTTagCompound.class, new NBTJsonAdapter())
7980
.registerTypeAdapter(ForgeDirection.class, new StaticEnumJsonAdapter<>(ForgeDirection.class))
8081
.registerTypeAdapter(WeightedSpecList.class, new WeightedListJsonAdapter())
82+
.registerTypeAdapter(BitSet.class, new BitSetJsonAdapter())
8183
.create();
8284

8385
@SerializedName("jv")
@@ -91,7 +93,7 @@ public class MMState {
9193
public double charge;
9294

9395
public BitSet installedUpgrades = new BitSet();
94-
public int upgradeProvidedCapabilities;
96+
public transient int upgradeProvidedCapabilities;
9597

9698
public transient ItemMatterManipulator manipulator;
9799

@@ -148,9 +150,20 @@ private static void migrateJson(JsonObject obj) {
148150
config.remove("replaceWhitelist");
149151
config.remove("replaceWith");
150152
}
153+
151154
version = 1;
152155
}
153156

157+
if (version == 1) {
158+
// Load with the default encoder
159+
BitSet bitSet = new Gson().fromJson(obj.get("installedUpgrades"), BitSet.class);
160+
161+
// Save with the new encoder
162+
obj.add("installedUpgrades", GSON.toJsonTree(bitSet));
163+
164+
version = 2;
165+
}
166+
154167
obj.addProperty("jv", version);
155168
}
156169

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.recursive_pineapple.matter_manipulator.common.persist;
2+
3+
import java.lang.reflect.Type;
4+
import java.util.Base64;
5+
import java.util.BitSet;
6+
7+
import com.google.gson.JsonDeserializationContext;
8+
import com.google.gson.JsonDeserializer;
9+
import com.google.gson.JsonElement;
10+
import com.google.gson.JsonParseException;
11+
import com.google.gson.JsonSerializationContext;
12+
import com.google.gson.JsonSerializer;
13+
14+
public class BitSetJsonAdapter implements JsonSerializer<BitSet>, JsonDeserializer<BitSet> {
15+
16+
@Override
17+
public BitSet deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
18+
String str = context.deserialize(json, String.class);
19+
20+
byte[] data = Base64.getDecoder().decode(str);
21+
22+
return BitSet.valueOf(data);
23+
}
24+
25+
@Override
26+
public JsonElement serialize(BitSet src, Type typeOfSrc, JsonSerializationContext context) {
27+
byte[] data = src.toByteArray();
28+
29+
String str = Base64.getEncoder().encodeToString(data);
30+
31+
return context.serialize(str);
32+
}
33+
}

0 commit comments

Comments
 (0)