Advertisement
Hellbinder

AmiriEnchantSourceCode

Jan 2nd, 2021
920
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.26 KB | None | 0 0
  1. package com.bawnorton.amirienchants;
  2.  
  3. import com.bawnorton.amirienchants.events.EventManager;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.plugin.java.JavaPlugin;
  6.  
  7. public class AmiriEnchants extends JavaPlugin {
  8.  
  9.     public static AmiriEnchants instance;
  10.  
  11.     @Override
  12.     public void onEnable() {
  13.         instance = this;
  14.         new EventManager(instance);
  15.         getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[AmiriEnchants] Enabled");
  16.     }
  17.  
  18.     @Override
  19.     public void onDisable() {
  20.         getServer().getConsoleSender().sendMessage(ChatColor.RED + "[AmiriEnchants] Disabled");
  21.     }
  22. }
  23.  
  24. package com.bawnorton.amirienchants.events;
  25.  
  26. import com.bawnorton.amirienchants.AmiriEnchants;
  27. import org.bukkit.Material;
  28. import org.bukkit.enchantments.Enchantment;
  29. import org.bukkit.entity.Player;
  30. import org.bukkit.event.EventHandler;
  31. import org.bukkit.event.Listener;
  32. import org.bukkit.event.inventory.InventoryClickEvent;
  33. import org.bukkit.event.inventory.PrepareAnvilEvent;
  34. import org.bukkit.inventory.AnvilInventory;
  35. import org.bukkit.inventory.Inventory;
  36. import org.bukkit.inventory.InventoryView;
  37. import org.bukkit.inventory.ItemStack;
  38. import org.bukkit.inventory.meta.EnchantmentStorageMeta;
  39. import org.bukkit.inventory.meta.ItemMeta;
  40.  
  41. import java.util.Hashtable;
  42. import java.util.Map;
  43.  
  44. import static com.bawnorton.amirienchants.AmiriEnchants.instance;
  45.  
  46. public class EventManager implements Listener {
  47.  
  48.     private int repairCost = 0;
  49.     private boolean expectTrident = false;
  50.     private boolean expectBow = false;
  51.  
  52.     public EventManager(AmiriEnchants plugin) {
  53.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
  54.     }
  55.  
  56.     @EventHandler
  57.     public void onAnvilCraft(PrepareAnvilEvent event) {
  58.         ItemStack[] components;
  59.         try {
  60.             components = event.getInventory().getContents();
  61.         } catch (NullPointerException ignore) {
  62.             return;
  63.         }
  64.         for (ItemStack component : components) {
  65.             if (component == null) {
  66.                 return;
  67.             }
  68.         }
  69.         try {
  70.             if(components[0].getType() == Material.TRIDENT) {
  71.                 if(components[1].getType() == Material.ENCHANTED_BOOK || components[1].getType() == Material.TRIDENT || components[1].getType() == Material.BOOK) {
  72.                     Map<Enchantment, Integer> enchants;
  73.                     if(components[1].getType() == Material.ENCHANTED_BOOK) {
  74.                         EnchantmentStorageMeta enchantedMeta = (EnchantmentStorageMeta) components[1].getItemMeta();
  75.                         enchants = enchantedMeta.getStoredEnchants();
  76.                     }
  77.                     else {
  78.                         ItemMeta enchantedMeta = components[1].getItemMeta();
  79.                         enchants = enchantedMeta.getEnchants();
  80.                     }
  81.  
  82.                     int length = enchants.size();
  83.                     Hashtable<Enchantment, Integer> toEnchant = new Hashtable<>(length);
  84.                     for(int i = 0; i < length; i++) {
  85.                         Enchantment enchantment = (Enchantment) enchants.keySet().toArray()[i];
  86.                         Integer level = (Integer) enchants.values().toArray()[i];
  87.                         boolean canEnchant = enchantment.canEnchantItem(components[0]);
  88.                         if(canEnchant || enchantment.equals(Enchantment.DAMAGE_ALL)) {
  89.                             toEnchant.put(enchantment, level);
  90.                         }
  91.                     }
  92.                     if(toEnchant.size() < 1) { return; }
  93.                     ItemMeta meta = components[0].getItemMeta();
  94.                     for(int i = 0; i < toEnchant.size(); i++) {
  95.                         meta.addEnchant((Enchantment) toEnchant.keySet().toArray()[i], (Integer) toEnchant.values().toArray()[i], true);
  96.                     }
  97.                     ItemStack newItem = new ItemStack(components[0].getType(), 1);
  98.                     newItem.setItemMeta(meta);
  99.                     event.setResult(newItem);
  100.                     int totalLength = length + components[0].getEnchantments().size();
  101.                     repairCost = totalLength*5+totalLength%5;
  102.                     expectTrident = true;
  103.                     instance.getServer().getScheduler().runTask(instance, () -> event.getInventory().setRepairCost(repairCost));
  104.                 }
  105.             }
  106.             else if(components[0].getType() == Material.BOW) {
  107.                 if(components[1].getType() == Material.ENCHANTED_BOOK || components[1].getType() == Material.BOW || components[1].getType() == Material.BOOK) {
  108.                     Map<Enchantment, Integer> enchants;
  109.                     if(components[1].getType() == Material.ENCHANTED_BOOK) {
  110.                         EnchantmentStorageMeta enchantedMeta = (EnchantmentStorageMeta) components[1].getItemMeta();
  111.                         enchants = enchantedMeta.getStoredEnchants();
  112.                     }
  113.                     else {
  114.                         ItemMeta enchantedMeta = components[1].getItemMeta();
  115.                         enchants = enchantedMeta.getEnchants();
  116.                     }
  117.                     int length = enchants.size();
  118.                     Hashtable<Enchantment, Integer> toEnchant = new Hashtable<>(length);
  119.                     for(int i = 0; i < length; i++) {
  120.                         Enchantment enchantment = (Enchantment) enchants.keySet().toArray()[i];
  121.                         Integer level = (Integer) enchants.values().toArray()[i];
  122.                         boolean canEnchant = enchantment.canEnchantItem(components[0]);
  123.                         if(canEnchant || enchantment.equals(Enchantment.ARROW_INFINITE) || enchantment.equals(Enchantment.MENDING)) {
  124.                             toEnchant.put(enchantment, level);
  125.                         }
  126.                     }
  127.                     if(toEnchant.size() < 1) { return; }
  128.                     ItemMeta meta = components[0].getItemMeta();
  129.                     for(int i = 0; i < toEnchant.size(); i++) {
  130.                         meta.addEnchant((Enchantment) toEnchant.keySet().toArray()[i], (Integer) toEnchant.values().toArray()[i], true);
  131.                     }
  132.                     ItemStack newItem = new ItemStack(components[0].getType(), 1);
  133.                     newItem.setItemMeta(meta);
  134.                     event.setResult(newItem);
  135.                     int totalLength = length + components[0].getEnchantments().size();
  136.                     repairCost = totalLength*5+totalLength%5;
  137.                     expectBow = true;
  138.                     instance.getServer().getScheduler().runTask(instance, () -> event.getInventory().setRepairCost(repairCost));
  139.                 }
  140.             }
  141.  
  142.         } catch(NullPointerException ignore) {}
  143.     }
  144.  
  145.     @EventHandler
  146.     public void onInventoryClick(InventoryClickEvent event) {
  147.         Inventory inv = event.getInventory();
  148.         if (inv instanceof AnvilInventory) {
  149.             InventoryView view = event.getView();
  150.             int rawSlot = event.getRawSlot();
  151.             if (rawSlot == view.convertSlot(rawSlot)) {
  152.                 if (rawSlot == 2) {
  153.                     Player player = (Player) event.getWhoClicked();
  154.                     ItemStack item = event.getCurrentItem();
  155.                     if(item == null) { return; }
  156.                     if(item.getType() == Material.TRIDENT && expectTrident) {
  157.                         if(player.getLevel() >= repairCost) {
  158.                             player.setLevel(player.getLevel() - repairCost);
  159.                             event.setCursor(item);
  160.                             view.setItem(0, null);
  161.                             view.setItem(1, null);
  162.                             view.setItem(2, null);
  163.  
  164.                         }
  165.                     }
  166.                     if(item.getType() == Material.BOW && expectBow) {
  167.                         if(player.getLevel() >= repairCost) {
  168.                             player.setLevel(player.getLevel() - repairCost);
  169.                             event.setCursor(item);
  170.                             view.setItem(0, null);
  171.                             view.setItem(1, null);
  172.                             view.setItem(2, null);
  173.  
  174.                         }
  175.                     }
  176.                 }
  177.             }
  178.         }
  179.     }
  180. }
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement