86 lines
2.5 KiB
Java
86 lines
2.5 KiB
Java
package cn.citycraft.TellRaw.manual;
|
|
|
|
import java.io.IOException;
|
|
import java.io.StringWriter;
|
|
import java.util.Map;
|
|
import java.util.logging.Level;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.enchantments.Enchantment;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
|
|
import cn.citycraft.GsonAgent.GsonAgent;
|
|
import cn.citycraft.GsonAgent.api.stream.JsonWriter;
|
|
import cn.citycraft.TellRaw.common.JsonRepresentedObject;
|
|
|
|
/**
|
|
* 序列化Item的类
|
|
*
|
|
* @since 2015年12月14日 下午1:30:51
|
|
* @author 许凯
|
|
*/
|
|
public class GItemStack implements JsonRepresentedObject {
|
|
private final ItemStack item;
|
|
private final String jsonString;
|
|
|
|
protected GItemStack(final ItemStack item) {
|
|
this.item = item.clone();
|
|
final StringWriter string = new StringWriter();
|
|
final JsonWriter json = GsonAgent.newJsonWriter(string);
|
|
try {
|
|
this.writeJson(json);
|
|
json.close();
|
|
} catch (final IOException e) {
|
|
throw new RuntimeException("invalid message:", e);
|
|
}
|
|
this.jsonString = string.toString();
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return this.jsonString;
|
|
}
|
|
|
|
@Override
|
|
public void writeJson(final JsonWriter json) throws IOException {
|
|
try {
|
|
json.beginObject();
|
|
json.nameWithoutQuotes("id").value(this.item.getTypeId());
|
|
json.nameWithoutQuotes("Damage").value(this.item.getDurability());
|
|
if (this.item.getAmount() > 1) {
|
|
json.nameWithoutQuotes("Count").value(this.item.getAmount());
|
|
}
|
|
if (this.item.hasItemMeta()) {
|
|
json.nameWithoutQuotes("tag").beginObject();
|
|
final ItemMeta im = item.getItemMeta();
|
|
if (im.hasEnchants()) {
|
|
json.nameWithoutQuotes("ench").beginArray();
|
|
for (final Map.Entry<Enchantment, Integer> ench : im.getEnchants().entrySet()) {
|
|
json.beginObject().nameWithoutQuotes("id").value(ench.getKey().getId()).nameWithoutQuotes("lvl").value(ench.getValue()).endObject();
|
|
}
|
|
json.endArray();
|
|
}
|
|
if (im.hasDisplayName() || im.hasLore()) {
|
|
json.nameWithoutQuotes("display").beginObject();
|
|
if (im.hasDisplayName()) {
|
|
json.nameWithoutQuotes("Name").value(im.getDisplayName());
|
|
}
|
|
if (im.hasLore()) {
|
|
json.nameWithoutQuotes("Lore").beginArray();
|
|
for (final String line : im.getLore()) {
|
|
json.value(line);
|
|
}
|
|
json.endArray();
|
|
}
|
|
json.endObject();
|
|
}
|
|
json.endObject();
|
|
}
|
|
json.endObject();
|
|
} catch (final IOException e) {
|
|
Bukkit.getLogger().log(Level.WARNING, "A problem occured during writing of JSON string", e);
|
|
}
|
|
}
|
|
}
|