Advertisement
Guest User

Untitled

a guest
Feb 17th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. package ru.slimechan.prison.menu;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import org.bukkit.entity.Player;
  9. import org.bukkit.event.Event.Result;
  10. import org.bukkit.event.EventHandler;
  11. import org.bukkit.event.Listener;
  12. import org.bukkit.event.inventory.ClickType;
  13. import org.bukkit.event.inventory.InventoryAction;
  14. import org.bukkit.event.inventory.InventoryClickEvent;
  15. import org.bukkit.event.inventory.InventoryCloseEvent;
  16. import org.bukkit.event.inventory.InventoryType;
  17. import org.bukkit.inventory.ItemStack;
  18. import org.bukkit.inventory.meta.ItemMeta;
  19.  
  20. import de.tr7zw.itemnbtapi.NBTItem;
  21. import ru.slimechan.prison.PrisonPlayer;
  22. import ru.slimechan.prison.managers.PlayerManager;
  23.  
  24. public class ShopMenu extends Menu implements Listener{
  25.  
  26. private Map<ItemStack, ItemStack> items = new HashMap<ItemStack, ItemStack>();
  27.  
  28. private String title;
  29.  
  30. private boolean canSell;
  31.  
  32. private boolean transaction = false;
  33.  
  34. public ShopMenu(int size, String title, int coins, boolean canSell) {
  35. super(size, getCoinsTitle(title, coins), false);
  36. this.title = title;
  37. this.canSell = canSell;
  38. }
  39. public void setItem(int slot, ItemStack stack, int price) {
  40.  
  41. ItemStack item = stack.clone();
  42.  
  43. NBTItem i = new NBTItem(item);
  44. i.setInteger("price", price);
  45. item = i.getItem();
  46.  
  47. ItemMeta m = item.getItemMeta();
  48. List<String> lore = new ArrayList<>();
  49. if(item.getItemMeta().getLore()!=null) {
  50. lore = item.getItemMeta().getLore();
  51. }
  52.  
  53. lore.add("§a§l"+price+" ⛃");
  54. lore.add("§8Нажми чтобы купить");
  55. m.setLore(lore);
  56.  
  57. item.setItemMeta(m);
  58.  
  59. inv.setItem(slot, item);
  60.  
  61. items.put(item, stack);
  62. }
  63. public void setItem(int slot, ItemStack stack, int price, int sellPrice) {
  64.  
  65. ItemStack item = stack.clone();
  66.  
  67. NBTItem i = new NBTItem(item);
  68. i.setInteger("price", price);
  69. i.setInteger("sellPrice", sellPrice);
  70. item = i.getItem();
  71.  
  72.  
  73. ItemMeta m = item.getItemMeta();
  74. List<String> lore = new ArrayList<>();
  75. if(item.getItemMeta().getLore()!=null) {
  76. lore = item.getItemMeta().getLore();
  77. }
  78.  
  79. lore.add("§a§l"+price+" ⛃");
  80. lore.add("§c§l"+sellPrice+" ⛃");
  81. lore.add("§8Нажми чтобы купить");
  82. m.setLore(lore);
  83.  
  84. item.setItemMeta(m);
  85. inv.setItem(slot, item);
  86. items.put(item, stack);
  87. }
  88.  
  89. @EventHandler
  90. protected void onClose(InventoryCloseEvent ev) {
  91. if(ev.getInventory()==null) return;
  92. if(transaction) {reopen((Player) ev.getPlayer());return;}
  93. if(ev.getView().getTopInventory().getTitle().equals(inv.getTitle())) {
  94. dispose();
  95. }
  96. }
  97. private boolean compare(ItemStack a, ItemStack b) {
  98. if(a.getType().equals(b.getType())) {
  99. if(a.getData().equals(b.getData())) {
  100. return true;
  101. }
  102. }
  103. return false;
  104. }
  105. private ItemStack getItemByValue(ItemStack item) {
  106. for(ItemStack a : items.keySet()) {
  107. if(compare(item, items.get(a))) {
  108. return a;
  109. }
  110. }
  111. return null;
  112. }
  113.  
  114. @Override
  115. @EventHandler
  116. protected void onClick(InventoryClickEvent ev) {
  117. if(ev.getClickedInventory()==null) return;
  118. if(ev.getClickedInventory().getTitle().equals(inv.getTitle())) {
  119.  
  120. ev.setCancelled(true);
  121. ClickType click = ev.getClick();
  122. int slot = ev.getRawSlot();
  123. if (click != ClickType.LEFT && click != ClickType.RIGHT) return;
  124. if (slot > inv.getContents().length - 1 || slot < 0) return;
  125. if(ev.getAction() != InventoryAction.PICKUP_ALL) {ev.setResult(Result.DENY);return;}
  126.  
  127. if(ev.getCurrentItem()==null) return;
  128. NBTItem it = new NBTItem(ev.getCurrentItem());
  129. if(click.equals(ClickType.LEFT) & it.hasKey("price")) {
  130.  
  131. buy(ev.getCurrentItem(), it.getInteger("price"), (Player) ev.getWhoClicked());
  132. PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer((Player) ev.getWhoClicked());
  133. //update((Player) ev.getWhoClicked(), getCoinsTitle(title, pp.getCoins()));
  134.  
  135. }else if(click.equals(ClickType.RIGHT) & it.hasKey("sellPrice")){
  136.  
  137. ItemStack item = getItemByValue(ev.getCurrentItem());
  138. if(ev.getCurrentItem().getAmount()>=item.getAmount())
  139. sell(ev.getCurrentItem(), item.getAmount(), it.getInteger("sellPrice"), (Player) ev.getWhoClicked());
  140. PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer((Player) ev.getWhoClicked());
  141. //update((Player) ev.getWhoClicked(), getCoinsTitle(title, pp.getCoins()));
  142. }
  143.  
  144. }
  145.  
  146. }
  147.  
  148.  
  149. private void buy(ItemStack stack, int price, Player pl) {
  150. if(stack == null) return;
  151. PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer(pl);
  152. if(pp.getCoins()>=price) {
  153. pp.removeCoins(price);
  154. pl.getInventory().addItem(items.get(stack));
  155.  
  156.  
  157. }
  158. }
  159. private void sell(ItemStack stack, int amount, int price, Player pl) {
  160. PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer(pl);
  161.  
  162. pp.addCoins(price);
  163. if(stack.getAmount()-amount>0) {
  164. stack.setAmount(stack.getAmount()-amount);
  165. }else if(stack.getAmount()-amount==0){
  166. pl.getInventory().removeItem(stack);
  167. }
  168.  
  169.  
  170.  
  171. }
  172.  
  173. private static String getCoinsTitle(String title, int coins) {
  174. if((title+coins).length()<32) {
  175. String newTitle= title;
  176. for(int id = 0; id<32-(title+coins).length(); id++)
  177. newTitle+=" ";
  178.  
  179. return newTitle+coins;
  180. }
  181. return title;
  182. }
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement