|
| 1 | +package pw.chew.transmuteit; |
| 2 | + |
| 3 | +import org.bukkit.Bukkit; |
| 4 | +import org.bukkit.ChatColor; |
| 5 | +import org.bukkit.Material; |
| 6 | +import org.bukkit.entity.HumanEntity; |
| 7 | +import org.bukkit.entity.Player; |
| 8 | +import org.bukkit.event.EventHandler; |
| 9 | +import org.bukkit.event.Listener; |
| 10 | +import org.bukkit.event.inventory.ClickType; |
| 11 | +import org.bukkit.event.inventory.InventoryClickEvent; |
| 12 | +import org.bukkit.inventory.Inventory; |
| 13 | +import org.bukkit.inventory.InventoryHolder; |
| 14 | +import org.bukkit.inventory.ItemStack; |
| 15 | +import org.bukkit.inventory.PlayerInventory; |
| 16 | +import org.bukkit.inventory.meta.Damageable; |
| 17 | +import org.bukkit.inventory.meta.ItemMeta; |
| 18 | + |
| 19 | +import java.text.NumberFormat; |
| 20 | +import java.util.ArrayList; |
| 21 | +import java.util.Arrays; |
| 22 | +import java.util.List; |
| 23 | +import java.util.UUID; |
| 24 | + |
| 25 | +public class TransmuteTakeGUI implements InventoryHolder, Listener { |
| 26 | + private Inventory inv; |
| 27 | + |
| 28 | + public TransmuteTakeGUI() { |
| 29 | + inv = Bukkit.createInventory(this, 9, "Click Items to Transmute"); |
| 30 | + } |
| 31 | + |
| 32 | + @Override |
| 33 | + public Inventory getInventory() { |
| 34 | + return inv; |
| 35 | + } |
| 36 | + |
| 37 | + // You can call this whenever you want to put the items in |
| 38 | + public void initializeItems(UUID uuid, Player player) { |
| 39 | + for(int i=0; i < 9; i++) { |
| 40 | + inv.setItem(i, createGuiItem(Material.getMaterial("GRAY_STAINED_GLASS_PANE"), "")); |
| 41 | + } |
| 42 | + } |
| 43 | + |
| 44 | + // Nice little method to create a gui item with a custom name, and description |
| 45 | + private ItemStack createGuiItem(Material material, String name, String...lore) { |
| 46 | + ItemStack item = new ItemStack(material, 1); |
| 47 | + ItemMeta meta = item.getItemMeta(); |
| 48 | + meta.setDisplayName(ChatColor.RESET + name); |
| 49 | + |
| 50 | + ArrayList<String> metaLore = new ArrayList<String>(Arrays.asList(lore)); |
| 51 | + |
| 52 | + meta.setLore(metaLore); |
| 53 | + item.setItemMeta(meta); |
| 54 | + return item; |
| 55 | + } |
| 56 | + |
| 57 | + // You can open the inventory with this |
| 58 | + public void openInventory(Player p) { |
| 59 | + p.openInventory(inv); |
| 60 | + } |
| 61 | + |
| 62 | + // Check for clicks on items |
| 63 | + @EventHandler |
| 64 | + public void onInventoryClick(InventoryClickEvent e) { |
| 65 | + if (e.getInventory().getHolder().getClass() != this.getClass()) { |
| 66 | + return; |
| 67 | + } |
| 68 | + if (e.getClick().equals(ClickType.NUMBER_KEY)){ |
| 69 | + e.setCancelled(true); |
| 70 | + } |
| 71 | + e.setCancelled(true); |
| 72 | + |
| 73 | + Player player = (Player) e.getWhoClicked(); |
| 74 | + ItemStack clickedItem = e.getCurrentItem(); |
| 75 | + PlayerInventory inventory = player.getInventory(); |
| 76 | + |
| 77 | + // verify current item is not null |
| 78 | + if (clickedItem == null || clickedItem.getType() == Material.AIR) return; |
| 79 | + |
| 80 | + int selectedItem = e.getRawSlot(); |
| 81 | + if(selectedItem > 8) { |
| 82 | + if(selectedItem >= 36) { |
| 83 | + selectedItem -= 36; |
| 84 | + } |
| 85 | + ItemStack item = inventory.getItem(selectedItem); |
| 86 | + int amount = item.getAmount(); |
| 87 | + |
| 88 | + Material type = item.getType(); |
| 89 | + String name = type.toString(); |
| 90 | + // If it's nothing |
| 91 | + // If it's something |
| 92 | + try { |
| 93 | + DataManager bob = new DataManager(); |
| 94 | + int emc = TransmuteIt.json.getInt(type.toString()); |
| 95 | + int currentDurability = 0; |
| 96 | + ItemMeta meta = item.getItemMeta(); |
| 97 | + Damageable damage; |
| 98 | + if(meta instanceof Damageable) { |
| 99 | + damage = ((Damageable) meta); |
| 100 | + currentDurability = damage.getDamage(); |
| 101 | + } |
| 102 | + short maxDurability = type.getMaxDurability(); |
| 103 | + if(currentDurability > maxDurability) { |
| 104 | + currentDurability = maxDurability; |
| 105 | + } |
| 106 | + if(maxDurability > 0) { |
| 107 | + emc = (int)((double)emc * (((double)maxDurability-(double)currentDurability)/(double)maxDurability)); |
| 108 | + } |
| 109 | + item.setAmount(0); |
| 110 | + UUID uuid = player.getUniqueId(); |
| 111 | + int current = new DataManager().getEMC(uuid, player); |
| 112 | + int newEMC = current + (amount * emc); |
| 113 | + bob.writeEMC(uuid, newEMC, player); |
| 114 | + player.sendMessage(ChatColor.COLOR_CHAR + "d--------[ " + ChatColor.COLOR_CHAR + "bTransmuting Stats" + ChatColor.COLOR_CHAR + "d ]--------"); |
| 115 | + if(!bob.discovered(uuid, name)) { |
| 116 | + player.sendMessage(ChatColor.COLOR_CHAR + "aYou've discovered " + name + "!"); |
| 117 | + if(bob.discoveries(uuid).size() == 0) { |
| 118 | + player.sendMessage(ChatColor.ITALIC + "" + ChatColor.COLOR_CHAR + "7Now you can run /transmute get " + name + " [amount] to get this item, given you have enough EMC!"); |
| 119 | + } |
| 120 | + new DataManager().writeDiscovery(uuid, name); |
| 121 | + } |
| 122 | + player.sendMessage(ChatColor.GREEN + "+ " + NumberFormat.getInstance().format(amount * emc) + " EMC [Total: " + NumberFormat.getInstance().format(newEMC) + " EMC]"); |
| 123 | + player.sendMessage(ChatColor.RED + "- " + amount + " " + new DiscoveriesGUI().capitalize(name)); |
| 124 | + return; |
| 125 | + // If there's no JSON file or it's not IN the JSON file |
| 126 | + } catch(org.json.JSONException f) { |
| 127 | + player.sendMessage("This item has no set EMC value!"); |
| 128 | + } |
| 129 | + } |
| 130 | + |
| 131 | + } |
| 132 | +} |
0 commit comments