CustomCode

Untitled

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