Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class CustomEnchantClickListener implements Listener {
- private Enchantments plugin;
- private Random random;
- private Map<Integer, ChatColor> tierColors;
- private Material bookMaterial;
- public CustomEnchantClickListener(Enchantments plugin) {
- this.plugin = plugin;
- this.random = new Random();
- this.bookMaterial = Material.valueOf(this.plugin.getConfig().getString("enchantBookItem").toUpperCase());
- this.tierColors = new HashMap<>();
- this.tierColors.put(1, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier1.loreColor").toUpperCase()));
- this.tierColors.put(2, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier2.loreColor").toUpperCase()));
- this.tierColors.put(3, ChatColor.valueOf(this.plugin.getConfig().getString("enchanter.tier3.loreColor").toUpperCase()));
- }
- @EventHandler
- public void onClick(InventoryClickEvent event) {
- if (event.getInventory() == null || event.getCurrentItem() == null || event.getCursor() == null) {
- return;
- }
- ItemStack cursorItem = event.getCursor();
- ItemStack clickedItem = event.getCurrentItem();
- if (cursorItem.getType() == this.bookMaterial) {
- net.minecraft.server.v1_8_R3.ItemStack nmsCursor = CraftItemStack.asNMSCopy(cursorItem);
- NBTTagCompound tag = getOrCreateTag(nmsCursor);
- if (tag.hasKey("enchant")) {
- if (tag.hasKey("success")) {
- JEnchant enchant = plugin.getEnchants().stream().filter(it -> it.getName().equalsIgnoreCase(tag.getString("enchant"))).findFirst().get();
- if (enchant.canEnchantItem(clickedItem)) {
- if (this.random.nextInt(100) <= tag.getInt("success")) {
- ItemMeta meta = clickedItem.getItemMeta();
- if (meta.getLore() == null) {
- meta.setLore(new ArrayList<>());
- }
- String name = enchant.getName();
- char isNumber = name.charAt(name.length() - 1);
- int possibleNumber = 0;
- if (isNumber >= '0' && isNumber <= '9') {
- possibleNumber = isNumber - '0';
- }
- if (possibleNumber != 0) {
- List<String> lore = meta.getLore();
- lore.add(this.tierColors.get(enchant.getTier()) + name.substring(0, name.length() - 1) + " " + RomanNumber.toRoman(possibleNumber));
- meta.setLore(lore);
- } else {
- List<String> lore = meta.getLore();
- lore.add(this.tierColors.get(enchant.getTier()) + name + " " + RomanNumber.toRoman(1));
- meta.setLore(lore);
- }
- clickedItem.setItemMeta(meta);
- clickedItem.addEnchantment(enchant, (possibleNumber != 0) ? possibleNumber : 1);
- net.minecraft.server.v1_8_R3.ItemStack nmsCopy = CraftItemStack.asNMSCopy(clickedItem);
- NBTTagCompound copyTag = getOrCreateTag(nmsCopy);
- if (copyTag.hasKey("enchants")) {
- int[] enchants = copyTag.getIntArray("enchants");
- List<JEnchant> listOfEnchantsOnThisItem = new ArrayList<>();
- for (int j : enchants) {
- Enchantment enchantToCheck = Enchantment.getById(j);
- if (enchantToCheck instanceof JEnchant) {
- listOfEnchantsOnThisItem.add((JEnchant) enchantToCheck);
- }
- }
- if (listOfEnchantsOnThisItem.stream().noneMatch(it -> it.getEnchantName().equals(enchant.getEnchantName()))) {
- int[] enchantsCopy = Arrays.copyOf(enchants, enchants.length+1);
- enchantsCopy[enchantsCopy.length-1] = enchant.getId();
- copyTag.setIntArray("enchants", enchantsCopy);
- } else {
- return;
- }
- } else {
- copyTag.setIntArray("enchants", new int[] { enchant.getId() });
- }
- ItemStack itemToAdd = CraftItemStack.asBukkitCopy(nmsCopy);
- event.getCursor().setType(Material.AIR);
- Bukkit.getScheduler().runTask(plugin, () -> {
- event.getCursor().setType(Material.AIR);
- event.getInventory().addItem(itemToAdd);
- ((Player)event.getWhoClicked()).updateInventory();
- });
- } else {
- event.getCursor().setType(Material.AIR);
- }
- }
- }
- }
- }
- }
- private NBTTagCompound getOrCreateTag(net.minecraft.server.v1_8_R3.ItemStack item) {
- if (item.getTag() == null) {
- item.setTag(new NBTTagCompound());
- }
- return item.getTag();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement