Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.slimechan.prison.menu;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.bukkit.entity.Player;
- import org.bukkit.event.Event.Result;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.ClickType;
- import org.bukkit.event.inventory.InventoryAction;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.inventory.InventoryCloseEvent;
- import org.bukkit.event.inventory.InventoryType;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import de.tr7zw.itemnbtapi.NBTItem;
- import ru.slimechan.prison.PrisonPlayer;
- import ru.slimechan.prison.managers.PlayerManager;
- public class ShopMenu extends Menu implements Listener{
- private Map<ItemStack, ItemStack> items = new HashMap<ItemStack, ItemStack>();
- private String title;
- private boolean canSell;
- private boolean transaction = false;
- public ShopMenu(int size, String title, int coins, boolean canSell) {
- super(size, getCoinsTitle(title, coins), false);
- this.title = title;
- this.canSell = canSell;
- }
- public void setItem(int slot, ItemStack stack, int price) {
- ItemStack item = stack.clone();
- NBTItem i = new NBTItem(item);
- i.setInteger("price", price);
- item = i.getItem();
- ItemMeta m = item.getItemMeta();
- List<String> lore = new ArrayList<>();
- if(item.getItemMeta().getLore()!=null) {
- lore = item.getItemMeta().getLore();
- }
- lore.add("§a§l"+price+" ⛃");
- lore.add("§8Нажми чтобы купить");
- m.setLore(lore);
- item.setItemMeta(m);
- inv.setItem(slot, item);
- items.put(item, stack);
- }
- public void setItem(int slot, ItemStack stack, int price, int sellPrice) {
- ItemStack item = stack.clone();
- NBTItem i = new NBTItem(item);
- i.setInteger("price", price);
- i.setInteger("sellPrice", sellPrice);
- item = i.getItem();
- ItemMeta m = item.getItemMeta();
- List<String> lore = new ArrayList<>();
- if(item.getItemMeta().getLore()!=null) {
- lore = item.getItemMeta().getLore();
- }
- lore.add("§a§l"+price+" ⛃");
- lore.add("§c§l"+sellPrice+" ⛃");
- lore.add("§8Нажми чтобы купить");
- m.setLore(lore);
- item.setItemMeta(m);
- inv.setItem(slot, item);
- items.put(item, stack);
- }
- @EventHandler
- protected void onClose(InventoryCloseEvent ev) {
- if(ev.getInventory()==null) return;
- if(transaction) {reopen((Player) ev.getPlayer());return;}
- if(ev.getView().getTopInventory().getTitle().equals(inv.getTitle())) {
- dispose();
- }
- }
- private boolean compare(ItemStack a, ItemStack b) {
- if(a.getType().equals(b.getType())) {
- if(a.getData().equals(b.getData())) {
- return true;
- }
- }
- return false;
- }
- private ItemStack getItemByValue(ItemStack item) {
- for(ItemStack a : items.keySet()) {
- if(compare(item, items.get(a))) {
- return a;
- }
- }
- return null;
- }
- @Override
- @EventHandler
- protected void onClick(InventoryClickEvent ev) {
- if(ev.getClickedInventory()==null) return;
- if(ev.getClickedInventory().getTitle().equals(inv.getTitle())) {
- ev.setCancelled(true);
- ClickType click = ev.getClick();
- int slot = ev.getRawSlot();
- if (click != ClickType.LEFT && click != ClickType.RIGHT) return;
- if (slot > inv.getContents().length - 1 || slot < 0) return;
- if(ev.getAction() != InventoryAction.PICKUP_ALL) {ev.setResult(Result.DENY);return;}
- if(ev.getCurrentItem()==null) return;
- NBTItem it = new NBTItem(ev.getCurrentItem());
- if(click.equals(ClickType.LEFT) & it.hasKey("price")) {
- buy(ev.getCurrentItem(), it.getInteger("price"), (Player) ev.getWhoClicked());
- PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer((Player) ev.getWhoClicked());
- //update((Player) ev.getWhoClicked(), getCoinsTitle(title, pp.getCoins()));
- }else if(click.equals(ClickType.RIGHT) & it.hasKey("sellPrice")){
- ItemStack item = getItemByValue(ev.getCurrentItem());
- if(ev.getCurrentItem().getAmount()>=item.getAmount())
- sell(ev.getCurrentItem(), item.getAmount(), it.getInteger("sellPrice"), (Player) ev.getWhoClicked());
- PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer((Player) ev.getWhoClicked());
- //update((Player) ev.getWhoClicked(), getCoinsTitle(title, pp.getCoins()));
- }
- }
- }
- private void buy(ItemStack stack, int price, Player pl) {
- if(stack == null) return;
- PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer(pl);
- if(pp.getCoins()>=price) {
- pp.removeCoins(price);
- pl.getInventory().addItem(items.get(stack));
- }
- }
- private void sell(ItemStack stack, int amount, int price, Player pl) {
- PrisonPlayer pp = PlayerManager.Instance.getPrisonPlayer(pl);
- pp.addCoins(price);
- if(stack.getAmount()-amount>0) {
- stack.setAmount(stack.getAmount()-amount);
- }else if(stack.getAmount()-amount==0){
- pl.getInventory().removeItem(stack);
- }
- }
- private static String getCoinsTitle(String title, int coins) {
- if((title+coins).length()<32) {
- String newTitle= title;
- for(int id = 0; id<32-(title+coins).length(); id++)
- newTitle+=" ";
- return newTitle+coins;
- }
- return title;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement