package tntrun.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.RegisteredServiceProvider;
import tntrun.TNTRun;
import tntrun.messages.Messages;
public class Shop implements Listener{
private TNTRun pl;
public Shop(TNTRun plugin){
pl = plugin;
ShopFiles.setShopItems();
invsize = pl.getConfig().getInt("shop.size");
invname = pl.getConfig().getString("shop.name").replace("&", "§");
}
public static HashMap<Integer, Integer> itemSlot = new HashMap<Integer, Integer>();
public static HashMap<Player, ArrayList<ItemStack>> pitems = new HashMap<Player, ArrayList<ItemStack>>();
public static List<Player> bought = new ArrayList<Player>();
public static String invname;
public static int invsize;
private void giveItem(int slot, Player player, String title) {
int kit = itemSlot.get(slot);
ArrayList<ItemStack> item = new ArrayList<ItemStack>();
FileConfiguration cfg = ShopFiles.getShopConfiguration();
for(String items : cfg.getConfigurationSection(kit + ".items").getKeys(false)) {
try {
int ID = Integer.valueOf(cfg.getInt(kit + ".items." + items + ".ID"));
int subID = Integer.valueOf(cfg.getInt(kit + ".items." + items + ".subID"));
int amount = Integer.valueOf(cfg.getInt(kit + ".items." + items + ".amount"));
String displayname = cfg.getString(kit + ".items." + items + ".displayname").replace("&", "§");
List<String> lore = cfg.getStringList(kit + ".items." + items + ".lore");
List<String> enchantments = cfg.getStringList(kit + ".items." + items + ".enchantments");
if(!bought.contains(player)){
bought.add(player);
}
item.add(getItem(ID, subID, amount, displayname, lore, enchantments));
player.updateInventory();
player.closeInventory();
} catch(Exception e) {
e.printStackTrace();
}
}
pitems.put(player, item);
}
private ItemStack getItem(int ID, int subID, int amount, String displayname, List<String> lore, List<String> enchantments){
ItemStack item = new ItemStack(ID, amount, (short)subID);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(displayname);
if ((lore != null) && (!lore.isEmpty())) {
meta.setLore(lore);
}
if ((enchantments != null) && (!enchantments.isEmpty())) {
for (String enchs : enchantments) {
String[] array = enchs.split(":");
String ench = array[0];
int level = Integer.valueOf(array[1]).intValue();
Enchantment realEnch = Enchantment.getByName(ench);
meta.addEnchant(realEnch, level, true);
}
}
item.setItemMeta(meta);
return item;
}
@EventHandler
public void onClick(InventoryClickEvent e){
Player p = (Player)e.getWhoClicked();
if (e.getInventory().getName().equals(invname)) {
e.setCancelled(true);
if ((e.getSlot() == e.getRawSlot()) &&
(e.getCurrentItem() != null)) {
ItemStack current = e.getCurrentItem();
if ((current.hasItemMeta()) && (current.getItemMeta().hasDisplayName())) {
int kit = ((Integer)itemSlot.get(Integer.valueOf(e.getSlot()))).intValue();
FileConfiguration cfg = ShopFiles.getShopConfiguration();
String permission = cfg.getString(kit + ".permission");
if(bought.contains(p)){
p.sendMessage(Messages.alreadyboughtitem.replace("&", "§"));
TNTRun.getInstance().sound.WITHER_HURT(p, 5, 999);
return;
}
if (p.hasPermission(permission)) {
String title = current.getItemMeta().getDisplayName();
int cost = cfg.getInt(kit + ".cost");
if(cfg.getInt(kit + ".ID") == 288){
if((pl.getConfig().getInt("shop.doublejump.maxdoublejumps") <= pl.getConfig().getInt("doublejumps." + p.getName()))){
p.sendMessage(Messages.alreadyboughtitem.replace("&", "§"));
TNTRun.getInstance().sound.WITHER_HURT(p, 5, 999);
return;
}
}
if(hasMoney(cost, p)) {
p.sendMessage(Messages.playerboughtitem.replace("&", "§").replace("{ITEM}", title).replace("{MONEY}", cost + ""));
p.sendMessage(Messages.playerboughtwait.replace("&", "§"));
TNTRun.getInstance().sound.NOTE_PLING(p, 5, 10);
}else{
p.sendMessage(Messages.notenoughtmoney.replace("&", "§").replace("{MONEY}", cost + ""));
TNTRun.getInstance().sound.WITHER_HURT(p, 5, 999);
return;
}
if(cfg.getInt(kit + ".ID") == 288){
if(pl.getConfig().get("doublejumps." + p.getName()) == null){
pl.getConfig().set("doublejumps." + p.getName(), 1);
}else{
pl.getConfig().set("doublejumps." + p.getName(), pl.getConfig().getInt("doublejumps." + p.getName()) + 1);
}
pl.saveConfig();
p.sendMessage(Messages.playerboughtitem.replace("&", "§").replace("{ITEM}", title).replace("{MONEY}", cost + ""));
return;
}
giveItem(e.getSlot(), p, current.getItemMeta().getDisplayName());
} else {
p.closeInventory();
p.sendMessage(Messages.nopermission.replace("&", "§"));
TNTRun.getInstance().sound.WITHER_HURT(p, 5, 999);
}
}
}
}
}
private Object economy = null;
private boolean hasMoney(int moneyneed, Player player) {
if (Bukkit.getPluginManager().getPlugin("Vault") != null) {
RegisteredServiceProvider<Economy> economyProvider = Bukkit.getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
if (economyProvider != null) {
economy = economyProvider.getProvider();
}
}
if (economy != null) {
Economy econ = (Economy) economy;
double pmoney = econ.getBalance(player.getName());
if(pmoney >= moneyneed){
econ.withdrawPlayer(player.getName(), moneyneed);
return true;
}
}
return false;
}
public static void setItems(Inventory inventory){
FileConfiguration cfg = ShopFiles.getShopConfiguration();
int slot = 0;
for (String kitCounter : cfg.getConfigurationSection("").getKeys(false)) {
String title = cfg.getString(kitCounter + ".name").replace("&", "§");
List<String> lore = new ArrayList<String>();
for (String loreLines : cfg.getStringList(kitCounter + ".lore")) {
loreLines = loreLines.replace("&", "§");
lore.add(loreLines);
}
int ID = cfg.getInt(kitCounter + ".ID");
int subID = cfg.getInt(kitCounter + ".subID");
int amount = cfg.getInt(kitCounter + ".amount");
inventory.setItem(slot, getItem(ID, subID, title, lore, amount));
itemSlot.put(Integer.valueOf(slot), Integer.valueOf(kitCounter));
slot++;
}
}
private static ItemStack getItem(int ID, int subID, String title, List<String> lore, int amount){
ItemStack item = new ItemStack(ID, amount, (short)subID);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(title);
if ((lore != null) && (!lore.isEmpty())) {
meta.setLore(lore);
}
item.setItemMeta(meta);
return item;
}
}