use of com.iridium.iridiumskyblock.shop.ShopItem.BuyCost in project IridiumSkyblock by Iridium-Development.
the class ShopManager method buy.
/**
* Buys an item for the Player in the shop.
* He might not have enough money to do so.
*
* @param player The player which wants to buy the item
* @param shopItem The item which is requested
* @param amount The amount of the item which is requested
*/
public void buy(Player player, ShopItem shopItem, int amount) {
BuyCost buyCost = shopItem.buyCost;
double vaultCost = calculateCost(amount, shopItem.defaultAmount, buyCost.vault);
int crystalCost = (int) calculateCost(amount, shopItem.defaultAmount, buyCost.crystals);
final Optional<Island> island = IridiumSkyblockAPI.getInstance().getUser(player).getIsland();
if (!island.isPresent()) {
player.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().noIsland.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix)));
return;
}
boolean canPurchase = PlayerUtils.canPurchase(player, island.get(), crystalCost, vaultCost);
if (!canPurchase) {
player.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().cannotAfford.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix)));
IridiumSkyblock.getInstance().getShop().failSound.play(player);
return;
}
ShopPurchaseEvent shopPurchaseEvent = new ShopPurchaseEvent(player, shopItem, amount);
Bukkit.getPluginManager().callEvent(shopPurchaseEvent);
if (shopPurchaseEvent.isCancelled())
return;
if (shopItem.command == null) {
// Add item to the player Inventory
if (!IridiumSkyblock.getInstance().getShop().dropItemWhenFull && !InventoryUtils.hasEmptySlot(player.getInventory())) {
player.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().inventoryFull.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix)));
return;
}
ItemStack itemStack = shopItem.type.parseItem();
itemStack.setAmount(amount);
if (shopItem.displayName != null && !shopItem.displayName.isEmpty()) {
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(StringUtils.color(shopItem.displayName));
itemStack.setItemMeta(itemMeta);
}
for (ItemStack dropItem : player.getInventory().addItem(itemStack).values()) {
player.getWorld().dropItem(player.getEyeLocation(), dropItem);
}
} else {
// Run the command
String command = shopItem.command.replace("%player%", player.getName()).replace("%amount%", String.valueOf(amount));
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
}
// Only run the withdrawing function when the user can buy it.
PlayerUtils.pay(player, island.get(), crystalCost, vaultCost);
IridiumSkyblock.getInstance().getShop().successSound.play(player);
player.sendMessage(StringUtils.color(IridiumSkyblock.getInstance().getMessages().successfullyBought.replace("%prefix%", IridiumSkyblock.getInstance().getConfiguration().prefix).replace("%amount%", String.valueOf(amount)).replace("%item%", StringUtils.color(shopItem.name)).replace("%vault_cost%", String.valueOf(vaultCost)).replace("%crystal_cost%", String.valueOf(crystalCost))));
}
Aggregations