From 0955df7503901d8a8c6bd9d7a2c3c94c7003fe46 Mon Sep 17 00:00:00 2001 From: cmastudios Date: Fri, 22 Mar 2013 21:59:03 -0500 Subject: [PATCH] Added new classes to manage loadouts instead of the hashmap method. --- .../com/tommytony/war/utility/Loadout.java | 198 ++++++++++++++++++ .../war/utility/LoadoutSelection.java | 4 +- 2 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 war/src/main/java/com/tommytony/war/utility/Loadout.java diff --git a/war/src/main/java/com/tommytony/war/utility/Loadout.java b/war/src/main/java/com/tommytony/war/utility/Loadout.java new file mode 100644 index 0000000..abbd5d7 --- /dev/null +++ b/war/src/main/java/com/tommytony/war/utility/Loadout.java @@ -0,0 +1,198 @@ +package com.tommytony.war.utility; + +import com.tommytony.war.War; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.bukkit.Color; +import org.bukkit.configuration.serialization.ConfigurationSerializable; +import org.bukkit.configuration.serialization.ConfigurationSerialization; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.material.MaterialData; + +/** + * Represents a loadout of items + * + * @author cmastudios + */ +public class Loadout implements Comparable, ConfigurationSerializable { + + private String name; + private HashMap contents; + private String permission; + + public Loadout(String name, HashMap contents, String permission) { + this.name = name; + this.contents = contents; + this.permission = permission; + } + + static { + ConfigurationSerialization.registerClass(Loadout.class); + } + + public int compareTo(Object o) { + if (!(o instanceof Loadout)) { + throw new ClassCastException(this.getClass().getCanonicalName() + + " is not comparable to a " + o.getClass().getCanonicalName()); + } + Loadout ldt = (Loadout) o; + if ("default".equals(ldt.getName()) && !"default".equals(this.getName())) { + return -1; + } else if ("default".equals(this.getName()) && !"default".equals(ldt.getName())) { + return 1; + } else { + return 0; + } + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public HashMap getContents() { + return contents; + } + + public void setContents(HashMap contents) { + this.contents = contents; + } + + public String getPermission() { + return permission; + } + + public void setPermission(String permission) { + this.permission = permission; + } + + public boolean requiresPermission() { + return permission != null && !permission.isEmpty(); + } + + private List toIntList(Set keySet) { + List list = new ArrayList(); + for (Integer key : keySet) { + list.add(key); + } + return list; + } + + public static HashMap> toLegacyFormat(List loadouts) { + HashMap> oldLoadouts = new HashMap(); + for (Loadout ldt : loadouts) { + oldLoadouts.put(ldt.getName(), ldt.getContents()); + } + return oldLoadouts; + } + + public static Loadout getLoadout(List loadouts, String name) { + for (Loadout ldt : loadouts) { + if (ldt.getName().equals(name)) { + return ldt; + } + } + return null; + } + + // For future use + public Map serialize() { + Map config = new HashMap(); + config.put("slots", this.toIntList(contents.keySet())); + for (Integer slot : contents.keySet()) { + Map slotConfig = new HashMap(); + ItemStack stack = contents.get(slot); + slotConfig.put("id", stack.getTypeId()); + slotConfig.put("data", stack.getData().getData()); + slotConfig.put("amount", stack.getAmount()); + slotConfig.put("durability", stack.getDurability()); + + if (stack.getEnchantments().keySet().size() > 0) { + List enchantmentStringList = new ArrayList(); + for (Enchantment enchantment : stack.getEnchantments().keySet()) { + int level = stack.getEnchantments().get(enchantment); + enchantmentStringList.add(enchantment.getId() + "," + level); + } + slotConfig.put("enchantments", enchantmentStringList); + } + if (stack.hasItemMeta() && stack.getItemMeta() instanceof LeatherArmorMeta + && ((LeatherArmorMeta) stack.getItemMeta()).getColor() != null) { + LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta(); + int rgb = meta.getColor().asRGB(); + slotConfig.put("armorcolor", rgb); + } + if (stack.hasItemMeta() && stack.getItemMeta().hasDisplayName()) { + ItemMeta meta = stack.getItemMeta(); + slotConfig.put("name", meta.getDisplayName()); + } + if (stack.hasItemMeta() && stack.getItemMeta().hasLore()) { + ItemMeta meta = stack.getItemMeta(); + slotConfig.put("lore", meta.getLore()); + } + config.put(slot.toString(), slotConfig); + } + config.put("permission", permission); + return config; + } + + public static Loadout deserialize(Map config) { + HashMap contents = new HashMap(); + List slots = (List) config.get("slots"); + for (Integer slot : slots) { + Map slotConfig = (Map) config.get(slot.toString()); + int id = (Integer) slotConfig.get("id"); + byte data = (Byte) slotConfig.get("data"); + int amount = (Integer) slotConfig.get("amount"); + short durability = (Short) slotConfig.get("durability"); + + ItemStack stack = new ItemStack(id, amount, durability); + stack.setData(new MaterialData(id, data)); + + if (slotConfig.containsKey("enchantments")) { + List enchantmentStringList = (List) slotConfig.get("enchantments"); + for (String enchantmentString : enchantmentStringList) { + String[] enchantmentStringSplit = enchantmentString.split(","); + if (enchantmentStringSplit.length == 2) { + int enchantId = Integer.parseInt(enchantmentStringSplit[0]); + int level = Integer.parseInt(enchantmentStringSplit[1]); + War.war.safelyEnchant(stack, Enchantment.getById(enchantId), level); + } + } + } + if (slotConfig.containsKey("armorcolor")) { + int rgb = (Integer) slotConfig.get("armorcolor"); + Color clr = Color.fromRGB(rgb); + LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta(); + meta.setColor(clr); + stack.setItemMeta(meta); + } + if (slotConfig.containsKey("name")) { + String itemName = (String) slotConfig.get("name"); + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(itemName); + stack.setItemMeta(meta); + } + if (slotConfig.containsKey("lore")) { + List itemLore = (List) slotConfig.get("lore"); + ItemMeta meta = stack.getItemMeta(); + meta.setLore(itemLore); + stack.setItemMeta(meta); + } + contents.put(slot, stack); + } + String permission = ""; + if (config.containsKey("permission")) { + permission = (String) config.get("permission"); + } + return new Loadout(null, contents, permission); + } +} diff --git a/war/src/main/java/com/tommytony/war/utility/LoadoutSelection.java b/war/src/main/java/com/tommytony/war/utility/LoadoutSelection.java index 5ee133b..14d3235 100644 --- a/war/src/main/java/com/tommytony/war/utility/LoadoutSelection.java +++ b/war/src/main/java/com/tommytony/war/utility/LoadoutSelection.java @@ -6,8 +6,8 @@ public class LoadoutSelection { private int selectedIndex; public LoadoutSelection(boolean stillInSpawn, int selectedIndex) { - this.setStillInSpawn(stillInSpawn); - this.setSelectedIndex(selectedIndex); + this.stillInSpawn = stillInSpawn; + this.selectedIndex = selectedIndex; }