mrkirby153

Untitled

Dec 23rd, 2013
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.53 KB | None | 0 0
  1. package me.mrkirby153.plugins.theplague.arena.classes;
  2.  
  3. import me.mrkirby153.plugins.theplague.ThePlague;
  4. import me.mrkirby153.plugins.theplague.arena.Arena;
  5. import me.mrkirby153.plugins.theplague.utils.ChatHelper;
  6. import org.apache.commons.lang.WordUtils;
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.ChatColor;
  9. import org.bukkit.Material;
  10. import org.bukkit.configuration.file.YamlConfiguration;
  11. import org.bukkit.enchantments.Enchantment;
  12. import org.bukkit.entity.Player;
  13. import org.bukkit.inventory.Inventory;
  14. import org.bukkit.inventory.ItemStack;
  15. import org.bukkit.inventory.PlayerInventory;
  16.  
  17. import java.util.ArrayList;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21.  
  22. public class Classes {
  23.     private static ThePlague plugin = ThePlague.instance();
  24.     private static YamlConfiguration config = ThePlague.config.getClassesConfig();
  25.     private static YamlConfiguration arena = ThePlague.config.getArenaConfig();
  26.     private static HashMap<String, String> chosenClass = new HashMap<String, String>();
  27.  
  28.     public static void addClass(String className, Player player) {
  29.         savePlayerInventoryToFile(className.toLowerCase(), player);
  30.     }
  31.  
  32.     public static void removeClass(String className) {
  33.         config.set("classes." + className, null);
  34.     }
  35.  
  36.     public static void serverStart() {
  37.         // Not implemented yet!
  38.     }
  39.  
  40.     private static void save() {
  41.         ThePlague.config.saveClassesConfig();
  42.     }
  43.  
  44.     @SuppressWarnings("deprecation")
  45.     private static void loadClass(String className, Player player) {
  46.         if (!classExists(className)) {
  47.             ChatHelper.sendToPlayer(player, ChatColor.RED + "Class " + className + " does not appear to exist!");
  48.             return;
  49.         }
  50.         // Check for permission
  51.         if (!checkClassPermission(player, className)) {
  52.             ChatHelper.sendToPlayer(player, ChatColor.RED + "You do not have permission to use " + className + " class!");
  53.             return;
  54.         }
  55.         Inventory classInventory = loadClassFromFile(className);
  56.         player.getInventory().setContents(classInventory.getContents());
  57.         player.getInventory().setArmorContents(loadArmourFromFile(className));
  58.         player.updateInventory();
  59.         className = WordUtils.capitalizeFully(className.replace("_", " "));
  60.         ChatHelper.sendToPlayer(player, ChatColor.GREEN + "Here are your items for " + ChatColor.GOLD + className
  61.                 + ChatColor.GREEN + "!");
  62.     }
  63.  
  64.     public static boolean classExists(String className) {
  65.         return (config.getConfigurationSection("classes." + className) != null);
  66.     }
  67.  
  68.     private static void savePlayerInventoryToFile(String className, Player player, boolean donator) {
  69.         PlayerInventory inventory = player.getInventory();
  70.         String path = "classes." + className;
  71.         // Reset the class loadout
  72.         config.set(path, null);
  73.         int itemNumber = 1;
  74.         config.set(path + ".donator", donator);
  75.         for (ItemStack item : inventory.getContents()) {
  76.             if (item == null) {
  77.                 itemNumber++;
  78.                 continue;
  79.             }
  80.             String subPath = path + "." + Integer.toString(itemNumber);
  81.             // Set material
  82.             config.set(subPath + ".material", item.getType().toString());
  83.             config.set(subPath + ".damage", item.getDurability());
  84.             config.set(subPath + ".quantity", item.getAmount());
  85.             // Set encnahtments
  86.             saveEnch(subPath + ".enchantments", item);
  87.             itemNumber++;
  88.         }
  89.         // Save armour
  90.         String[] slot = {"boots", "leggings", "chestplate", "helmet"};
  91.         for (int i = 0; i < slot.length; i++) {
  92.             ItemStack item = player.getInventory().getArmorContents()[i];
  93.             String subPath = path + ".armour." + slot[i];
  94.             config.set(subPath + ".material", item.getType().toString());
  95.             config.set(subPath + ".damage", item.getDurability());
  96.             saveEnch(subPath + ".enchantments", item);
  97.         }
  98.         save();
  99.     }
  100.  
  101.     public static void saveCustomIcon(ItemStack icon, String className) {
  102.         if (!classExists(className)) return;
  103.         config.set("classes." + className + ".displayIcon", icon.getType().toString());
  104.         save();
  105.     }
  106.  
  107.     public static void clearCustomIcon(String className) {
  108.         config.set("classes." + className + ".displayIcon", null);
  109.         save();
  110.     }
  111.  
  112.     public static ItemStack getCustomIcon(String className) {
  113.         if (!classExists(className)) return null;
  114.         String material = config.getString("classes." + className + ".displayIcon");
  115.         if (Material.getMaterial(material) == null)
  116.             return new ItemStack(Material.IRON_SWORD);
  117.         else
  118.             return new ItemStack(Material.getMaterial(material));
  119.     }
  120.  
  121.     private static void saveEnch(String path, ItemStack item) {
  122.         Map<Enchantment, Integer> isEnch = item.getEnchantments();
  123.         ArrayList<String> enchs = new ArrayList<String>();
  124.         if (isEnch.size() > 0) {
  125.             for (Map.Entry<Enchantment, Integer> ench : isEnch.entrySet()) {
  126.                 enchs.add(ench.getKey().getName() + "," + ench.getValue());
  127.             }
  128.         }
  129.         config.set(path, enchs);
  130.     }
  131.  
  132.     public static void savePlayerInventoryToFile(String className, Player player) {
  133.         savePlayerInventoryToFile(className, player, false);
  134.     }
  135.  
  136.     private static Inventory loadClassFromFile(String className) {
  137.         Inventory classInventory;
  138.         if (!classExists(className))
  139.             return null;
  140.         classInventory = Bukkit.createInventory(null, 36);
  141.         for (String itemIndex : config.getConfigurationSection("classes." + className).getKeys(false)) {
  142.             /* Load the item's attributes from the configuration file */
  143.             if (itemIndex.contains("donator") || itemIndex.contains("armour") || itemIndex.contains("displayIcon"))
  144.                 continue;
  145.             // The configuration path
  146.             String path = "classes." + className + "." + itemIndex;
  147.             // The item's material
  148.             String material = config.getString(path + ".material");
  149.             // The item's metadata/damage
  150.             int damage = config.getInt(path + ".damage");
  151.             // The item's quanitiy
  152.             int quantity = config.getInt(path + ".quantity");
  153.             // The item's unparsed list of enchantments
  154.             List<String> unparsedEnchantments = config.getStringList(path + ".enchantments");
  155.  
  156.             /* Begin constructing the item */
  157.             if (Material.getMaterial(material) == null)
  158.                 continue; // Skip if the item's material is not a valid material
  159.             ItemStack item = new ItemStack(Material.getMaterial(material), quantity, (short) damage);
  160.  
  161.             // Adds enchantments (If any)
  162.             if (unparsedEnchantments.size() > 0) {
  163.                 for (String unparsed : unparsedEnchantments) {
  164.                     String parsed[] = unparsed.split(",");
  165.                     int enchantmentLevel;
  166.                     try {
  167.                         enchantmentLevel = Integer.parseInt(parsed[1]);
  168.                     } catch (NumberFormatException e) {
  169.                         continue;
  170.                     }
  171.                     if (enchantmentLevel > 0) {
  172.                         Enchantment enchantment = Enchantment.getByName(parsed[0]);
  173.                         item.addUnsafeEnchantment(enchantment, enchantmentLevel);
  174.                     }
  175.                 }
  176.             }
  177.             classInventory.setItem(Integer.valueOf(itemIndex) - 1, item);
  178.         }
  179.         return classInventory;
  180.     }
  181.  
  182.     private static ItemStack[] loadArmourFromFile(String className) {
  183.         ItemStack[] armourContents = new ItemStack[4];
  184.         int index = 0;
  185.         for (String configKey : config.getConfigurationSection("classes." + className + ".armour").getKeys(false)) {
  186.             // The configuration path
  187.             String path = "classes." + className + ".armour." + configKey;
  188.             // The item's material
  189.             String material = config.getString(path + ".material");
  190.             // The item's metadata/damage
  191.             int damage = config.getInt(path + ".damage");
  192.             // The item's quanitiy
  193.             int quantity = config.getInt(path + ".quantity");
  194.             // The item's unparsed list of enchantments
  195.             List<String> unparsedEnchantments = config.getStringList(path + ".enchantments");
  196.             /* Begin constructing the item */
  197.             if (Material.getMaterial(material) == null) {
  198.                 continue; // Skip if the item's material is not a valid material
  199.             }
  200.             ItemStack item = new ItemStack(Material.getMaterial(material), quantity, (short) damage);
  201.  
  202.             // Adds enchantments (If any)
  203.             if (unparsedEnchantments.size() > 0) {
  204.                 for (String unparsed : unparsedEnchantments) {
  205.                     String parsed[] = unparsed.split(",");
  206.                     int enchantmentLevel;
  207.                     try {
  208.                         enchantmentLevel = Integer.parseInt(parsed[1]);
  209.                     } catch (NumberFormatException e) {
  210.                         enchantmentLevel = 0;
  211.                     }
  212.                     if (enchantmentLevel > 0) {
  213.                         Enchantment enchantment = Enchantment.getByName(parsed[0]);
  214.                         item.addUnsafeEnchantment(enchantment, enchantmentLevel);
  215.                     }
  216.                 }
  217.             }
  218.             armourContents[index] = item;
  219.             index++;
  220.         }
  221.         return armourContents;
  222.     }
  223.  
  224.     private static boolean checkPermission(Player player, String permission) {
  225.         return player.isOp() || player.hasPermission(permission);
  226.     }
  227.  
  228.     public static boolean checkClassPermission(Player player, String className) {
  229.         if (player.isOp())
  230.             return true;
  231.         return player.hasPermission("theplague.class.*") || player.hasPermission("theplague.class." + className);
  232.     }
  233.  
  234.     public static ArrayList<String> getAllClasses() {
  235.         ArrayList<String> classes = new ArrayList<String>();
  236.  
  237.         for (String className : config.getConfigurationSection("classes").getKeys(false)) {
  238.             classes.add(className);
  239.         }
  240.         return classes;
  241.     }
  242.  
  243.     public static void linkClassToArena(String className, String arenaName) {
  244.         if (!Arena.arenaExists(arenaName)) return;
  245.         List<String> currentClasses = arena.getStringList("arenas." + arenaName + ".classes");
  246.         if (currentClasses == null)
  247.             currentClasses = new ArrayList<String>();
  248.         currentClasses.add(className);
  249.         arena.set("arenas." + arenaName + ".classes", currentClasses);
  250.         ThePlague.config.saveArenaConfig();
  251.     }
  252.  
  253.     public static void unlinkClassToArena(String className, String arenaName) {
  254.         if (!Arena.arenaExists(arenaName)) return;
  255.         List<String> currentClasses = config.getStringList("arenas." + arenaName + ".classes");
  256.         if (currentClasses == null)
  257.             currentClasses = new ArrayList<String>();
  258.         currentClasses.remove(className);
  259.         arena.set("arenas." + arenaName + ".classes", currentClasses);
  260.         ThePlague.config.saveArenaConfig();
  261.     }
  262.  
  263.     public static void linkAllClasses(String arenaName) {
  264.         if (!Arena.arenaExists(arenaName)) return;
  265.         arena.set("arenas." + arenaName + ".classes", Classes.getAllClasses());
  266.         ThePlague.config.saveArenaConfig();
  267.     }
  268.  
  269.     public static void unlinkAllClasses(String arenaName) {
  270.         if (!Arena.arenaExists(arenaName)) return;
  271.         arena.set("arenas." + arenaName + ".classes", new ArrayList<String>());
  272.         ThePlague.config.saveArenaConfig();
  273.     }
  274.  
  275.     public static void chooseClass(Player player, String className) {
  276.         if (!Arena.inArena(player)) {
  277.             ChatHelper.sendToPlayer(player, ChatColor.RED + "You are not in an arena, Please join an arena first!");
  278.             return;
  279.         }
  280.         className = className.replace(" ", "_");
  281.         chosenClass.put(player.getName(), className);
  282.         className = className.replace("_", " ");
  283.         className = WordUtils.capitalizeFully(className);
  284.         ChatHelper.sendToPlayer(player, ChatColor.GREEN + "You have chosen " + ChatColor.GOLD + className
  285.                 + ChatColor.GREEN + "! Your items will be given to you after the game starts.");
  286.     }
  287.  
  288.     public static void removeClass(Player player) {
  289.         chosenClass.remove(player.getName());
  290.     }
  291.  
  292.     public static void setDefaultClass(String defaultClass, String arenaName) {
  293.         if (!Arena.arenaExists(arenaName)) return;
  294.         arena.set("arenas." + arenaName + ".defaultClass", defaultClass);
  295.         ThePlague.config.saveArenaConfig();
  296.         Arena.refreshArenaState(arenaName);
  297.     }
  298.  
  299.     public static String getDefaultClass(String arenaName) {
  300.         if (!Arena.arenaExists(arenaName)) return null;
  301.         String className = arena.getString("arenas." + arenaName + ".defaultClass");
  302.         if (!classExists(className)) {
  303.             return null;
  304.         }
  305.         return className;
  306.     }
  307.  
  308.     public static void loadGame(String arenaName) {
  309.         if (!Arena.arenaExists(arenaName)) return;
  310.         for (String playerName : Arena.getArenaPlayers(arenaName)) {
  311.             Player player = Bukkit.getPlayerExact(playerName);
  312.             if (!chosenClass.containsKey(player.getName())) {
  313.                 loadClass(getDefaultClass(arenaName), player);
  314.                 continue;
  315.             }
  316.             String className =  chosenClass.remove(playerName);
  317.             loadClass(className, player);
  318.         }
  319.     }
  320.  
  321.     public static String getClass(String playerName) {
  322.         if (chosenClass.get(playerName) == null) {
  323.             return getDefaultClass(Arena.getCurrentArena(Bukkit.getPlayerExact(playerName)));
  324.         }
  325.         return chosenClass.get(playerName);
  326.     }
  327.  
  328.     public static void setDonator(String className, boolean donator) {
  329.         config.set("classes." + className + ".donator", donator);
  330.         save();
  331.     }
  332.  
  333.     public static boolean isDonator(String className) {
  334.         return config.getBoolean("classes." + className + ".donator");
  335.     }
  336.  
  337.     public static ArrayList<String> getLinkedClasses(String arenaName) {
  338.         ArrayList<String> lc = new ArrayList<String>();
  339.         for (String className : arena.getStringList("arenas." + arenaName + ".classes")) {
  340.             lc.add(className);
  341.         }
  342.         return lc;
  343.     }
  344. }
Advertisement
Add Comment
Please, Sign In to add comment