/*******************************************************************************
* Copyright (C) 2014 Travis Ralston (turt2live)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package com.turt2live.antishare.bukkit.dev.check;
import com.turt2live.antishare.bukkit.dev.AntiShare;
import com.turt2live.antishare.bukkit.dev.CheckBase;
import com.turt2live.antishare.collections.ArrayArrayList;
import com.turt2live.antishare.lib.items.AbstractedItem;
import com.turt2live.antishare.lib.items.bukkit.BukkitAbstractItem;
import com.turt2live.antishare.lib.items.serialization.ItemDeserializer;
import com.turt2live.antishare.lib.minidev.json.JSONObject;
import com.turt2live.antishare.lib.minidev.json.JSONValue;
import org.bukkit.*;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import java.util.Map;
public class ItemStackTest2 extends CheckBase {
private Player player;
public ItemStackTest2(AntiShare plugin, Player player) {
super(plugin);
this.player = player;
}
@Override
public void begin() {
// Item setup
Bukkit.broadcastMessage(ChatColor.AQUA + "Item setup");
ItemStack basic = new ItemStack(Material.DIRT);
ItemStack enchanted = new ItemStack(Material.DIAMOND_SWORD);
ItemStack lore = new ItemStack(Material.WOOD);
ItemStack firework = new ItemStack(Material.FIREWORK);
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
ItemStack wat = new ItemStack(Material.LEATHER_CHESTPLATE);
// Setup item meta for various items
Bukkit.broadcastMessage(ChatColor.AQUA + "Setting item meta");
enchanted.addEnchantment(Enchantment.DAMAGE_ALL, 2);
ItemMeta meta = lore.getItemMeta();
meta.setLore(new ArrayArrayList<>(ChatColor.GOLD + "Colored lore", ChatColor.YELLOW + "is cool"));
meta.setDisplayName(ChatColor.LIGHT_PURPLE + "{\"break\":\"things\"}");
lore.setItemMeta(meta);
meta = firework.getItemMeta();
FireworkMeta effect = (FireworkMeta) meta;
effect.addEffect(FireworkEffect.builder().with(FireworkEffect.Type.CREEPER).withColor(Color.AQUA).flicker(true).build());
firework.setItemMeta(effect);
meta = book.getItemMeta();
BookMeta pages = (BookMeta) meta;
pages.addPage("This", "is", "a", "Page");
pages.addPage("[1,2,3,4]");
pages.setAuthor("{\"worst\":\"author\"}");
pages.setTitle("ima book");
book.setItemMeta(pages);
meta = wat.getItemMeta();
LeatherArmorMeta armor = (LeatherArmorMeta) meta;
for (Enchantment enchant : Enchantment.values()) {
wat.addUnsafeEnchantment(enchant, 1);
}
wat.setDurability((short) 12);
armor.setColor(Color.fromRGB(12, 60, 34));
meta.setDisplayName(ChatColor.RED + "stuff");
wat.setItemMeta(meta);
// Give items to player
player.getInventory().clear();
player.getInventory().addItem(basic, enchanted, lore, firework, book, wat);
Bukkit.broadcastMessage(ChatColor.AQUA + "Serializing");
// Serialize to JSON
ItemStack[] stacks = new ItemStack[] {basic, enchanted, lore, firework, book, wat};
String[] jsons = new String[stacks.length];
int n = 0;
for (ItemStack stack : stacks) {
Map<String, Object> fullySerialized = serialize(stack);
String json = new JSONObject(fullySerialized).toJSONString();
jsons[n] = json;
n++;
}
Bukkit.broadcastMessage(ChatColor.AQUA + "Deserializing");
// Deserialize from JSON
for (String json : jsons) {
Map<String, Object> parsed = ((JSONObject) JSONValue.parse(json));
ItemStack thing = deserialize(parsed);
if (thing != null) player.getInventory().addItem(thing);
else {
Bukkit.broadcastMessage(ChatColor.RED + "JSON returned null result: " + json);
}
}
Bukkit.broadcastMessage(ChatColor.GREEN + "Done!");
}
private ItemStack deserialize(Map<String, Object> map) {
try {
AbstractedItem item = ItemDeserializer.deserialize(map);
if (item instanceof BukkitAbstractItem) {
return ((BukkitAbstractItem) item).getItemStack();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Map<String, Object> serialize(ItemStack item) {
AbstractedItem abstracted = new BukkitAbstractItem(item);
try {
return abstracted.serialize();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}