tweaked conditionals for blockshop with full inventory checks, low funds checks, and quantity/price checks and reloads
This commit is contained in:
parent
4cb1e717fb
commit
e2e5e999f5
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -12,5 +12,6 @@ shop:
|
||||
material: OAK_PLANKS
|
||||
price: 15
|
||||
display_name: "Oak Planks"
|
||||
poor: "you're poor..."
|
||||
pagination:
|
||||
max_items_per_page: 45 # Max items to display per page
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -164,8 +164,11 @@ public class BlockShop implements Listener {
|
||||
ItemStack clickedItem = event.getCurrentItem();
|
||||
if (clickedItem != null && clickedItem.getType() != Material.AIR) {
|
||||
double price = getPrice(clickedItem);
|
||||
if (economy.has(player, price)) {
|
||||
economy.withdrawPlayer(player, price);
|
||||
if (!economy.has(player, price)) {
|
||||
player.sendMessage(ChatColor.RED + getConfigLine("poor", "You don't have enough money to buy this."));
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new ItemStack with the default meta
|
||||
ItemStack sold = new ItemStack(clickedItem.getType(), clickedItem.getAmount());
|
||||
|
||||
@ -176,13 +179,42 @@ public class BlockShop implements Listener {
|
||||
defaultMeta.setLore(null); // Remove lore
|
||||
sold.setItemMeta(defaultMeta);
|
||||
}
|
||||
player.getInventory().addItem(sold);
|
||||
player.sendMessage(ChatColor.GREEN + "You bought " + sold.getType() + " for $" + price);
|
||||
} else {
|
||||
player.sendMessage(ChatColor.RED + "You don't have enough money to buy this.");
|
||||
|
||||
// Check if player's inventory has space before proceeding
|
||||
HashMap<Integer, ItemStack> leftover = player.getInventory().addItem(sold);
|
||||
if (!leftover.isEmpty()) {
|
||||
// If there are leftover items, inventory is full
|
||||
player.sendMessage(ChatColor.RED + getConfigLine("inventory_full", "Your inventory is full! Purchase failed."));
|
||||
return;
|
||||
}
|
||||
|
||||
// If inventory had space, finalize the purchase
|
||||
economy.withdrawPlayer(player, price);
|
||||
player.sendMessage(ColorKey("&aYou bought &b" + clickedItem.getAmount() + " &7" +
|
||||
String.valueOf(sold.getType()).toLowerCase().replace("_", " ") +
|
||||
"&a for &6$" + price));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String ColorKey(String t) {
|
||||
char searchChar = '&'; // Character to search for
|
||||
char replacementChar = '§'; // Character to replace with
|
||||
StringBuilder sb = new StringBuilder(t);
|
||||
// Search for the character in the StringBuilder
|
||||
int index = sb.indexOf(String.valueOf(searchChar));
|
||||
|
||||
// Replace the character if found
|
||||
for (int j = 0; j < sb.length(); j++) {
|
||||
if (sb.charAt(j) == searchChar) {
|
||||
sb.setCharAt(j, replacementChar);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
public String getConfigLine(String source, String dfault) {
|
||||
plugin.reloadConfig();
|
||||
return config != null ? config.getString(source, dfault) : dfault;
|
||||
}
|
||||
|
||||
// Helper method to retrieve the price of an item (can be customized to use a config file for prices)
|
||||
|
@ -12,5 +12,6 @@ shop:
|
||||
material: OAK_PLANKS
|
||||
price: 15
|
||||
display_name: "Oak Planks"
|
||||
poor: "you're poor..."
|
||||
pagination:
|
||||
max_items_per_page: 45 # Max items to display per page
|
||||
|
Loading…
Reference in New Issue
Block a user