2018-11-30 23:20:36 +01:00
|
|
|
package com.songoda.epicbuckets.shop;
|
|
|
|
|
|
|
|
import com.songoda.epicbuckets.EpicBuckets;
|
2019-01-01 16:41:04 +01:00
|
|
|
import com.songoda.epicbuckets.genbucket.GenbucketType;
|
2018-12-06 01:32:12 +01:00
|
|
|
import com.songoda.epicbuckets.util.*;
|
2018-12-04 01:59:20 +01:00
|
|
|
import org.bukkit.Bukkit;
|
2018-11-30 23:20:36 +01:00
|
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
2018-12-04 01:59:20 +01:00
|
|
|
import org.bukkit.entity.Player;
|
2018-12-03 13:04:33 +01:00
|
|
|
import org.bukkit.inventory.ItemStack;
|
2018-11-30 23:20:36 +01:00
|
|
|
|
2018-12-03 13:04:33 +01:00
|
|
|
import java.lang.reflect.Array;
|
2018-12-04 01:59:20 +01:00
|
|
|
import java.util.*;
|
2018-11-30 23:20:36 +01:00
|
|
|
|
|
|
|
public class ShopManager {
|
|
|
|
|
|
|
|
private HashMap<String, Shop> shopDatabase;
|
|
|
|
private FileConfiguration shops;
|
|
|
|
private EpicBuckets epicBuckets;
|
|
|
|
|
2018-12-02 21:46:26 +01:00
|
|
|
private String shopPath = "shops";
|
2018-12-04 01:59:20 +01:00
|
|
|
private String bulkShopPath = "BULK-SHOP-INVENTORY";
|
2018-11-30 23:20:36 +01:00
|
|
|
|
2018-12-03 13:04:33 +01:00
|
|
|
private ItemStack increaseItem;
|
|
|
|
private ItemStack decreaseItem;
|
|
|
|
private ItemStack purchaseItem;
|
|
|
|
|
|
|
|
private List<Integer> increaseSlots;
|
|
|
|
private List<Integer> decreaseSlots;
|
2018-12-06 01:32:12 +01:00
|
|
|
private List<Integer> bulkAmounts = new ArrayList<>(Arrays.asList(1, 10, 64));
|
2018-12-03 13:04:33 +01:00
|
|
|
private int purchaseSlot;
|
|
|
|
|
2018-12-04 01:59:20 +01:00
|
|
|
private String bulkInventoryName;
|
|
|
|
private int bulkInventorySize;
|
|
|
|
private boolean bulkFillInventory;
|
|
|
|
private int bulkBackButtonSlot;
|
|
|
|
private int bulkMainItemSlot;
|
|
|
|
|
2018-12-03 13:04:33 +01:00
|
|
|
private boolean useBackButtons;
|
2018-12-04 01:59:20 +01:00
|
|
|
private boolean closeAfterPurchase;
|
2018-12-03 13:04:33 +01:00
|
|
|
|
2018-11-30 23:20:36 +01:00
|
|
|
public ShopManager() {
|
|
|
|
epicBuckets = EpicBuckets.getInstance();
|
2018-12-04 01:59:20 +01:00
|
|
|
}
|
2018-11-30 23:20:36 +01:00
|
|
|
|
2018-12-04 01:59:20 +01:00
|
|
|
public void init() {
|
2018-12-06 01:32:12 +01:00
|
|
|
shops = epicBuckets.getConfigManager().getConfig("shops");
|
|
|
|
shopDatabase = new HashMap<>();
|
|
|
|
increaseSlots = new ArrayList<>();
|
|
|
|
decreaseSlots = new ArrayList<>();
|
2018-12-03 13:04:33 +01:00
|
|
|
loadData();
|
2018-11-30 23:20:36 +01:00
|
|
|
loadShops();
|
2018-12-03 13:04:33 +01:00
|
|
|
setupBulkShop();
|
|
|
|
}
|
|
|
|
|
2018-12-06 01:32:12 +01:00
|
|
|
public void reload() {
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
2018-12-03 13:04:33 +01:00
|
|
|
private void setupBulkShop() {
|
2018-12-04 01:59:20 +01:00
|
|
|
boolean i = Validator.isMaterial(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".material");
|
|
|
|
boolean d = Validator.isMaterial(epicBuckets.getConfigManager().getBulkShopDecreasePath() + ".material");
|
|
|
|
boolean p = Validator.isMaterial(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".material");
|
|
|
|
purchaseSlot = Validator.slot(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".slot"));
|
2018-12-03 13:04:33 +01:00
|
|
|
|
|
|
|
if (purchaseSlot == -1) {
|
|
|
|
purchaseSlot = 40;
|
|
|
|
}
|
|
|
|
|
|
|
|
increaseItem = ((!i) ? XMaterial.GREEN_STAINED_GLASS_PANE.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".material")).parseItem());
|
2018-12-04 01:59:20 +01:00
|
|
|
decreaseItem = ((!d) ? XMaterial.RED_STAINED_GLASS_PANE.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopDecreasePath() + ".material")).parseItem());
|
|
|
|
purchaseItem = ((!p) ? XMaterial.YELLOW_STAINED_GLASS.parseItem() : XMaterial.valueOf(epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".material")).parseItem());
|
|
|
|
purchaseItem = InventoryHelper.setDisplayName(purchaseItem, epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopPurchasePath() + ".name"));
|
2018-12-03 13:04:33 +01:00
|
|
|
|
|
|
|
for (String s : epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopIncreasePath() + ".slots").split(",")) {
|
|
|
|
increaseSlots.add(Integer.parseInt(s));
|
|
|
|
}
|
|
|
|
for (String s : epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getBulkShopDecreasePath() + ".slots").split(",")) {
|
2018-12-04 01:59:20 +01:00
|
|
|
decreaseSlots.add(Integer.parseInt(s));
|
2018-12-03 13:04:33 +01:00
|
|
|
}
|
2018-12-04 01:59:20 +01:00
|
|
|
|
|
|
|
|
2018-12-03 13:04:33 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private void loadData() {
|
|
|
|
useBackButtons = shops.getBoolean("use-back-buttons");
|
2018-12-04 01:59:20 +01:00
|
|
|
closeAfterPurchase = epicBuckets.getConfig().getBoolean("CLOSE-GUI-AFTER-PURCHASE");
|
|
|
|
bulkInventoryName = epicBuckets.getConfig().getString(bulkShopPath + ".inventory-name");
|
|
|
|
bulkInventorySize = epicBuckets.getConfig().getInt(bulkShopPath + ".size");
|
|
|
|
bulkBackButtonSlot = epicBuckets.getConfig().getInt(bulkShopPath + ".return-back-slot");
|
|
|
|
bulkFillInventory = epicBuckets.getConfig().getBoolean(bulkShopPath + ".fill");
|
|
|
|
bulkMainItemSlot = epicBuckets.getConfig().getInt(bulkShopPath + ".main-item-slot");
|
2018-11-30 23:20:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
private void loadShops() {
|
2018-12-07 19:53:10 +01:00
|
|
|
System.out.println("Loading shops..");
|
2018-12-04 01:59:20 +01:00
|
|
|
for (String key : epicBuckets.getConfig().getConfigurationSection(epicBuckets.getConfigManager().getMenuItemsPath()).getKeys(false)) {
|
|
|
|
if (!epicBuckets.getConfig().isConfigurationSection(epicBuckets.getConfigManager().getMenuItemsPath() + "." + key)) {
|
2018-11-30 23:20:36 +01:00
|
|
|
continue;
|
|
|
|
}
|
2018-12-04 01:59:20 +01:00
|
|
|
shopDatabase.put(key, new Shop(key, epicBuckets.getConfig().getString(epicBuckets.getConfigManager().getMenuItemsPath() + "." + key + ".shop"), epicBuckets.getConfigManager().getMenuItemsPath() + "." + key));
|
2018-11-30 23:20:36 +01:00
|
|
|
}
|
2018-12-07 19:53:10 +01:00
|
|
|
System.out.println("Loaded " + shopDatabase.size() + " shop(s)");
|
2018-11-30 23:20:36 +01:00
|
|
|
}
|
|
|
|
|
2018-12-06 01:32:12 +01:00
|
|
|
public boolean inventoryFull(Player buyer) {
|
|
|
|
if (buyer.getInventory().firstEmpty() == -1) {
|
|
|
|
buyer.sendMessage(ChatUtil.colorPrefix(epicBuckets.getLocale().getMessage("event.purchase.inventoryfull")));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-12-04 23:24:24 +01:00
|
|
|
public boolean hasEnoughFunds(Player buyer, SubShop s, int amount) {
|
|
|
|
if (epicBuckets.getEcon().getBalance(Bukkit.getOfflinePlayer(buyer.getUniqueId())) >= (s.getPrice() * amount)) return true;
|
2018-12-06 01:32:12 +01:00
|
|
|
buyer.sendMessage(ChatUtil.colorPrefix(epicBuckets.getLocale().getMessage("event.purchase.notenoughmoney").replace("%money%", (s.getPrice() * amount) - epicBuckets.getBalance(buyer) + "")));
|
2018-12-04 01:59:20 +01:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-12-04 23:24:24 +01:00
|
|
|
public void buyFromShop(Player buyer, SubShop s, int amount) {
|
2018-12-29 21:32:18 +01:00
|
|
|
epicBuckets.getEcon().withdrawPlayer(Bukkit.getOfflinePlayer(buyer.getUniqueId()), s.getPrice() * amount);
|
2018-12-26 19:49:39 +01:00
|
|
|
giveGenbucketToPlayer(buyer, s, amount);
|
|
|
|
}
|
2018-12-04 23:24:24 +01:00
|
|
|
|
2018-12-26 19:49:39 +01:00
|
|
|
public void giveGenbucketToPlayer(Player buyer, SubShop s, int amount) {
|
2018-12-04 23:24:24 +01:00
|
|
|
ItemStack genBucket = s.getGenShopItem();
|
|
|
|
genBucket.setAmount(amount);
|
|
|
|
buyer.getInventory().addItem(NBTHelper.addGenbucketData(genBucket, s.getParent().getTrait(), s));
|
2018-12-04 01:59:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public Collection<Shop> getShops() {
|
|
|
|
return shopDatabase.values();
|
2018-12-02 21:46:26 +01:00
|
|
|
}
|
|
|
|
|
2018-12-04 23:24:24 +01:00
|
|
|
public Shop getShop(String shop) {
|
|
|
|
return shopDatabase.get(shop);
|
|
|
|
}
|
|
|
|
|
2019-01-01 16:41:04 +01:00
|
|
|
public Shop getShop(GenbucketType genbucketType) {
|
|
|
|
for (Shop shop : shopDatabase.values()) {
|
|
|
|
if (shop.getTrait() == genbucketType) return shop;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2018-12-02 21:46:26 +01:00
|
|
|
public String getShopPath() {
|
|
|
|
return shopPath;
|
|
|
|
}
|
|
|
|
|
2018-12-03 13:12:57 +01:00
|
|
|
public ItemStack getIncreaseItem() {
|
|
|
|
return increaseItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ItemStack getDecreaseItem() {
|
|
|
|
return decreaseItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
public ItemStack getPurchaseItem() {
|
|
|
|
return purchaseItem;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<Integer> getIncreaseSlots() {
|
|
|
|
return increaseSlots;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<Integer> getDecreaseSlots() {
|
|
|
|
return decreaseSlots;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getPurchaseSlot() {
|
|
|
|
return purchaseSlot;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isUseBackButtons() {
|
|
|
|
return useBackButtons;
|
|
|
|
}
|
|
|
|
|
2018-12-04 01:59:20 +01:00
|
|
|
public boolean isCloseAfterPurchase() {
|
|
|
|
return closeAfterPurchase;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getBulkInventoryName() {
|
|
|
|
return bulkInventoryName;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getBulkInventorySize() {
|
|
|
|
return bulkInventorySize;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isBulkFillInventory() {
|
|
|
|
return bulkFillInventory;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getBulkBackButtonSlot() {
|
|
|
|
return bulkBackButtonSlot;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getBulkMainItemSlot() {
|
|
|
|
return bulkMainItemSlot;
|
|
|
|
}
|
2018-12-04 23:24:24 +01:00
|
|
|
|
|
|
|
public List<Integer> getBulkAmounts() {
|
|
|
|
return bulkAmounts;
|
|
|
|
}
|
2019-01-14 21:15:26 +01:00
|
|
|
|
|
|
|
public void setShopDatabase(HashMap<String, Shop> shopDatabase) {
|
|
|
|
this.shopDatabase = shopDatabase;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setBulkFillInventory(boolean bulkFillInventory) {
|
|
|
|
this.bulkFillInventory = bulkFillInventory;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setUseBackButtons(boolean useBackButtons) {
|
|
|
|
this.useBackButtons = useBackButtons;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setCloseAfterPurchase(boolean closeAfterPurchase) {
|
|
|
|
this.closeAfterPurchase = closeAfterPurchase;
|
|
|
|
}
|
2018-11-30 23:20:36 +01:00
|
|
|
}
|