Skip to content

Commit

Permalink
fix: correctly (de)serialise ItemType (#2620)
Browse files Browse the repository at this point in the history
- InternalId changes depending on ~~magic~~ so we should not store this value
 - fixes #2589
  • Loading branch information
dordsor21 committed Mar 15, 2024
1 parent df9527b commit 8363bad
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
Expand Up @@ -23,6 +23,8 @@
import com.google.gson.GsonBuilder;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;

/**
* Utility methods for Google's GSON library.
Expand All @@ -41,6 +43,7 @@ public static GsonBuilder createBuilder() {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Vector3.class, new VectorAdapter());
gsonBuilder.registerTypeAdapter(BlockVector3.class, new BlockVectorAdapter());
gsonBuilder.registerTypeAdapter(ItemType.class, new ItemTypeAdapter());
return gsonBuilder;
}

Expand Down
@@ -0,0 +1,26 @@
package com.sk89q.worldedit.util.gson;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;

import java.lang.reflect.Type;

public final class ItemTypeAdapter implements JsonDeserializer<ItemType> {

@Override
public ItemType deserialize(JsonElement json, Type type, JsonDeserializationContext cont) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
String id = jsonObject.get("id").getAsString();
ItemType itemType = ItemTypes.get(id);
if (itemType == null) {
throw new JsonParseException("Could not parse item type `" + id + "`");
}
return itemType;
}

}
Expand Up @@ -79,7 +79,7 @@ public String getId() {
}

//FAWE start
private int internalId;
private transient int internalId;

@Override
public void setInternalId(int internalId) {
Expand Down

0 comments on commit 8363bad

Please sign in to comment.