Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package nightterror6.magicrpg;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.Random;
- import org.bukkit.Bukkit;
- import org.bukkit.DyeColor;
- import org.bukkit.Material;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventException;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.Action;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.inventory.InventoryCloseEvent;
- import org.bukkit.event.inventory.InventoryOpenEvent;
- import org.bukkit.event.inventory.InventoryType;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import net.md_5.bungee.api.ChatColor;
- public class ScrollEnchantment implements Listener{
- private Main main;
- Inventory ew = Bukkit.createInventory(null, 9, ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Enchant");
- private final int ITEM_SLOT = 5;
- private final int SCROLL_SLOT = 3;
- private final String paneName = ChatColor.GRAY + "Enchant an Item with a Scroll";
- private final String confirmName = "" + ChatColor.GREEN + "" + ChatColor.BOLD + "Confirm";
- private ItemStack scroll = null;
- public ScrollEnchantment(Main main) {
- main.getServer().getPluginManager().registerEvents(this,main);
- this.main = main;
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onPlayerUse(PlayerInteractEvent e) {
- Player p = e.getPlayer();
- Inventory pInv = p.getInventory();
- ItemStack heldItem = p.getItemInHand();
- if(e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
- if(heldItem.getType() == Material.PAPER && heldItem.getItemMeta().hasEnchants()){
- ew.setItem(SCROLL_SLOT, heldItem);
- p.getInventory().remove(heldItem);
- scroll = heldItem;
- ItemStack aestheticItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GRAY.getWoolData());
- ItemMeta meta = aestheticItem.getItemMeta();
- meta.setDisplayName(paneName);
- aestheticItem.setItemMeta(meta);
- /*
- ItemStack confirm = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
- ItemMeta confirmMeta = confirm.getItemMeta();
- meta.setDisplayName(confirmName);
- confirm.setItemMeta(confirmMeta);*/
- ItemStack confirmItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
- ItemMeta confirmMeta = confirmItem.getItemMeta();
- confirmMeta.setDisplayName(confirmName);
- ArrayList<String> confirmLore = new ArrayList<String>();
- confirmLore.add(ChatColor.GRAY + "Confirm enchantment");
- confirmMeta.setLore(confirmLore);
- confirmItem.setItemMeta(confirmMeta);
- ew.setItem(0, aestheticItem);
- ew.setItem(1, aestheticItem);
- ew.setItem(2, aestheticItem);
- ew.setItem(4, confirmItem);
- ew.setItem(6, aestheticItem);
- ew.setItem(7, aestheticItem);
- ew.setItem(8, aestheticItem);
- p.openInventory(ew);
- }
- }
- if(e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.ENCHANTMENT_TABLE && p.getItemInHand().getType() == Material.PAPER) {
- ItemStack paper = p.getItemInHand();
- }
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onInventoryClick(InventoryClickEvent e){
- Player p = (Player) e.getWhoClicked();
- Inventory pInv = p.getInventory();
- ItemStack clickedItem = e.getCurrentItem();
- if(clickedItem == null) {
- return;
- }
- Inventory i = e.getInventory();
- final boolean isScroll = clickedItem.getType() == Material.PAPER && clickedItem.getItemMeta().hasEnchants();
- final boolean isPaper = clickedItem.getType() == Material.PAPER && !clickedItem.getItemMeta().hasEnchants();
- if(i.getName().equals(ew.getName())) {
- if(clickedItem.getItemMeta().getDisplayName().equals(paneName) || clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
- e.setCancelled(true);
- }
- if(isScroll){
- e.setCancelled(true);
- p.closeInventory();
- pInv.addItem(i.getItem(ITEM_SLOT));
- i.removeItem(i.getItem(ITEM_SLOT));
- }
- if(clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
- ItemStack toEnch = i.getItem(ITEM_SLOT);
- ItemStack enchanter = i.getItem(SCROLL_SLOT);
- if(toEnch.getType() != Material.AIR){
- toEnch.addEnchantments(enchanter.getEnchantments());
- ew.removeItem(enchanter);
- ew.removeItem(toEnch);
- pInv.addItem(toEnch);
- p.closeInventory();
- return;
- }
- }
- }
- if(clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
- e.setCancelled(true);
- if(i.getType() == InventoryType.ENCHANTING) {
- if(p.getExpToLevel() >= 112) {
- ItemStack toEnch = i.getItem(0);
- ItemMeta toEnchMeta = toEnch.getItemMeta();
- toEnchMeta.setDisplayName(main.scrollName);
- toEnch.setItemMeta(toEnchMeta);
- this.randomEnchant(toEnch);
- p.giveExpLevels(-30);
- }else { //Causes exception when not enough levels..?
- p.closeInventory();
- p.sendMessage(ChatColor.RED + "Not enough levels! (Required: 30)");
- }
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onInventoryClose(InventoryCloseEvent e) {
- Player p = (Player) e.getPlayer();
- Inventory pInv = p.getInventory();
- Inventory i = e.getInventory();
- if(i.equals(ew)) {
- if(scroll != null){
- pInv.addItem(scroll);
- pInv.addItem(i.getItem(ITEM_SLOT));
- i.removeItem(i.getItem(ITEM_SLOT));
- }
- }
- if(i.getType() == InventoryType.ENCHANTING) {
- if(i.getItem(1).getItemMeta().getDisplayName().equals(confirmName)) {
- i.removeItem(i.getItem(1));
- }
- }
- }
- @EventHandler(priority = EventPriority.HIGH)
- public void onInventoryOpen(InventoryOpenEvent e) {
- Player p = (Player) e.getPlayer();
- Inventory pInv = p.getInventory();
- Inventory i = e.getInventory();
- if(i.getType() == InventoryType.ENCHANTING) {
- ItemStack inHand = p.getItemInHand();
- if(inHand.getType() == Material.PAPER) {
- inHand.setAmount(inHand.getAmount() - 1);
- ItemStack paper = new ItemStack(Material.PAPER);
- i.setItem(0, paper);
- ItemStack confirmItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
- ItemMeta confirmMeta = confirmItem.getItemMeta();
- confirmMeta.setDisplayName(confirmName);
- confirmItem.setItemMeta(confirmMeta);
- i.setItem(1, confirmItem);
- }
- }
- }
- private ItemStack randomEnchant(ItemStack toEnch) {
- List<Enchantment> enchs = new ArrayList<Enchantment>();
- for(Enchantment ench : Enchantment.values()) {
- enchs.add(ench);
- }
- Collections.shuffle(enchs);
- Random r = new Random();
- int enchNum = r.nextInt(2) + 2;
- for(int i = 0; i < enchNum; i++) {
- this.addEnchantment(toEnch, enchs.get(i), r.nextInt(4) + 1);
- }
- return toEnch;
- }
- private ItemStack addEnchantment(ItemStack item, Enchantment e, int lvl) {
- ItemMeta meta = item.getItemMeta();
- meta.addEnchant(e, lvl, true);
- item.setItemMeta(meta);
- return item;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement