Drag n' Drop Enchantments 1.0

Allows you to drag n' drop enchantments onto items from enchanted books

  1. XGhostzz
    Tested Minecraft Versions:
    • 1.13
    • 1.14
    • 1.15
    • 1.16
    Drag N' Drop Enchantments
    Very simple plugin. Take an enchanted book and drag n' drop it onto the target item. The target item will now be enchanted. Only works in survival & adventure mode.

    Code (Text):
    package arg.xghostzz.main;

    import java.util.Map;
    import java.util.Random;

    import org.bukkit.Bukkit;
    import org.bukkit.GameMode;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    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.inventory.ItemStack;
    import org.bukkit.inventory.meta.EnchantmentStorageMeta;
    import org.bukkit.plugin.java.JavaPlugin;

    public class Main extends JavaPlugin implements Listener{

        public void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this);
        }
     
        @SuppressWarnings("deprecation")
        @EventHandler
        public void onDragNDrop(InventoryClickEvent event) {
            try {
                ItemStack cursorItem = event.getCursor();
             
                if(cursorItem.getType() != Material.ENCHANTED_BOOK) {
                    return;
                }
             
                EnchantmentStorageMeta meta = (EnchantmentStorageMeta) cursorItem.getItemMeta();
                Map<Enchantment, Integer> enchants = meta.getStoredEnchants();
             
                ItemStack targetItem = event.getCurrentItem();
             
                if(targetItem == null) {
                    return;
                }
             
                if(targetItem.getItemMeta().getEnchants().equals(enchants)) {
                    return;
                }
             
                if(!(event.getWhoClicked() instanceof Player)) {
                    return;
                }
             
                Player p = (Player) event.getWhoClicked();
             
                if(p.getGameMode() == GameMode.CREATIVE) {
                    p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, (float) getRandom(0.7,1.3));
                    return;
                }
             
                ItemStack beforeItem = targetItem.clone();
                targetItem.addEnchantments(enchants);
             
                if(beforeItem.equals(targetItem)) {
                    return;
                }
             
                p.playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1, (float) getRandom(0.7,1.3));
             
                event.setCursor(null);
             
                event.setCancelled(true);
            }catch(Exception e) {

            }
        }
     
        public double getRandom(double rangeMin, double rangeMax) {
            Random r = new Random();
            return rangeMin + (rangeMax - rangeMin) * r.nextDouble();
        }
    }