From 09fd11433be172284d9af73319b130211e4318ae Mon Sep 17 00:00:00 2001 From: 7sat <49030779+7sat@users.noreply.github.com> Date: Fri, 1 Apr 2022 20:38:56 +0900 Subject: [PATCH] Allow null for player parameter of Quick sell API. --- pom.xml | 2 +- .../java/me/sat7/dynamicshop/DynaShopAPI.java | 7 + .../sat7/dynamicshop/transactions/Sell.java | 137 ++++++++++-------- .../sat7/dynamicshop/utilities/ShopUtil.java | 11 +- 4 files changed, 95 insertions(+), 62 deletions(-) diff --git a/pom.xml b/pom.xml index 2fd976b..3c3ad9c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.sat7 DynamicShop - 3.6.4 + 3.6.5 jar DynamicShop diff --git a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java index 814d52f..0706b32 100644 --- a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java +++ b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java @@ -405,6 +405,13 @@ public static String[] FindTheBestShopToSell(Player player, ItemStack itemStack, return ret; } + /** + * Quick Sell + * + * @param player seller. This can be null. If null, permission and time are not checked. + * @param itemStack Item to sell) + * @return price sum. + */ public static double QuickSell(Player player, ItemStack itemStack) { String[] ret = ShopUtil.FindTheBestShopToSell(player, itemStack); diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java index 04b5bf4..b407dee 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java @@ -40,63 +40,72 @@ public static double quickSellItem(Player player, ItemStack tempIS, String shopN // 실제 판매 가능량 확인 int tradeAmount; - if (isShiftClick) + if (player != null) { - int amount = 0; - for (ItemStack item : player.getInventory().getStorageContents()) + if (isShiftClick) { - if (item == null) - continue; - - if (item.isSimilar(tempIS)) + int amount = 0; + for (ItemStack item : player.getInventory().getStorageContents()) { - if (maxStock == -1) - { - amount += item.getAmount(); - player.getInventory().removeItem(item); - } else + if (item == null) + continue; + + if (item.isSimilar(tempIS)) { - int tempAmount = Clamp(tempIS.getAmount(), 0, maxStock - stockOld); - int itemLeft = item.getAmount() - tempAmount; - if (itemLeft <= 0) + if (maxStock == -1) { + amount += item.getAmount(); player.getInventory().removeItem(item); } else { - item.setAmount(itemLeft); + int tempAmount = Clamp(tempIS.getAmount(), 0, maxStock - stockOld); + int itemLeft = item.getAmount() - tempAmount; + if (itemLeft <= 0) + { + player.getInventory().removeItem(item); + } else + { + item.setAmount(itemLeft); + } + amount += tempAmount; } - amount += tempAmount; } - } - if (maxStock != -1 && amount + stockOld <= maxStock) - break; - } - tradeAmount = amount; - } else - { - if (maxStock == -1) - { - tradeAmount = player.getInventory().getItem(slot).getAmount(); - player.getInventory().setItem(slot, null); + if (maxStock != -1 && amount + stockOld <= maxStock) + break; + } + tradeAmount = amount; } else { - tradeAmount = Clamp(tempIS.getAmount(), 0, maxStock - stockOld); - int itemAmountOld = player.getInventory().getItem(slot).getAmount(); - int itemLeft = itemAmountOld - tradeAmount; - - if (itemLeft <= 0) + if (maxStock == -1) + { + tradeAmount = player.getInventory().getItem(slot).getAmount(); player.getInventory().setItem(slot, null); - else - player.getInventory().getItem(slot).setAmount(itemLeft); + } else + { + tradeAmount = Clamp(tempIS.getAmount(), 0, maxStock - stockOld); + int itemAmountOld = player.getInventory().getItem(slot).getAmount(); + int itemLeft = itemAmountOld - tradeAmount; + + if (itemLeft <= 0) + player.getInventory().setItem(slot, null); + else + player.getInventory().getItem(slot).setAmount(itemLeft); + } } + player.updateInventory(); + } + else + { + tradeAmount = tempIS.getAmount(); } - player.updateInventory(); // 판매할 아이탬이 없음 if (tradeAmount == 0) { - player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.NO_ITEM_TO_SELL")); + if(player != null) + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.NO_ITEM_TO_SELL")); + return 0; } @@ -110,40 +119,54 @@ public static double quickSellItem(Player player, ItemStack tempIS, String shopN // 실제 거래부---------- Economy econ = DynamicShop.getEconomy(); - EconomyResponse r = DynamicShop.getEconomy().depositPlayer(player, priceSum); + EconomyResponse r = null; + if(player != null) + r = DynamicShop.getEconomy().depositPlayer(player, priceSum); - if (r.transactionSuccess()) + if (player == null || r.transactionSuccess()) { data.save(); //로그 기록 - LogUtil.addLog(shopName, tempIS.getType().toString(), -tradeAmount, priceSum, "vault", player.getName()); - - boolean useLocalizedName = DynamicShop.plugin.getConfig().getBoolean("UI.LocalizedItemName"); - String message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SELL_SUCCESS", !useLocalizedName) - .replace("{amount}", Integer.toString(tradeAmount)) - .replace("{price}", n(r.amount)) - .replace("{bal}", n(econ.getBalance((player)))); + LogUtil.addLog(shopName, tempIS.getType().toString(), -tradeAmount, priceSum, "vault", player != null ? player.getName() : shopName); - if (useLocalizedName) - { - message = message.replace("{item}", ""); - LangUtil.sendMessageWithLocalizedItemName(player, message, tempIS.getType()); - } else + if (player != null) { - message = message.replace("{item}", ItemsUtil.getBeautifiedName(tempIS.getType())); - player.sendMessage(message); - } + boolean useLocalizedName = DynamicShop.plugin.getConfig().getBoolean("UI.LocalizedItemName"); + String message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SELL_SUCCESS", !useLocalizedName) + .replace("{amount}", Integer.toString(tradeAmount)) + .replace("{price}", n(r.amount)) + .replace("{bal}", n(econ.getBalance((player)))); + + if (useLocalizedName) + { + message = message.replace("{item}", ""); + LangUtil.sendMessageWithLocalizedItemName(player, message, tempIS.getType()); + } else + { + message = message.replace("{item}", ItemsUtil.getBeautifiedName(tempIS.getType())); + player.sendMessage(message); + } - player.playSound(player.getLocation(), Sound.valueOf("ENTITY_EXPERIENCE_ORB_PICKUP"), 1, 1); + player.playSound(player.getLocation(), Sound.valueOf("ENTITY_EXPERIENCE_ORB_PICKUP"), 1, 1); + } if (data.get().contains("Options.Balance")) { ShopUtil.addShopBalance(shopName, priceSum * -1); } - ShopBuySellEvent event = new ShopBuySellEvent(false, priceBuyOld, Calc.getCurrentPrice(shopName, String.valueOf(tradeIdx), true), priceSellOld, DynaShopAPI.getSellPrice(shopName, tempIS), stockOld, DynaShopAPI.getStock(shopName, tempIS), DynaShopAPI.getMedian(shopName, tempIS), shopName, tempIS, player); - Bukkit.getPluginManager().callEvent(event); + if (player != null) + { + ShopBuySellEvent event = new ShopBuySellEvent(false, priceBuyOld, Calc.getCurrentPrice(shopName, String.valueOf(tradeIdx), true), + priceSellOld, + DynaShopAPI.getSellPrice(shopName, tempIS), + stockOld, + DynaShopAPI.getStock(shopName, tempIS), + DynaShopAPI.getMedian(shopName, tempIS), + shopName, tempIS, player); + Bukkit.getPluginManager().callEvent(event); + } } else { player.sendMessage(String.format("[Vault] An error occured: %s", r.errorMessage)); diff --git a/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java index bce2c1b..b5a4f5c 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java @@ -541,10 +541,13 @@ public static String[] FindTheBestShopToSell(Player player, ItemStack itemStack) CustomConfig data = entry.getValue(); // 권한 없는 상점 - String permission = data.get().getString("Options.permission"); - if (permission != null && permission.length() > 0 && !player.hasPermission(permission) && !player.hasPermission(permission + ".sell")) + if(player != null) { - continue; + String permission = data.get().getString("Options.permission"); + if (permission != null && permission.length() > 0 && !player.hasPermission(permission) && !player.hasPermission(permission + ".sell")) + { + continue; + } } // 비활성화된 상점 @@ -557,7 +560,7 @@ public static String[] FindTheBestShopToSell(Player player, ItemStack itemStack) continue; // 영업시간 확인 - if (!CheckShopHour(entry.getKey(), player)) + if (player != null && !CheckShopHour(entry.getKey(), player)) continue; int sameItemIdx = ShopUtil.findItemFromShop(entry.getKey(), itemStack);