Added ItemFlag support and patch error when loading ItemFlags from file.

This commit is contained in:
m10653
2016-08-18 16:36:47 -04:00
parent 9cffb99f4a
commit 4ba4f5da25
@@ -16,18 +16,24 @@
*/
package com.drtshock.playervaults.vaultmanagement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.bukkit.Bukkit;
import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.ConfigurationSerialization;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import java.util.*;
import java.util.Map.Entry;
/**
* Fancy JSON serialization mostly by evilmidget38.
*
@@ -93,8 +99,7 @@ public class Serialization {
if (piece.equalsIgnoreCase("null")) {
contents.add(null);
} else {
ItemStack item = (ItemStack) deserialize(toMap((JSONObject) JSONValue.parse(piece)));
contents.add(item);
contents.add((ItemStack) deserialize(toMap((JSONObject) JSONValue.parse(piece))));
}
}
ItemStack[] items = new ItemStack[contents.size()];
@@ -142,16 +147,40 @@ public class Serialization {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Object deserialize(Map<String, Object> map) {
List<?> itemflags = null;
for (Entry<String, Object> entry : map.entrySet()) {
if (entry.getKey().equals("meta") && entry.getValue() instanceof Map) {
itemflags = (List<?>) ((Map) entry.getValue()).get("ItemFlags");
}
if (entry.getValue() instanceof Map) {
entry.setValue(deserialize((Map) entry.getValue()));
} else if (entry.getValue() instanceof Iterable) {
entry.setValue(convertIterable((Iterable) entry.getValue()));
List<?> templ = convertIterable((Iterable) entry.getValue());
if (entry.getKey().equalsIgnoreCase("itemflags")) {
map.remove(entry.getKey());
} else {
entry.setValue(templ);
}
} else if (entry.getValue() instanceof Number) {
entry.setValue(convertNumber((Number) entry.getValue()));
}
}
return map.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY) ? ConfigurationSerialization.deserializeObject(map) : map;
if (map.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) {
Object obj = ConfigurationSerialization.deserializeObject(map);
if (itemflags != null && obj instanceof ItemStack) {
ItemStack tempitem = (ItemStack) obj;
ItemMeta meta = tempitem.getItemMeta();
for (Object flag : itemflags) {
meta.addItemFlags(ItemFlag.valueOf(flag.toString()));
}
tempitem.setItemMeta(meta);
}
return obj;
} else {
return map;
}
}
private static List<?> convertIterable(Iterable<?> iterable) {