Correctly serialize and deserialize ItemMeta (Previously not working) #414
This commit is contained in:
parent
b2193ad021
commit
f130d55170
@ -3,7 +3,9 @@ package me.libraryaddict.disguise.utilities.json;
|
|||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -17,12 +19,36 @@ public class SerializerItemStack implements JsonSerializer<ItemStack>, JsonDeser
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) {
|
public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
return context.serialize(src.serialize());
|
Map<String, Object> partialSerialize = src.serialize();
|
||||||
|
|
||||||
|
if (partialSerialize.containsKey("meta")) {
|
||||||
|
partialSerialize.put("meta", src.getItemMeta().serialize());
|
||||||
|
}
|
||||||
|
|
||||||
|
return context.serialize(partialSerialize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack deserialize(JsonElement json, Type typeOfT,
|
public ItemStack deserialize(JsonElement json, Type typeOfT,
|
||||||
JsonDeserializationContext context) throws JsonParseException {
|
JsonDeserializationContext context) throws JsonParseException {
|
||||||
return ItemStack.deserialize(context.deserialize(json, HashMap.class));
|
HashMap map = context.deserialize(json, HashMap.class);
|
||||||
|
|
||||||
|
if (map.containsKey("meta")) {
|
||||||
|
Map meta = (Map) map.get("meta");
|
||||||
|
|
||||||
|
if (meta.containsKey("meta-type")) {
|
||||||
|
for (Object key : meta.keySet()) {
|
||||||
|
if (meta.get(key) instanceof Number) {
|
||||||
|
meta.put(key, ((Number) meta.get(key)).intValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemMeta itemMeta = ReflectionManager.getDeserializedItemMeta(meta);
|
||||||
|
|
||||||
|
map.put("meta", itemMeta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ItemStack.deserialize(map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils;
|
|||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -1158,4 +1159,18 @@ public class ReflectionManager {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemMeta getDeserializedItemMeta(Map<String, Object> meta) {
|
||||||
|
try {
|
||||||
|
Method method = getCraftMethod(getCraftClass("inventory.CraftMetaItem$SerializableMeta"), "deserialize",
|
||||||
|
Map.class);
|
||||||
|
|
||||||
|
return (ItemMeta) method.invoke(null, meta);
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user