Advertisement
Guest User

Untitled

a guest
Sep 6th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 5.63 KB | None | 0 0
  1. public class CustomEnchantClickListener implements Listener {
  2.  
  3.     private Enchantments plugin;
  4.     private Random random;
  5.     private Map<Integer, ChatColor> tierColors;
  6.     private Material bookMaterial;
  7.  
  8.  
  9.     public CustomEnchantClickListener(Enchantments plugin) {
  10.         this.plugin = plugin;
  11.         this.random = new Random();
  12.         this.bookMaterial = Material.valueOf(this.plugin.getConfig().getString("enchantBookItem").toUpperCase());
  13.         this.tierColors = new HashMap<>();
  14.         this.tierColors.put(1, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier1.loreColor").toUpperCase()));
  15.         this.tierColors.put(2, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier2.loreColor").toUpperCase()));
  16.         this.tierColors.put(3, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier3.loreColor").toUpperCase()));
  17.     }
  18.  
  19.     @EventHandler
  20.     public void onClick(InventoryClickEvent event) {
  21.         if (event.getInventory() == null || event.getCurrentItem() == null || event.getCursor() == null) {
  22.             return;
  23.         }
  24.  
  25.         ItemStack cursorItem = event.getCursor();
  26.         ItemStack clickedItem = event.getCurrentItem();
  27.  
  28.         if (cursorItem.getType() == this.bookMaterial) {
  29.             net.minecraft.server.v1_8_R3.ItemStack nmsCursor = CraftItemStack.asNMSCopy(cursorItem);
  30.             NBTTagCompound tag = getOrCreateTag(nmsCursor);
  31.  
  32.             if (tag.hasKey("enchant")) {
  33.                 if (tag.hasKey("success")) {
  34.                     JEnchant enchant = plugin.getEnchants().stream().filter(it -> it.getName().equalsIgnoreCase(tag.getString("enchant"))).findFirst().get();
  35.                     if (enchant.canEnchantItem(clickedItem)) {
  36.                         if (this.random.nextInt(100) <= tag.getInt("success")) {
  37.                             ItemMeta meta = clickedItem.getItemMeta();
  38.  
  39.                             if (meta.getLore() == null) {
  40.                                 meta.setLore(new ArrayList<>());
  41.                             }
  42.  
  43.                             String name = enchant.getName();
  44.                             char isNumber = name.charAt(name.length() - 1);
  45.                             int possibleNumber = 0;
  46.  
  47.                             if (isNumber >= '0' && isNumber <= '9') {
  48.                                 possibleNumber = isNumber - '0';
  49.                             }
  50.  
  51.                             if (possibleNumber != 0) {
  52.                                 List<String> lore = meta.getLore();
  53.                                 lore.add(this.tierColors.get(enchant.getTier()) + name.substring(0, name.length() - 1) + " " + RomanNumber.toRoman(possibleNumber));
  54.                                 meta.setLore(lore);
  55.                             } else {
  56.                                 List<String> lore = meta.getLore();
  57.                                 lore.add(this.tierColors.get(enchant.getTier()) + name + " " + RomanNumber.toRoman(1));
  58.                                 meta.setLore(lore);
  59.                             }
  60.  
  61.                             clickedItem.setItemMeta(meta);
  62.                             clickedItem.addEnchantment(enchant, (possibleNumber != 0) ? possibleNumber : 1);
  63.  
  64.                             net.minecraft.server.v1_8_R3.ItemStack nmsCopy = CraftItemStack.asNMSCopy(clickedItem);
  65.                             NBTTagCompound copyTag = getOrCreateTag(nmsCopy);
  66.  
  67.                             if (copyTag.hasKey("enchants")) {
  68.                                 int[] enchants = copyTag.getIntArray("enchants");
  69.                                 List<JEnchant> listOfEnchantsOnThisItem = new ArrayList<>();
  70.  
  71.                                 for (int j : enchants) {
  72.                                     Enchantment enchantToCheck = Enchantment.getById(j);
  73.                                     if (enchantToCheck instanceof JEnchant) {
  74.                                         listOfEnchantsOnThisItem.add((JEnchant) enchantToCheck);
  75.                                     }
  76.                                 }
  77.  
  78.                                 if (listOfEnchantsOnThisItem.stream().noneMatch(it -> it.getEnchantName().equals(enchant.getEnchantName()))) {
  79.                                     int[] enchantsCopy = Arrays.copyOf(enchants, enchants.length+1);
  80.                                     enchantsCopy[enchantsCopy.length-1] = enchant.getId();
  81.                                     copyTag.setIntArray("enchants", enchantsCopy);
  82.                                 } else {
  83.                                     return;
  84.                                 }
  85.  
  86.                             } else {
  87.                                 copyTag.setIntArray("enchants", new int[] { enchant.getId() });
  88.                             }
  89.  
  90.                             ItemStack itemToAdd = CraftItemStack.asBukkitCopy(nmsCopy);
  91.                             event.getCursor().setType(Material.AIR);
  92.  
  93.                             Bukkit.getScheduler().runTask(plugin, () -> {
  94.                                 event.getCursor().setType(Material.AIR);
  95.                                 event.getInventory().addItem(itemToAdd);
  96.                                 ((Player)event.getWhoClicked()).updateInventory();
  97.                             });
  98.                         } else {
  99.                             event.getCursor().setType(Material.AIR);
  100.                         }
  101.                     }
  102.                 }
  103.             }
  104.         }
  105.     }
  106.  
  107.     private NBTTagCompound getOrCreateTag(net.minecraft.server.v1_8_R3.ItemStack item) {
  108.         if (item.getTag() == null) {
  109.             item.setTag(new NBTTagCompound());
  110.         }
  111.  
  112.         return item.getTag();
  113.     }
  114.  
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement