Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.bawnorton.amirienchants;
- import com.bawnorton.amirienchants.events.EventManager;
- import org.bukkit.ChatColor;
- import org.bukkit.plugin.java.JavaPlugin;
- public class AmiriEnchants extends JavaPlugin {
- public static AmiriEnchants instance;
- @Override
- public void onEnable() {
- instance = this;
- new EventManager(instance);
- getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[AmiriEnchants] Enabled");
- }
- @Override
- public void onDisable() {
- getServer().getConsoleSender().sendMessage(ChatColor.RED + "[AmiriEnchants] Disabled");
- }
- }
- package com.bawnorton.amirienchants.events;
- import com.bawnorton.amirienchants.AmiriEnchants;
- import org.bukkit.Material;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.inventory.PrepareAnvilEvent;
- import org.bukkit.inventory.AnvilInventory;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.InventoryView;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.EnchantmentStorageMeta;
- import org.bukkit.inventory.meta.ItemMeta;
- import java.util.Hashtable;
- import java.util.Map;
- import static com.bawnorton.amirienchants.AmiriEnchants.instance;
- public class EventManager implements Listener {
- private int repairCost = 0;
- private boolean expectTrident = false;
- private boolean expectBow = false;
- public EventManager(AmiriEnchants plugin) {
- plugin.getServer().getPluginManager().registerEvents(this, plugin);
- }
- @EventHandler
- public void onAnvilCraft(PrepareAnvilEvent event) {
- ItemStack[] components;
- try {
- components = event.getInventory().getContents();
- } catch (NullPointerException ignore) {
- return;
- }
- for (ItemStack component : components) {
- if (component == null) {
- return;
- }
- }
- try {
- if(components[0].getType() == Material.TRIDENT) {
- if(components[1].getType() == Material.ENCHANTED_BOOK || components[1].getType() == Material.TRIDENT || components[1].getType() == Material.BOOK) {
- Map<Enchantment, Integer> enchants;
- if(components[1].getType() == Material.ENCHANTED_BOOK) {
- EnchantmentStorageMeta enchantedMeta = (EnchantmentStorageMeta) components[1].getItemMeta();
- enchants = enchantedMeta.getStoredEnchants();
- }
- else {
- ItemMeta enchantedMeta = components[1].getItemMeta();
- enchants = enchantedMeta.getEnchants();
- }
- int length = enchants.size();
- Hashtable<Enchantment, Integer> toEnchant = new Hashtable<>(length);
- for(int i = 0; i < length; i++) {
- Enchantment enchantment = (Enchantment) enchants.keySet().toArray()[i];
- Integer level = (Integer) enchants.values().toArray()[i];
- boolean canEnchant = enchantment.canEnchantItem(components[0]);
- if(canEnchant || enchantment.equals(Enchantment.DAMAGE_ALL)) {
- toEnchant.put(enchantment, level);
- }
- }
- if(toEnchant.size() < 1) { return; }
- ItemMeta meta = components[0].getItemMeta();
- for(int i = 0; i < toEnchant.size(); i++) {
- meta.addEnchant((Enchantment) toEnchant.keySet().toArray()[i], (Integer) toEnchant.values().toArray()[i], true);
- }
- ItemStack newItem = new ItemStack(components[0].getType(), 1);
- newItem.setItemMeta(meta);
- event.setResult(newItem);
- int totalLength = length + components[0].getEnchantments().size();
- repairCost = totalLength*5+totalLength%5;
- expectTrident = true;
- instance.getServer().getScheduler().runTask(instance, () -> event.getInventory().setRepairCost(repairCost));
- }
- }
- else if(components[0].getType() == Material.BOW) {
- if(components[1].getType() == Material.ENCHANTED_BOOK || components[1].getType() == Material.BOW || components[1].getType() == Material.BOOK) {
- Map<Enchantment, Integer> enchants;
- if(components[1].getType() == Material.ENCHANTED_BOOK) {
- EnchantmentStorageMeta enchantedMeta = (EnchantmentStorageMeta) components[1].getItemMeta();
- enchants = enchantedMeta.getStoredEnchants();
- }
- else {
- ItemMeta enchantedMeta = components[1].getItemMeta();
- enchants = enchantedMeta.getEnchants();
- }
- int length = enchants.size();
- Hashtable<Enchantment, Integer> toEnchant = new Hashtable<>(length);
- for(int i = 0; i < length; i++) {
- Enchantment enchantment = (Enchantment) enchants.keySet().toArray()[i];
- Integer level = (Integer) enchants.values().toArray()[i];
- boolean canEnchant = enchantment.canEnchantItem(components[0]);
- if(canEnchant || enchantment.equals(Enchantment.ARROW_INFINITE) || enchantment.equals(Enchantment.MENDING)) {
- toEnchant.put(enchantment, level);
- }
- }
- if(toEnchant.size() < 1) { return; }
- ItemMeta meta = components[0].getItemMeta();
- for(int i = 0; i < toEnchant.size(); i++) {
- meta.addEnchant((Enchantment) toEnchant.keySet().toArray()[i], (Integer) toEnchant.values().toArray()[i], true);
- }
- ItemStack newItem = new ItemStack(components[0].getType(), 1);
- newItem.setItemMeta(meta);
- event.setResult(newItem);
- int totalLength = length + components[0].getEnchantments().size();
- repairCost = totalLength*5+totalLength%5;
- expectBow = true;
- instance.getServer().getScheduler().runTask(instance, () -> event.getInventory().setRepairCost(repairCost));
- }
- }
- } catch(NullPointerException ignore) {}
- }
- @EventHandler
- public void onInventoryClick(InventoryClickEvent event) {
- Inventory inv = event.getInventory();
- if (inv instanceof AnvilInventory) {
- InventoryView view = event.getView();
- int rawSlot = event.getRawSlot();
- if (rawSlot == view.convertSlot(rawSlot)) {
- if (rawSlot == 2) {
- Player player = (Player) event.getWhoClicked();
- ItemStack item = event.getCurrentItem();
- if(item == null) { return; }
- if(item.getType() == Material.TRIDENT && expectTrident) {
- if(player.getLevel() >= repairCost) {
- player.setLevel(player.getLevel() - repairCost);
- event.setCursor(item);
- view.setItem(0, null);
- view.setItem(1, null);
- view.setItem(2, null);
- }
- }
- if(item.getType() == Material.BOW && expectBow) {
- if(player.getLevel() >= repairCost) {
- player.setLevel(player.getLevel() - repairCost);
- event.setCursor(item);
- view.setItem(0, null);
- view.setItem(1, null);
- view.setItem(2, null);
- }
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement