Advertisement
NightTerror65

Exception-throwing Listener Class

Sep 21st, 2017
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.24 KB | None | 0 0
  1. package nightterror6.magicrpg;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collections;
  5. import java.util.List;
  6. import java.util.Random;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.DyeColor;
  10. import org.bukkit.Material;
  11. import org.bukkit.enchantments.Enchantment;
  12. import org.bukkit.entity.Player;
  13. import org.bukkit.event.EventException;
  14. import org.bukkit.event.EventHandler;
  15. import org.bukkit.event.EventPriority;
  16. import org.bukkit.event.Listener;
  17. import org.bukkit.event.block.Action;
  18. import org.bukkit.event.inventory.InventoryClickEvent;
  19. import org.bukkit.event.inventory.InventoryCloseEvent;
  20. import org.bukkit.event.inventory.InventoryOpenEvent;
  21. import org.bukkit.event.inventory.InventoryType;
  22. import org.bukkit.event.player.PlayerInteractEvent;
  23. import org.bukkit.inventory.Inventory;
  24. import org.bukkit.inventory.ItemStack;
  25. import org.bukkit.inventory.meta.ItemMeta;
  26.  
  27. import net.md_5.bungee.api.ChatColor;
  28.  
  29. public class ScrollEnchantment implements Listener{
  30.  
  31. private Main main;
  32. Inventory ew = Bukkit.createInventory(null, 9, ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "Enchant");
  33.  
  34. private final int ITEM_SLOT = 5;
  35. private final int SCROLL_SLOT = 3;
  36.  
  37. private final String paneName = ChatColor.GRAY + "Enchant an Item with a Scroll";
  38. private final String confirmName = "" + ChatColor.GREEN + "" + ChatColor.BOLD + "Confirm";
  39.  
  40. private ItemStack scroll = null;
  41.  
  42.  
  43. public ScrollEnchantment(Main main) {
  44. main.getServer().getPluginManager().registerEvents(this,main);
  45. this.main = main;
  46. }
  47.  
  48. @EventHandler(priority = EventPriority.HIGH)
  49. public void onPlayerUse(PlayerInteractEvent e) {
  50. Player p = e.getPlayer();
  51. Inventory pInv = p.getInventory();
  52. ItemStack heldItem = p.getItemInHand();
  53. if(e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
  54. if(heldItem.getType() == Material.PAPER && heldItem.getItemMeta().hasEnchants()){
  55. ew.setItem(SCROLL_SLOT, heldItem);
  56. p.getInventory().remove(heldItem);
  57. scroll = heldItem;
  58.  
  59. ItemStack aestheticItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GRAY.getWoolData());
  60. ItemMeta meta = aestheticItem.getItemMeta();
  61. meta.setDisplayName(paneName);
  62. aestheticItem.setItemMeta(meta);
  63.  
  64. /*
  65. ItemStack confirm = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
  66. ItemMeta confirmMeta = confirm.getItemMeta();
  67. meta.setDisplayName(confirmName);
  68.  
  69. confirm.setItemMeta(confirmMeta);*/
  70.  
  71. ItemStack confirmItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
  72. ItemMeta confirmMeta = confirmItem.getItemMeta();
  73. confirmMeta.setDisplayName(confirmName);
  74.  
  75. ArrayList<String> confirmLore = new ArrayList<String>();
  76. confirmLore.add(ChatColor.GRAY + "Confirm enchantment");
  77. confirmMeta.setLore(confirmLore);
  78.  
  79. confirmItem.setItemMeta(confirmMeta);
  80.  
  81. ew.setItem(0, aestheticItem);
  82. ew.setItem(1, aestheticItem);
  83. ew.setItem(2, aestheticItem);
  84. ew.setItem(4, confirmItem);
  85. ew.setItem(6, aestheticItem);
  86. ew.setItem(7, aestheticItem);
  87. ew.setItem(8, aestheticItem);
  88.  
  89. p.openInventory(ew);
  90. }
  91.  
  92. }
  93. if(e.getAction() == Action.RIGHT_CLICK_BLOCK && e.getClickedBlock().getType() == Material.ENCHANTMENT_TABLE && p.getItemInHand().getType() == Material.PAPER) {
  94. ItemStack paper = p.getItemInHand();
  95. }
  96.  
  97. }
  98.  
  99. @EventHandler(priority = EventPriority.HIGH)
  100. public void onInventoryClick(InventoryClickEvent e){
  101. Player p = (Player) e.getWhoClicked();
  102. Inventory pInv = p.getInventory();
  103. ItemStack clickedItem = e.getCurrentItem();
  104. if(clickedItem == null) {
  105. return;
  106. }
  107. Inventory i = e.getInventory();
  108. final boolean isScroll = clickedItem.getType() == Material.PAPER && clickedItem.getItemMeta().hasEnchants();
  109. final boolean isPaper = clickedItem.getType() == Material.PAPER && !clickedItem.getItemMeta().hasEnchants();
  110. if(i.getName().equals(ew.getName())) {
  111. if(clickedItem.getItemMeta().getDisplayName().equals(paneName) || clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
  112. e.setCancelled(true);
  113. }
  114. if(isScroll){
  115. e.setCancelled(true);
  116. p.closeInventory();
  117. pInv.addItem(i.getItem(ITEM_SLOT));
  118. i.removeItem(i.getItem(ITEM_SLOT));
  119. }
  120. if(clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
  121. ItemStack toEnch = i.getItem(ITEM_SLOT);
  122. ItemStack enchanter = i.getItem(SCROLL_SLOT);
  123. if(toEnch.getType() != Material.AIR){
  124.  
  125. toEnch.addEnchantments(enchanter.getEnchantments());
  126. ew.removeItem(enchanter);
  127. ew.removeItem(toEnch);
  128. pInv.addItem(toEnch);
  129. p.closeInventory();
  130. return;
  131. }
  132. }
  133. }
  134. if(clickedItem.getItemMeta().getDisplayName().equals(confirmName)) {
  135. e.setCancelled(true);
  136. if(i.getType() == InventoryType.ENCHANTING) {
  137. if(p.getExpToLevel() >= 112) {
  138. ItemStack toEnch = i.getItem(0);
  139. ItemMeta toEnchMeta = toEnch.getItemMeta();
  140. toEnchMeta.setDisplayName(main.scrollName);
  141. toEnch.setItemMeta(toEnchMeta);
  142.  
  143. this.randomEnchant(toEnch);
  144. p.giveExpLevels(-30);
  145. }else { //Causes exception when not enough levels..?
  146. p.closeInventory();
  147. p.sendMessage(ChatColor.RED + "Not enough levels! (Required: 30)");
  148. }
  149. }
  150. }
  151. }
  152.  
  153. @EventHandler(priority = EventPriority.HIGH)
  154. public void onInventoryClose(InventoryCloseEvent e) {
  155. Player p = (Player) e.getPlayer();
  156. Inventory pInv = p.getInventory();
  157. Inventory i = e.getInventory();
  158. if(i.equals(ew)) {
  159. if(scroll != null){
  160. pInv.addItem(scroll);
  161. pInv.addItem(i.getItem(ITEM_SLOT));
  162. i.removeItem(i.getItem(ITEM_SLOT));
  163. }
  164. }
  165. if(i.getType() == InventoryType.ENCHANTING) {
  166. if(i.getItem(1).getItemMeta().getDisplayName().equals(confirmName)) {
  167. i.removeItem(i.getItem(1));
  168. }
  169. }
  170. }
  171.  
  172. @EventHandler(priority = EventPriority.HIGH)
  173. public void onInventoryOpen(InventoryOpenEvent e) {
  174. Player p = (Player) e.getPlayer();
  175. Inventory pInv = p.getInventory();
  176. Inventory i = e.getInventory();
  177. if(i.getType() == InventoryType.ENCHANTING) {
  178. ItemStack inHand = p.getItemInHand();
  179. if(inHand.getType() == Material.PAPER) {
  180. inHand.setAmount(inHand.getAmount() - 1);
  181. ItemStack paper = new ItemStack(Material.PAPER);
  182. i.setItem(0, paper);
  183.  
  184. ItemStack confirmItem = new ItemStack(Material.STAINED_GLASS_PANE, 1, DyeColor.GREEN.getWoolData());
  185. ItemMeta confirmMeta = confirmItem.getItemMeta();
  186. confirmMeta.setDisplayName(confirmName);
  187. confirmItem.setItemMeta(confirmMeta);
  188.  
  189. i.setItem(1, confirmItem);
  190. }
  191. }
  192. }
  193.  
  194. private ItemStack randomEnchant(ItemStack toEnch) {
  195.  
  196. List<Enchantment> enchs = new ArrayList<Enchantment>();
  197. for(Enchantment ench : Enchantment.values()) {
  198. enchs.add(ench);
  199. }
  200. Collections.shuffle(enchs);
  201.  
  202. Random r = new Random();
  203. int enchNum = r.nextInt(2) + 2;
  204. for(int i = 0; i < enchNum; i++) {
  205. this.addEnchantment(toEnch, enchs.get(i), r.nextInt(4) + 1);
  206. }
  207.  
  208. return toEnch;
  209. }
  210.  
  211. private ItemStack addEnchantment(ItemStack item, Enchantment e, int lvl) {
  212. ItemMeta meta = item.getItemMeta();
  213. meta.addEnchant(e, lvl, true);
  214. item.setItemMeta(meta);
  215. return item;
  216. }
  217.  
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement