Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. public class BottledExpListener
  2. implements Listener
  3. {
  4. private static final String BOTTLED_EXP_DISPLAY_NAME = ChatColor.AQUA.toString() + "Bottled Experience";
  5. private final HCF plugin;
  6.  
  7. public BottledExpListener(HCF plugin)
  8. {
  9. this.plugin = plugin;
  10.  
  11. Bukkit.addRecipe(new ShapelessRecipe(createExpBottle(1)).addIngredient(Material.GLASS_BOTTLE));
  12. }
  13.  
  14. @EventHandler(ignoreCancelled=false, priority=EventPriority.HIGH)
  15. public void onPlayerInteract(PlayerInteractEvent event)
  16. {
  17. if (!this.plugin.getConfiguration().isBottledExp()) {
  18. return;
  19. }
  20. Action action = event.getAction();
  21. if ((event.hasItem()) && ((action == Action.RIGHT_CLICK_AIR) || ((action == Action.RIGHT_CLICK_BLOCK) && (!event.isCancelled()))))
  22. {
  23. if (!event.getPlayer().hasPermission("hcf.bottledxp")) {
  24. return;
  25. }
  26. ItemStack stack = event.getItem();
  27. if (!isBottledExperience(stack)) {
  28. return;
  29. }
  30. ItemMeta meta = stack.getItemMeta();
  31. List<String> lore = meta.getLore();
  32.  
  33. Integer amount = null;
  34. for (String loreLine : lore) {
  35. if ((amount = JavaUtils.tryParseInt(ChatColor.stripColor(loreLine).split(" ")[0])) != null) {
  36. break;
  37. }
  38. }
  39. if (amount != null)
  40. {
  41. event.setCancelled(true);
  42.  
  43. Player player = event.getPlayer();
  44. int previousLevel = player.getLevel();
  45. new ExperienceManager(player).changeExp(amount.intValue());
  46. if (player.getLevel() - previousLevel > 5) {
  47. player.playSound(player.getLocation(), Sound.ORB_PICKUP, 1.0F, 1.0F);
  48. }
  49. if (stack.getAmount() > 1) {
  50. stack.setAmount(stack.getAmount() - 1);
  51. } else {
  52. player.setItemInHand(new ItemStack(Material.GLASS_BOTTLE, 1));
  53. }
  54. }
  55. }
  56. }
  57.  
  58. @EventHandler(ignoreCancelled=true, priority=EventPriority.HIGH)
  59. public void onPrepareCraft(PrepareItemCraftEvent event)
  60. {
  61. if ((event.getInventory().getHolder() instanceof Player))
  62. {
  63. CraftingInventory inventory = event.getInventory();
  64. Player player = (Player)inventory.getHolder();
  65. if (isBottledExperience(inventory.getResult()))
  66. {
  67. int exp = new ExperienceManager(player).getCurrentExp();
  68. inventory.setResult(exp > 0 ? createExpBottle(exp) : new ItemStack(Material.AIR, 1));
  69. }
  70. }
  71. }
  72.  
  73. @EventHandler(ignoreCancelled=true, priority=EventPriority.MONITOR)
  74. public void onCraftItem(CraftItemEvent event)
  75. {
  76. HumanEntity humanEntity = event.getWhoClicked();
  77. if ((humanEntity instanceof Player))
  78. {
  79. Player player = (Player)humanEntity;
  80. if ((event.getSlotType() == InventoryType.SlotType.RESULT) && (isBottledExperience(event.getCurrentItem())))
  81. {
  82. player.setLevel(0);
  83. player.setExp(0.0F);
  84. }
  85. }
  86. }
  87.  
  88. private ItemStack createExpBottle(int experience)
  89. {
  90. ItemStack stack = new ItemStack(Material.EXP_BOTTLE, 1);
  91. ItemMeta meta = stack.getItemMeta();
  92. meta.setDisplayName(BOTTLED_EXP_DISPLAY_NAME);
  93. meta.setLore(Lists.newArrayList(new String[] { ChatColor.WHITE.toString() + experience + ChatColor.GOLD + " Experience" }));
  94. stack.setItemMeta(meta);
  95. return stack;
  96. }
  97.  
  98. private boolean isBottledExperience(ItemStack stack)
  99. {
  100. if ((stack == null) || (!stack.hasItemMeta())) {
  101. return false;
  102. }
  103. ItemMeta meta = stack.getItemMeta();
  104. return (meta.hasDisplayName()) && (meta.getDisplayName().equals(BOTTLED_EXP_DISPLAY_NAME));
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement