From 061d5084950999cf6f138f1a3ffe85050c175c44 Mon Sep 17 00:00:00 2001 From: 7sat <49030779+7sat@users.noreply.github.com> Date: Sun, 19 Feb 2023 22:25:33 +0900 Subject: [PATCH] Multiple sell command support, PlayerPoints Support, Etc --- pom.xml | 12 +- .../java/me/sat7/dynamicshop/DynaShopAPI.java | 21 ++- .../java/me/sat7/dynamicshop/DynamicShop.java | 66 ++++++- .../me/sat7/dynamicshop/commands/Help.java | 2 + .../dynamicshop/commands/shop/Account.java | 35 +++- .../sat7/dynamicshop/commands/shop/Add.java | 4 +- .../dynamicshop/commands/shop/AddHand.java | 4 +- .../dynamicshop/commands/shop/Command.java | 165 ++++++++++++------ .../sat7/dynamicshop/commands/shop/Edit.java | 4 +- .../dynamicshop/commands/shop/EditAll.java | 2 +- .../dynamicshop/commands/shop/Enable.java | 2 +- .../sat7/dynamicshop/commands/shop/Flag.java | 3 +- .../commands/shop/Fluctuation.java | 4 +- .../sat7/dynamicshop/commands/shop/Log.java | 4 +- .../dynamicshop/commands/shop/MaxPage.java | 2 +- .../dynamicshop/commands/shop/Permission.java | 2 +- .../dynamicshop/commands/shop/Position.java | 2 +- .../dynamicshop/commands/shop/SellBuy.java | 2 +- .../dynamicshop/commands/shop/ShopHours.java | 2 +- .../commands/shop/StockStabilizing.java | 4 +- .../dynamicshop/economyhook/JobsHook.java | 69 ++++++++ .../economyhook/PlayerpointHook.java | 55 ++++++ .../me/sat7/dynamicshop/events/OnChat.java | 26 ++- .../sat7/dynamicshop/events/OnSignClick.java | 32 ++-- .../sat7/dynamicshop/files/CustomConfig.java | 1 + .../me/sat7/dynamicshop/guis/ItemTrade.java | 41 +++-- .../java/me/sat7/dynamicshop/guis/Shop.java | 7 +- .../sat7/dynamicshop/guis/ShopSettings.java | 102 +++++++++-- .../me/sat7/dynamicshop/transactions/Buy.java | 108 +++++++++--- .../sat7/dynamicshop/transactions/Calc.java | 15 +- .../sat7/dynamicshop/transactions/Sell.java | 134 ++++++++------ .../dynamicshop/utilities/ConfigUtil.java | 2 +- .../sat7/dynamicshop/utilities/LangUtil.java | 27 ++- .../sat7/dynamicshop/utilities/ShopUtil.java | 19 +- .../utilities/TabCompleteUtil.java | 11 ++ src/main/resources/plugin.yml | 2 +- 36 files changed, 753 insertions(+), 240 deletions(-) create mode 100644 src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java create mode 100644 src/main/java/me/sat7/dynamicshop/economyhook/PlayerpointHook.java diff --git a/pom.xml b/pom.xml index 3bbc440..f8bd812 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.sat7 DynamicShop - 3.9.0 + 3.10.0 jar DynamicShop @@ -100,6 +100,10 @@ placeholderapi https://repo.extendedclip.com/content/repositories/placeholderapi/ + + rosewood-repo + https://repo.rosewooddev.io/repository/public/ + @@ -160,5 +164,11 @@ LocaleLib 2.4 + + org.black_ixx + playerpoints + 3.2.5 + provided + diff --git a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java index 4af9773..b0c6863 100644 --- a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java +++ b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java @@ -241,7 +241,7 @@ public static ArrayList getShopItems(@NonNull String shopName) if (validateShopName(shopName)) { CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); - + ArrayList list = new ArrayList<>(); for (String s : data.get().getKeys(false)) { @@ -402,6 +402,25 @@ public static boolean isJobsPointShop(@NonNull String shopName) throws IllegalAr } } + /** + * Get whether a shop is for Vault money or Player points + * + * @param shopName The shop to check the type of + * @return True if it is a Player Point shop, False if it is a Vault economy money shop + * @throws IllegalArgumentException When the shop does not exist + */ + public static boolean isPlayerPointShop(@NonNull String shopName) throws IllegalArgumentException + { + if (validateShopName(shopName)) + { + CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); + return data.get().contains("Options.flag.playerpoint"); + } else + { + throw new IllegalArgumentException("Shop: " + shopName + " does not exist"); + } + } + /** * Check if a shop exists * diff --git a/src/main/java/me/sat7/dynamicshop/DynamicShop.java b/src/main/java/me/sat7/dynamicshop/DynamicShop.java index e764c61..1fa04de 100644 --- a/src/main/java/me/sat7/dynamicshop/DynamicShop.java +++ b/src/main/java/me/sat7/dynamicshop/DynamicShop.java @@ -6,12 +6,13 @@ import me.sat7.dynamicshop.commands.Optional; import me.sat7.dynamicshop.commands.Root; import me.sat7.dynamicshop.constants.Constants; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.events.*; import me.sat7.dynamicshop.files.CustomConfig; import me.sat7.dynamicshop.guis.QuickSell; import me.sat7.dynamicshop.guis.StartPage; import me.sat7.dynamicshop.guis.UIManager; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import me.sat7.dynamicshop.utilities.*; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ClickEvent; @@ -20,7 +21,10 @@ import net.md_5.bungee.api.chat.TextComponent; import net.milkbowl.vault.economy.Economy; +import org.black_ixx.playerpoints.PlayerPoints; +import org.black_ixx.playerpoints.PlayerPointsAPI; import org.bstats.bukkit.Metrics; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -46,6 +50,8 @@ public static Economy getEconomy() return econ; } + public static PlayerPointsAPI ppAPI; + public static DynamicShop plugin; public static ConsoleCommandSender console; @@ -151,6 +157,7 @@ private void Init() startSaveLogsTask(); startCullLogsTask(); hookIntoJobs(); + hookIntoPlayerPoints(); InitPapi(); // 완료 @@ -171,7 +178,7 @@ private void SetupVault() } else { - console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " Vault Found"); + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'Vault' Found"); } SetupRSP(); @@ -279,11 +286,11 @@ private void InitPapi() isPapiExist = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null; if(isPapiExist) { - console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " PlaceholderAPI Found"); + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'PlaceholderAPI' Found"); } else { - console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " PlaceholderAPI Not Found"); + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'PlaceholderAPI' Not Found"); } } @@ -342,15 +349,31 @@ private void hookIntoJobs() // Jobs if (getServer().getPluginManager().getPlugin("Jobs") == null) { - console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " Jobs Reborn Not Found"); + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'Jobs Reborn' Not Found"); JobsHook.jobsRebornActive = false; } else { - console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " Jobs Reborn Found"); + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'Jobs Reborn' Found"); JobsHook.jobsRebornActive = true; } } + private void hookIntoPlayerPoints() + { + if (Bukkit.getPluginManager().isPluginEnabled("PlayerPoints")) + { + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'PlayerPoints' Found"); + ppAPI = PlayerPoints.getInstance().getAPI(); + PlayerpointHook.isPPActive = true; + + } + else + { + console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " 'PlayerPoints' Not Found"); + PlayerpointHook.isPPActive = false; + } + } + private void initCommands() { // 명령어 등록 (개별 클레스로 되어있는것들) @@ -409,10 +432,41 @@ private void InitConfig() QuickSell.quickSellGui = new CustomConfig(); QuickSell.SetupQuickSellGUIFile(); + ConfigUpdate(); + getConfig().set("Version", configVersion); saveConfig(); } + private void ConfigUpdate() + { + int userVersion = getConfig().getInt("Version"); + if (userVersion == 3) + { + for(Map.Entry entry : ShopUtil.shopConfigFiles.entrySet()) + { + ConfigurationSection cmdCS = entry.getValue().get().getConfigurationSection("Options.command"); + if(cmdCS == null) + continue; + + boolean somethingChanged = false; + if(cmdCS.contains("sell")) + { + cmdCS.set("sell.0", cmdCS.get("sell")); + somethingChanged = true; + } + if(cmdCS.contains("buy")) + { + cmdCS.set("buy.0", cmdCS.get("buy")); + somethingChanged = true; + } + + if(somethingChanged) + entry.getValue().save(); + } + } + } + private void setupUserFile() { ccUser.setup("User", null); diff --git a/src/main/java/me/sat7/dynamicshop/commands/Help.java b/src/main/java/me/sat7/dynamicshop/commands/Help.java index 7ff1600..e882651 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Help.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Help.java @@ -1,5 +1,6 @@ package me.sat7.dynamicshop.commands; +import me.sat7.dynamicshop.commands.shop.Command; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -186,6 +187,7 @@ public static void showHelp(String helpcode, Player player, String[] args) } else if (helpcode.equals("command")) { CMDManager.command.SendHelpMessage(player); + Command.PrintCurrentState(player, Shop.GetShopName(args), true, true); } else if (helpcode.equals("account")) { CMDManager.account.SendHelpMessage(player); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java index 4208a4e..42c353d 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java @@ -3,9 +3,9 @@ import me.sat7.dynamicshop.DynamicShop; import me.sat7.dynamicshop.commands.DSCMD; import me.sat7.dynamicshop.commands.Shop; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.files.CustomConfig; -import me.sat7.dynamicshop.jobshook.JobsHook; -import me.sat7.dynamicshop.utilities.LangUtil; +import me.sat7.dynamicshop.economyhook.JobsHook; import me.sat7.dynamicshop.utilities.ShopUtil; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.EconomyResponse; @@ -31,9 +31,9 @@ public Account() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "account")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop account set "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop account linkto "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop account transfer "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... account set "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... account linkto "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... account transfer "); player.sendMessage(" - " + t(player, "HELP.ACCOUNT")); player.sendMessage(""); @@ -117,7 +117,8 @@ public void RunCMD(String[] args, CommandSender sender) } // 출발 상점과 도착 상점의 통화 유형이 다름 - if (shopData.get().contains("Options.flag.jobpoint") != targetShopData.get().contains("Options.flag.jobpoint")) + if ((shopData.get().contains("Options.flag.jobpoint") != targetShopData.get().contains("Options.flag.jobpoint")) || + (shopData.get().contains("Options.flag.playerpoint") != targetShopData.get().contains("Options.flag.playerpoint")) ) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_DIFF_CURRENCY")); return; @@ -160,7 +161,13 @@ public void RunCMD(String[] args, CommandSender sender) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.NOT_ENOUGH_POINT"). replace("{bal}", n(ShopUtil.getShopBalance(args[1])))); - } else + } + else if (shopData.get().contains("Options.flag.playerpoint")) + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.NOT_ENOUGH_PLAYER_POINT"). + replace("{bal}", n(ShopUtil.getShopBalance(args[1])))); + } + else { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.NOT_ENOUGH_MONEY"). replace("{bal}", n(ShopUtil.getShopBalance(args[1])))); @@ -186,7 +193,8 @@ public void RunCMD(String[] args, CommandSender sender) } // 출발 상점과 도착 상점의 통화 유형이 다름 - if (shopData.get().contains("Options.flag.jobpoint") != targetShopData.get().contains("Options.flag.jobpoint")) + if ((shopData.get().contains("Options.flag.jobpoint") != targetShopData.get().contains("Options.flag.jobpoint")) || + (shopData.get().contains("Options.flag.playerpoint") != targetShopData.get().contains("Options.flag.playerpoint")) ) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_DIFF_CURRENCY")); return; @@ -221,7 +229,16 @@ public void RunCMD(String[] args, CommandSender sender) shopData.save(); sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.TRANSFER_SUCCESS")); - } else + } + else if (shopData.get().contains("Options.flag.playerpoint")) + { + PlayerpointHook.addPP(target, amount); + ShopUtil.addShopBalance(args[1], amount * -1); + shopData.save(); + + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.TRANSFER_SUCCESS")); + } + else { Economy econ = DynamicShop.getEconomy(); EconomyResponse er = econ.depositPlayer(target, amount); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java index d13a17b..3295c60 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java @@ -27,8 +27,8 @@ public Add() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "add")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop add "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop add "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... add "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... add "); player.sendMessage(" - " + t(player, "HELP.SHOP_ADD_ITEM")); player.sendMessage(" - " + t(player, "HELP.PRICE")); player.sendMessage(" - " + t(player, "HELP.INF_STATIC")); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java b/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java index fad4337..3cc7976 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java @@ -25,8 +25,8 @@ public AddHand() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "addhand")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop addhand "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop addhand "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... addhand "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... addhand "); player.sendMessage(" - " + t(player, "HELP.SHOP_ADD_HAND")); player.sendMessage(" - " + t(player, "HELP.PRICE")); player.sendMessage(" - " + t(player, "HELP.INF_STATIC")); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Command.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Command.java index a14dc30..1409f7c 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Command.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Command.java @@ -8,6 +8,9 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.util.ArrayList; +import java.util.Map; + import static me.sat7.dynamicshop.constants.Constants.P_ADMIN_SHOP_EDIT; import static me.sat7.dynamicshop.utilities.LangUtil.t; @@ -23,12 +26,50 @@ public Command() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "command")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop command "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop command active "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... command add "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... command delete "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... command active "); player.sendMessage(""); } + public static void PrintCurrentState(CommandSender sender, String shopName, boolean showSell, boolean showBuy) + { + CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); + + if (data.get().contains("Options.command.active") && data.get().getBoolean("Options.command.active")) + { + if (showSell && data.get().contains("Options.command.sell")) + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender,"MESSAGE.SELL_COMMAND_CUR")); + if (data.get().getConfigurationSection("Options.command.sell") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.sell").getValues(false).entrySet()) + { + sender.sendMessage(" " + s.getKey() + "/" + s.getValue()); + } + + sender.sendMessage("Placeholders: {player} {shop} {itemType} {amount} {priceSum} {tax}"); + } + } + if (showBuy && data.get().contains("Options.command.buy")) + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender,"MESSAGE.BUY_COMMAND_CUR")); + if (data.get().getConfigurationSection("Options.command.buy") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.buy").getValues(false).entrySet()) + { + sender.sendMessage(" " + s.getKey() + "/" + s.getValue()); + } + + sender.sendMessage("Placeholders: {player} {shop} {itemType} {amount} {priceSum}"); + } + } + } + + sender.sendMessage(""); + } + @Override public void RunCMD(String[] args, CommandSender sender) { @@ -45,57 +86,14 @@ public void RunCMD(String[] args, CommandSender sender) boolean setActive = args[4].equalsIgnoreCase("true"); shopData.get().set("Options.command.active", setActive); sender.sendMessage(DynamicShop.dsPrefix(sender) + shopName + "/" + t(sender, "SHOP_SETTING.COMMAND_TOGGLE") + ": " + args[4]); - } else if (args[3].equalsIgnoreCase("sell")) + } + else if (args[3].equalsIgnoreCase("sell")) { - if(args[4].equalsIgnoreCase("clear") && args.length == 5) - { - shopData.get().set("Options.command.sell", null); - sender.sendMessage(DynamicShop.dsPrefix(sender) + shopName + "/" + t(sender, "SHOP_SETTING.COMMAND_SELL") + ": null"); - } - else - { - String cmdString = ""; - for (int i = 4; i < args.length; i++) - { - if (i == 4 && args[i].startsWith("/")) - { - args[4] = args[4].replace("/",""); - } - - cmdString += args[i]; - cmdString += " "; - } - - shopData.get().set("Options.command.sell", cmdString); - sender.sendMessage(DynamicShop.dsPrefix(sender) + shopName + "/" + t(sender, "SHOP_SETTING.COMMAND_SELL") + ": "); - sender.sendMessage("/" + cmdString); - } + subCmd(sender, args, shopData, "sell"); } else if (args[3].equalsIgnoreCase("buy")) { - if(args[4].equalsIgnoreCase("clear") && args.length == 5) - { - shopData.get().set("Options.command.buy", null); - sender.sendMessage(DynamicShop.dsPrefix(sender) + shopName + "/" + t(sender, "SHOP_SETTING.COMMAND_BUY") + ": null"); - } - else - { - String cmdString = ""; - for (int i = 4; i < args.length; i++) - { - if (i == 4 && args[i].startsWith("/")) - { - args[4] = args[4].replace("/",""); - } - - cmdString += args[i]; - cmdString += " "; - } - - shopData.get().set("Options.command.buy", cmdString); - sender.sendMessage(DynamicShop.dsPrefix(sender) + shopName + "/" + t(sender, "SHOP_SETTING.COMMAND_BUY") + ": "); - sender.sendMessage("/" + cmdString); - } + subCmd(sender, args, shopData, "buy"); } else { @@ -111,4 +109,73 @@ else if (args[3].equalsIgnoreCase("buy")) shopData.save(); } + + private void subCmd(CommandSender sender, String[] args, CustomConfig shopData, String sellBuyString) + { + if(args[4].equalsIgnoreCase("delete") && args.length == 6) + { + int idx = 0; + try + { + idx = Integer.parseInt(args[5]); + }catch(Exception ignore) + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_DATATYPE")); + return; + } + + shopData.get().set("Options.command." + sellBuyString + "." + idx, null); + CleanupIndex(shopData, "sellBuyString"); + PrintCurrentState(sender, Shop.GetShopName(args), true, true); + } + else if(args[4].equalsIgnoreCase("add") && args.length >= 7) + { + int idx = 0; + try + { + idx = Integer.parseInt(args[5]); + }catch(Exception ignore) + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_DATATYPE")); + return; + } + + String cmdString = ""; + for (int i = 6; i < args.length; i++) + { + if (i == 6 && args[i].startsWith("/")) + { + args[6] = args[6].replace("/",""); + } + + cmdString += args[i]; + cmdString += " "; + } + + shopData.get().set("Options.command." + sellBuyString + "." + idx, cmdString); + CleanupIndex(shopData, "sellBuyString"); + PrintCurrentState(sender, Shop.GetShopName(args), true, true); + } + else + { + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_USAGE")); + } + } + + private void CleanupIndex(CustomConfig shopData, String sellBuyString) + { + ArrayList tempDatas = new ArrayList<>(); + if (shopData.get().getConfigurationSection("Options.command." + sellBuyString) != null) + { + for (Map.Entry s : shopData.get().getConfigurationSection("Options.command." + sellBuyString).getValues(false).entrySet()) + { + tempDatas.add(s.getValue()); + } + } + shopData.get().set("Options.command." + sellBuyString, null); + for (int i = 0; i < tempDatas.size(); i++) + { + shopData.get().set("Options.command." + sellBuyString + "." + i, tempDatas.get(i)); + } + } } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java index 2a11246..c369054 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java @@ -28,8 +28,8 @@ public Edit() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "edit")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop edit "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop edit []"); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... edit "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... edit []"); player.sendMessage(" - " + t(player, "HELP.SHOP_EDIT")); player.sendMessage(" - " + t(player, "HELP.PRICE")); player.sendMessage(" - " + t(player, "HELP.INF_STATIC")); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java b/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java index d33989e..7daae11 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java @@ -24,7 +24,7 @@ public EditAll() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "editall")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop editall <= | + | - | * | /> "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... editall <= | + | - | * | /> "); player.sendMessage(" - " + t(player, "HELP.EDIT_ALL")); player.sendMessage(" - " + t(player, "HELP.EDIT_ALL_2")); diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Enable.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Enable.java index 42bac7d..eb34aec 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Enable.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Enable.java @@ -25,7 +25,7 @@ public Enable() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "enable")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... enable "); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Flag.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Flag.java index 0bd986f..cba6be8 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Flag.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Flag.java @@ -26,7 +26,7 @@ public Flag() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "flag")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop flag "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... flag "); player.sendMessage(""); } @@ -61,6 +61,7 @@ public void RunCMD(String[] args, CommandSender sender) args[3].equalsIgnoreCase("localshop") || args[3].equalsIgnoreCase("deliverycharge") || args[3].equalsIgnoreCase("jobpoint") || + args[3].equalsIgnoreCase("playerpoint") || args[3].equalsIgnoreCase("showValueChange") || args[3].equalsIgnoreCase("hidestock") || args[3].equalsIgnoreCase("hidepricingtype") || diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Fluctuation.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Fluctuation.java index 1f579c9..041ab68 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Fluctuation.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Fluctuation.java @@ -27,8 +27,8 @@ public Fluctuation() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "fluctuation")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop fluctuation "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop fluctuation off"); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... fluctuation "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... fluctuation off"); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Log.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Log.java index 9cdee3d..5abf81c 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Log.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Log.java @@ -26,8 +26,8 @@ public Log() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "log")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop log "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop log "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... log "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... log "); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/MaxPage.java b/src/main/java/me/sat7/dynamicshop/commands/shop/MaxPage.java index 7929435..ce60abd 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/MaxPage.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/MaxPage.java @@ -25,7 +25,7 @@ public MaxPage() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "maxpage")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop maxpage "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... maxpage "); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Permission.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Permission.java index 8e9b428..c71de65 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Permission.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Permission.java @@ -26,7 +26,7 @@ public Permission() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "permission")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop permission []"); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... permission []"); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/Position.java b/src/main/java/me/sat7/dynamicshop/commands/shop/Position.java index ce854bf..2053bd7 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Position.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Position.java @@ -23,7 +23,7 @@ public Position() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "position")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop position "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... position "); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java b/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java index 99df756..1a22b5f 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java @@ -24,7 +24,7 @@ public SellBuy() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "sellbuy")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop sellbuy < sellonly | buyonly | clear >"); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... sellbuy < sellonly | buyonly | clear >"); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/ShopHours.java b/src/main/java/me/sat7/dynamicshop/commands/shop/ShopHours.java index abdcd79..855968b 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/ShopHours.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/ShopHours.java @@ -26,7 +26,7 @@ public ShopHours() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "shophours")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop shophours "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... shophours "); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/commands/shop/StockStabilizing.java b/src/main/java/me/sat7/dynamicshop/commands/shop/StockStabilizing.java index 1a77af0..0e06057 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/StockStabilizing.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/StockStabilizing.java @@ -27,8 +27,8 @@ public StockStabilizing() public void SendHelpMessage(Player player) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "HELP.TITLE").replace("{command}", "stockStabilizing")); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop stockStabilizing "); - player.sendMessage(" - " + t(player, "HELP.USAGE") + ": /ds shop stockStabilizing off"); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... stockStabilizing "); + player.sendMessage(" - " + t(player, "HELP.USAGE") + ": ... stockStabilizing off"); player.sendMessage(""); } diff --git a/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java b/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java new file mode 100644 index 0000000..fc4cc40 --- /dev/null +++ b/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java @@ -0,0 +1,69 @@ +package me.sat7.dynamicshop.economyhook; + +import com.gamingmesh.jobs.container.JobsPlayer; +import org.bukkit.entity.Player; + +import com.gamingmesh.jobs.Jobs; +import com.gamingmesh.jobs.container.PlayerPoints; + +import me.sat7.dynamicshop.DynamicShop; + +import static me.sat7.dynamicshop.utilities.LangUtil.n; +import static me.sat7.dynamicshop.utilities.LangUtil.t; + +public final class JobsHook +{ + public static boolean jobsRebornActive = false; + + private JobsHook() + { + + } + + // JobsReborn의 points 수정 + public static boolean addJobsPoint(Player p, double amount) + { + if (!jobsRebornActive) + { + p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "ERR.JOBS_REBORN_NOT_FOUND")); + return false; + } + + PlayerPoints pp = JobsHook.getJobsPlayerPoints(p); + // 차감 + if (amount < 0.0) + { + if (pp.havePoints(amount * -1)) + { + pp.takePoints(amount * -1); + return true; + } + // 포인트 부족 + else + { + p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "MESSAGE.NOT_ENOUGH_POINT") + .replace("{bal}", n(getCurJobPoints(p)))); + return false; + } + } + // 증가 + else + { + pp.addPoints(amount); + return true; + } + } + + // JobsReborn. 플레이어의 잔액 확인 + public static double getCurJobPoints(Player p) + { + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(p); + return jobsPlayer.getPointsData().getCurrentPoints(); + } + + public static PlayerPoints getJobsPlayerPoints(Player p) + { + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(p); + return jobsPlayer.getPointsData(); + } +} diff --git a/src/main/java/me/sat7/dynamicshop/economyhook/PlayerpointHook.java b/src/main/java/me/sat7/dynamicshop/economyhook/PlayerpointHook.java new file mode 100644 index 0000000..69aa1de --- /dev/null +++ b/src/main/java/me/sat7/dynamicshop/economyhook/PlayerpointHook.java @@ -0,0 +1,55 @@ +package me.sat7.dynamicshop.economyhook; + +import me.sat7.dynamicshop.DynamicShop; +import org.bukkit.entity.Player; + +import java.util.UUID; + +import static me.sat7.dynamicshop.utilities.LangUtil.n; +import static me.sat7.dynamicshop.utilities.LangUtil.t; + +public final class PlayerpointHook +{ + public static boolean isPPActive = false; + + public static boolean addPP(Player p, double amount) + { + return addPP(p, (int)amount); + } + + public static boolean addPP(Player p, int amount) + { + if (!isPPActive) + { + p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "ERR.PLAYER_POINTS_NOT_FOUND")); + return false; + } + + UUID uuid = p.getUniqueId(); + + int current = DynamicShop.ppAPI.look(uuid); + if (amount < 0 && current + amount < 0) + { + p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "MESSAGE.NOT_ENOUGH_PLAYER_POINT") + .replace("{bal}", n(current))); + return false; + } + + boolean result = DynamicShop.ppAPI.give(uuid, amount); + + return result; + } + + public static int getCurrentPP(Player p) + { + if (!isPPActive) + { + p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "ERR.PLAYER_POINTS_NOT_FOUND")); + return 0; + } + + UUID uuid = p.getUniqueId(); + + return DynamicShop.ppAPI.look(uuid); + } +} diff --git a/src/main/java/me/sat7/dynamicshop/events/OnChat.java b/src/main/java/me/sat7/dynamicshop/events/OnChat.java index 9fc91f2..51b8165 100644 --- a/src/main/java/me/sat7/dynamicshop/events/OnChat.java +++ b/src/main/java/me/sat7/dynamicshop/events/OnChat.java @@ -140,13 +140,33 @@ public void onPlayerChat(AsyncPlayerChatEvent e) String shopName = userInteractData[0]; DynamicShop.userTempData.put(uuid, ""); - if (userData.equals("sellCmd")) + String[] input = e.getMessage().split("/"); + if(input.length == 2) { - ShopUtil.SetShopSellCommand(shopName, e.getMessage()); + int idx = 0; + try + { + idx = Integer.parseInt(input[0]); + }catch (Exception ignore) + { + p.sendMessage(t(p,"ERR.WRONG_DATATYPE")); + DynaShopAPI.openShopSettingGui(p, shopName); + cancelRunnable(p); + return; + } + + if (userData.equals("sellCmd")) + { + ShopUtil.SetShopSellCommand(shopName, idx, input[1]); + } + else + { + ShopUtil.SetShopBuyCommand(shopName, idx, input[1]); + } } else { - ShopUtil.SetShopBuyCommand(shopName, e.getMessage()); + p.sendMessage(t(p,"ERR.WRONG_USAGE")); } DynaShopAPI.openShopSettingGui(p, shopName); diff --git a/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java b/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java index 6755314..289d1c1 100644 --- a/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java +++ b/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java @@ -100,9 +100,9 @@ public void onSignChange(SignChangeEvent e) { e.getPlayer().sendMessage(DynamicShop.dsPrefix(e.getPlayer()) + t(e.getPlayer(), "ERR.SIGN_ITEM_NOT_FOR_SALE")); } } else if (signItemName.isEmpty()) { - e.setLine(2, ""); - e.getBlock().getState().update(); - e.getPlayer().sendMessage(DynamicShop.dsPrefix(e.getPlayer()) + t(e.getPlayer(), "MESSAGE.SIGN_SHOP_CREATED")); + e.setLine(2, ""); + e.getBlock().getState().update(); + e.getPlayer().sendMessage(DynamicShop.dsPrefix(e.getPlayer()) + t(e.getPlayer(), "MESSAGE.SIGN_SHOP_CREATED")); } else { e.getBlock().breakNaturally(); e.getPlayer().sendMessage(DynamicShop.dsPrefix(e.getPlayer()) + t(e.getPlayer(), "ERR.SIGN_ITEM_INVALID")); @@ -139,18 +139,18 @@ public void onInteract(PlayerInteractEvent e) String signItemName = s.getLine(2); Material mat = ItemsUtil.GetMaterialFromShortname(signItemName); - if(mat != null) { - int i = ShopUtil.findItemFromShop(shop, new ItemStack(mat)); - if (i != -1) { - String itemShortName = StringUtil.getShortenedNameSign(mat.name()); - s.setLine(2, itemShortName); - DynamicShop.ccSign.get().set(signId + ".mat", mat.name().toUpperCase()); - } else { - s.setLine(2, ""); - } - } else { - s.setLine(2, ""); - } + if(mat != null) { + int i = ShopUtil.findItemFromShop(shop, new ItemStack(mat)); + if (i != -1) { + String itemShortName = StringUtil.getShortenedNameSign(mat.name()); + s.setLine(2, itemShortName); + DynamicShop.ccSign.get().set(signId + ".mat", mat.name().toUpperCase()); + } else { + s.setLine(2, ""); + } + } else { + s.setLine(2, ""); + } s.update(); DynamicShop.ccSign.save(); @@ -195,7 +195,7 @@ public void onInteract(PlayerInteractEvent e) { String itemName = p.getInventory().getItemInMainHand().getType().name(); if(itemName.contains("INK_SAC") || itemName.contains("_DYE")) - return; + return; } diff --git a/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java b/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java index dd46e3c..f9c7658 100644 --- a/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java +++ b/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java @@ -3,6 +3,7 @@ import me.sat7.dynamicshop.DynamicShop; import me.sat7.dynamicshop.constants.Constants; +import org.apache.commons.io.FilenameUtils; import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java b/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java index e40b72b..501364a 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java @@ -4,12 +4,12 @@ import java.util.Arrays; import me.sat7.dynamicshop.DynaShopAPI; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.files.CustomConfig; import me.sat7.dynamicshop.transactions.Buy; import me.sat7.dynamicshop.transactions.Sell; import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; @@ -20,7 +20,7 @@ import org.bukkit.inventory.meta.ItemMeta; import me.sat7.dynamicshop.DynamicShop; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import me.sat7.dynamicshop.transactions.Calc; import me.sat7.dynamicshop.utilities.ShopUtil; @@ -52,7 +52,7 @@ public ItemTrade() private ItemMeta itemMeta; public enum CURRENCY - {VAULT, JOB_POINT} + {VAULT, JOB_POINT, PLAYER_POINT} public Inventory getGui(Player player, String shopName, String tradeIdx) { @@ -106,7 +106,10 @@ public void OnClickUpperInventory(InventoryClickEvent e) { if (data.get().contains("Options.flag.jobpoint")) { - player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "TRADE.BALANCE") + ":§f " + n(JobsHook.getCurJobPoints(player)) + "Points"); + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "TRADE.BALANCE") + ":§f " + n(JobsHook.getCurJobPoints(player)) + t(player, "JOB_POINTS")); + } else if (data.get().contains("Options.flag.playerpoint")) + { + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "TRADE.BALANCE") + ":§f " + n(PlayerpointHook.getCurrentPP(player)) + t(player, "PLAYER_POINTS")); } else { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "TRADE.BALANCE") + ":§f " + n(DynamicShop.getEconomy().getBalance(player))); @@ -183,8 +186,13 @@ private void CreateBalanceButton() if (optionS.contains("flag.jobpoint")) { - myBalanceString = "§f" + n(JobsHook.getCurJobPoints(player)) + "Points"; - } else + myBalanceString = "§f" + n(JobsHook.getCurJobPoints(player)) + t(player,"JOB_POINTS"); + } + else if (optionS.contains("flag.playerpoint")) + { + myBalanceString = "§f" + n(PlayerpointHook.getCurrentPP(player)) + t(player,"PLAYER_POINTS"); + } + else { myBalanceString = "§f" + n(DynamicShop.getEconomy().getBalance(player)); } @@ -193,7 +201,10 @@ private void CreateBalanceButton() { double d = ShopUtil.getShopBalance(shopName); balStr = n(d); - if (optionS.contains("flag.jobpoint")) balStr += "Points"; + if (optionS.contains("flag.jobpoint")) + balStr += t(player, "JOB_POINTS"); + else if (optionS.contains("flag.playerpoint")) + balStr += t(player, "PLAYER_POINTS"); } else { balStr = t(player, "TRADE.SHOP_BAL_INF"); @@ -256,7 +267,7 @@ private void CreateTradeButtons(boolean sell) int stock = shopData.getInt(tradeIdx + ".stock"); int maxStock = shopData.getInt(tradeIdx + ".maxStock", -1); - double price = Calc.calcTotalCost(shopName, tradeIdx, sell ? -amount : amount); + double price = Calc.calcTotalCost(shopName, tradeIdx, sell ? -amount : amount)[0]; String lore; String priceText; if (sell) @@ -375,7 +386,12 @@ private void Sell(ConfigurationSection options, ItemStack itemStack, int deliver if (options.contains("flag.jobpoint")) { Sell.sell(CURRENCY.JOB_POINT, player, shopName, tradeIdx, itemStack, -deliveryCharge, infiniteStock); - } else + } + else if (options.contains("flag.playerpoint")) + { + Sell.sell(CURRENCY.PLAYER_POINT, player, shopName, tradeIdx, itemStack, -deliveryCharge, infiniteStock); + } + else { Sell.sell(CURRENCY.VAULT, player, shopName, tradeIdx, itemStack, -deliveryCharge, infiniteStock); } @@ -393,7 +409,12 @@ private void Buy(ConfigurationSection options, ItemStack itemStack, int delivery if (options.contains("flag.jobpoint")) { Buy.buy(CURRENCY.JOB_POINT, player, shopName, tradeIdx, itemStack, deliveryCharge, infiniteStock); - } else + } + else if (options.contains("flag.playerpoint")) + { + Buy.buy(CURRENCY.PLAYER_POINT, player, shopName, tradeIdx, itemStack, deliveryCharge, infiniteStock); + } + else { Buy.buy(CURRENCY.VAULT, player, shopName, tradeIdx, itemStack, deliveryCharge, infiniteStock); } diff --git a/src/main/java/me/sat7/dynamicshop/guis/Shop.java b/src/main/java/me/sat7/dynamicshop/guis/Shop.java index cd04a8b..e99b709 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/Shop.java +++ b/src/main/java/me/sat7/dynamicshop/guis/Shop.java @@ -19,7 +19,7 @@ import org.bukkit.inventory.meta.ItemMeta; import me.sat7.dynamicshop.DynamicShop; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import me.sat7.dynamicshop.transactions.Calc; import me.sat7.dynamicshop.utilities.ShopUtil; @@ -369,7 +369,10 @@ private String CreateShopInfoText() if (ShopUtil.getShopBalance(shopName) >= 0) { String temp = n(ShopUtil.getShopBalance(shopName)); - if (shopData.contains("Options.flag.jobpoint")) temp += "Points"; + if (shopData.contains("Options.flag.jobpoint")) + temp += t(player,"JOB_POINTS"); + else if (shopData.contains("Options.flag.playerpoint")) + temp += t(player,"PLAYER_POINTS"); finalShopBalanceText += t(player, "SHOP.SHOP_INFO_DASH") + temp + "\n"; } else diff --git a/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java b/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java index fbc14d2..abc6f1e 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java @@ -3,11 +3,14 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.Map; import me.sat7.dynamicshop.DynaShopAPI; +import me.sat7.dynamicshop.commands.shop.Command; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.events.OnChat; import me.sat7.dynamicshop.files.CustomConfig; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import me.sat7.dynamicshop.utilities.ConfigUtil; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -57,6 +60,7 @@ public ShopSettings() private final int FLAG9 = 22; private final int FLAG10 = 13; private final int FLAG11 = 27; + private final int FLAG12 = 28; private final int CMD_TOGGLE = 33; private final int CMD_SELL = 34; @@ -228,22 +232,46 @@ public Inventory getGui(Player player, String shopName) CreateButton(CMD_TOGGLE, Material.COMMAND_BLOCK, t(player, "SHOP_SETTING.COMMAND_TOGGLE"), CmdToggleLore); boolean sellCmdValid = confSec_Options.contains("command.sell"); - String sellCmdString = sellCmdValid ? ("/" + confSec_Options.getString("command.sell")) : "(null)"; - ArrayList sellCmdLore = new ArrayList<>(Arrays.asList( - "§9" + t(player, "CUR_STATE") + ": ", - "§f" + sellCmdString, - t(player, "SHOP_SETTING.COMMAND_LORE1"), - t(player, "SHOP_SETTING.COMMAND_LORE2") + ArrayList sellCmdLore = new ArrayList<>(Collections.singletonList( + "§9" + t(player, "CUR_STATE") + ": " )); + if(sellCmdValid) + { + if (data.get().getConfigurationSection("Options.command.sell") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.sell").getValues(false).entrySet()) + { + sellCmdLore.add("§f/" + s.getValue()); + } + } + } + else + { + sellCmdLore.add("§f(empty)"); + } + sellCmdLore.add(t(player, "SHOP_SETTING.COMMAND_LORE1")); + sellCmdLore.add(t(player, "SHOP_SETTING.COMMAND_LORE3")); boolean buyCmdValid = confSec_Options.contains("command.buy"); - String buyCmdString = buyCmdValid ? ("/" + confSec_Options.getString("command.buy")) : "(null)"; - ArrayList buyCmdLore = new ArrayList<>(Arrays.asList( - "§9" + t(player, "CUR_STATE") + ": ", - "§f" + buyCmdString, - t(player, "SHOP_SETTING.COMMAND_LORE1"), - t(player, "SHOP_SETTING.COMMAND_LORE2") + ArrayList buyCmdLore = new ArrayList<>(Collections.singletonList( + "§9" + t(player, "CUR_STATE") + ": " )); + if(buyCmdValid) + { + if (data.get().getConfigurationSection("Options.command.buy") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.buy").getValues(false).entrySet()) + { + buyCmdLore.add("§f/" + s.getValue()); + } + } + } + else + { + buyCmdLore.add("§f(empty)"); + } + buyCmdLore.add(t(player, "SHOP_SETTING.COMMAND_LORE1")); + buyCmdLore.add(t(player, "SHOP_SETTING.COMMAND_LORE3")); CreateButton(CMD_SELL, sellCmdValid ? Material.GREEN_STAINED_GLASS_PANE : Material.BLACK_STAINED_GLASS_PANE, t(player, "SHOP_SETTING.COMMAND_SELL"), sellCmdLore); CreateButton(CMD_BUY, buyCmdValid ? Material.RED_STAINED_GLASS_PANE : Material.BLACK_STAINED_GLASS_PANE, t(player, "SHOP_SETTING.COMMAND_BUY"), buyCmdLore); @@ -283,6 +311,7 @@ public Inventory getGui(Player player, String shopName) CreateFlagButton(FLAG9, confSec_Options.contains("flag.showmaxstock"), "showMaxStock", t(player, "SHOP_SETTING.SHOW_MAX_STOCK")); CreateFlagButton(FLAG10, confSec_Options.contains("flag.hiddenincommand"), "hiddenInCommand", t(player, "SHOP_SETTING.HIDDEN_IN_COMMAND")); CreateFlagButton(FLAG11, confSec_Options.contains("flag.integeronly"), "integerOnly", t(player, "SHOP_SETTING.INTEGER_ONLY")); + CreateFlagButton(FLAG12, confSec_Options.contains("flag.playerpoint"), "playerPoint", t(player, "SHOP_SETTING.PLAYER_POINT_LORE")); // 로그 버튼 String log_cur; @@ -722,9 +751,30 @@ else if (e.getSlot() == FLAG11) if (data.get().contains("Options.flag.integeronly")) { Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag integerOnly unset"); + if(data.get().contains("Options.flag.playerpoint")) + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag playerpoint unset"); + } else + { + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag integerOnly set"); + } + DynaShopAPI.openShopSettingGui(player, shopName); + } + // Player point + else if (e.getSlot() == FLAG12) + { + if (data.get().contains("Options.flag.playerpoint")) + { + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag playerpoint unset"); } else { + if (!PlayerpointHook.isPPActive) + { + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.PLAYER_POINTS_NOT_FOUND")); + return; + } + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag integerOnly set"); + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " flag playerpoint set"); } DynaShopAPI.openShopSettingGui(player, shopName); } @@ -774,30 +824,44 @@ else if (e.getSlot() == CMD_TOGGLE) { if (e.isShiftClick() && e.isRightClick()) { - Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " command sell clear"); - DynaShopAPI.openShopSettingGui(player, shopName); + if (data.get().getConfigurationSection("Options.command.sell") != null) + { + Object[] indexList = data.get().getConfigurationSection("Options.command.sell").getKeys(false).toArray(); + int idx = Integer.parseInt(indexList[indexList.length-1].toString()); + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " command sell delete " + idx); + + DynaShopAPI.openShopSettingGui(player, shopName); + } } else if(e.isLeftClick()) { player.closeInventory(); - player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.ENTER_COMMAND")); + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.ENTER_COMMAND_2")); DynamicShop.userTempData.put(player.getUniqueId(), "sellCmd"); + Command.PrintCurrentState(player, shopName, true, false); OnChat.WaitForInput(player); } } else if (e.getSlot() == CMD_BUY) { if (e.isShiftClick() && e.isRightClick()) { - Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " command buy clear"); - DynaShopAPI.openShopSettingGui(player, shopName); + if (data.get().getConfigurationSection("Options.command.buy") != null) + { + Object[] indexList = data.get().getConfigurationSection("Options.command.buy").getKeys(false).toArray(); + int idx = Integer.parseInt(indexList[indexList.length-1].toString()); + Bukkit.dispatchCommand(player, "DynamicShop shop " + shopName + " command buy delete " + idx); + + DynaShopAPI.openShopSettingGui(player, shopName); + } } else if(e.isLeftClick()) { player.closeInventory(); - player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.ENTER_COMMAND")); + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.ENTER_COMMAND_2")); DynamicShop.userTempData.put(player.getUniqueId(), "buyCmd"); + Command.PrintCurrentState(player, shopName, false, true); OnChat.WaitForInput(player); } } diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Buy.java b/src/main/java/me/sat7/dynamicshop/transactions/Buy.java index 461ef8b..2bd5216 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Buy.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Buy.java @@ -1,7 +1,9 @@ package me.sat7.dynamicshop.transactions; import java.util.HashMap; +import java.util.Map; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.events.ShopBuySellEvent; import me.sat7.dynamicshop.files.CustomConfig; import me.sat7.dynamicshop.guis.ItemTrade; @@ -14,7 +16,7 @@ import me.sat7.dynamicshop.DynaShopAPI; import me.sat7.dynamicshop.DynamicShop; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.EconomyResponse; @@ -57,6 +59,9 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa } else if (currency == ItemTrade.CURRENCY.JOB_POINT) { if (priceSum + price > JobsHook.getCurJobPoints(player)) break; + } else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + if (priceSum + price > PlayerpointHook.getCurrentPP(player)) break; } priceSum += price; @@ -79,6 +84,9 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa } else if (currency == ItemTrade.CURRENCY.JOB_POINT) { message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.NOT_ENOUGH_POINT").replace("{bal}", n(JobsHook.getCurJobPoints(player))); + } else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.NOT_ENOUGH_PLAYER_POINT").replace("{bal}", n(PlayerpointHook.getCurrentPP(player))); } player.sendMessage(message); @@ -122,6 +130,14 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa if (!JobsHook.addJobsPoint(player, priceSum * -1)) return; } + else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + if (PlayerpointHook.getCurrentPP(player) < priceSum) + return; + + if (!PlayerpointHook.addPP(player, priceSum * -1)) + return; + } int leftAmount = actualAmount; while (leftAmount > 0) @@ -148,10 +164,46 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa } //로그 기록 - String currencyString = currency == ItemTrade.CURRENCY.VAULT ? "vault" : "jobpoint"; + String currencyString = ""; + if(currency == ItemTrade.CURRENCY.VAULT) + { + currencyString = "vault"; + } + else if(currency == ItemTrade.CURRENCY.JOB_POINT) + { + currencyString = "jobpoint"; + } + else if(currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + currencyString = "playerPoint"; + } LogUtil.addLog(shopName, tempIS.getType().toString(), actualAmount, priceSum, currencyString, player.getName()); // 메시지 출력 + SendBuyMessage(currency, econ, r, player, actualAmount, priceSum, tempIS); + + // 플레이어에게 소리 재생 + SoundUtil.playerSoundEffect(player, "buy"); + + // 상점 계좌 잔액 수정 + if (data.get().contains("Options.Balance")) + { + ShopUtil.addShopBalance(shopName, priceSum); + } + + // 커맨드 실행 + RunBuyCommand(data, player, shopName, tempIS, actualAmount, priceSum); + + data.save(); + DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); + + // 이벤트 호출 + ShopBuySellEvent event = new ShopBuySellEvent(true, priceBuyOld, Calc.getCurrentPrice(shopName, tradeIdx, true), priceSellOld, DynaShopAPI.getSellPrice(shopName, tempIS), stockOld, DynaShopAPI.getStock(shopName, tempIS), DynaShopAPI.getMedian(shopName, tempIS), shopName, tempIS, player); + Bukkit.getPluginManager().callEvent(event); + } + + private static void SendBuyMessage(ItemTrade.CURRENCY currency, Economy econ, EconomyResponse r, Player player, int actualAmount, double priceSum, ItemStack tempIS) + { String message = ""; boolean useLocalizedName = DynamicShop.plugin.getConfig().getBoolean("UI.LocalizedItemName"); if (currency == ItemTrade.CURRENCY.VAULT) @@ -159,13 +211,20 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.BUY_SUCCESS", !useLocalizedName) .replace("{amount}", Integer.toString(actualAmount)) .replace("{price}", n(r.amount)) - .replace("{bal}", n(econ.getBalance((player)))); + .replace("{bal}", n(econ.getBalance(player))); } else if (currency == ItemTrade.CURRENCY.JOB_POINT) { message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.BUY_SUCCESS_JP", !useLocalizedName) .replace("{amount}", Integer.toString(actualAmount)) .replace("{price}", n(priceSum)) - .replace("{bal}", n(JobsHook.getCurJobPoints((player)))); + .replace("{bal}", n(JobsHook.getCurJobPoints(player))); + } + else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.BUY_SUCCESS_PP", !useLocalizedName) + .replace("{amount}", Integer.toString(actualAmount)) + .replace("{price}", n(priceSum)) + .replace("{bal}", n(PlayerpointHook.getCurrentPP(player))); } if (useLocalizedName) @@ -177,35 +236,26 @@ public static void buy(ItemTrade.CURRENCY currency, Player player, String shopNa message = message.replace("{item}", ItemsUtil.getBeautifiedName(tempIS.getType())); player.sendMessage(message); } + } - // 플레이어에게 소리 재생 - SoundUtil.playerSoundEffect(player, "buy"); - - // 상점 계좌 잔액 수정 - if (data.get().contains("Options.Balance")) - { - ShopUtil.addShopBalance(shopName, priceSum); - } - - // 커맨드 실행 + private static void RunBuyCommand(CustomConfig data, Player player, String shopName, ItemStack tempIS, int actualAmount, double priceSum) + { if (data.get().contains("Options.command.active") && data.get().getBoolean("Options.command.active") && data.get().contains("Options.command.buy")) { - String buyCmd = data.get().getString("Options.command.buy") - .replace("{player}", player.getName()) - .replace("{shop}", shopName) - .replace("{itemType}", tempIS.getType().toString()) - .replace("{amount}", actualAmount+"") - .replace("{priceSum}", priceSum+""); - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), buyCmd); + if (data.get().getConfigurationSection("Options.command.buy") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.buy").getValues(false).entrySet()) + { + String buyCmd = s.getValue().toString() + .replace("{player}", player.getName()) + .replace("{shop}", shopName) + .replace("{itemType}", tempIS.getType().toString()) + .replace("{amount}", actualAmount+"") + .replace("{priceSum}", priceSum+""); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), buyCmd); + } + } } - - data.save(); - DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); - - // 이벤트 호출 - ShopBuySellEvent event = new ShopBuySellEvent(true, priceBuyOld, Calc.getCurrentPrice(shopName, tradeIdx, true), priceSellOld, DynaShopAPI.getSellPrice(shopName, tempIS), stockOld, DynaShopAPI.getStock(shopName, tempIS), DynaShopAPI.getMedian(shopName, tempIS), shopName, tempIS, player); - Bukkit.getPluginManager().callEvent(event); } } diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Calc.java b/src/main/java/me/sat7/dynamicshop/transactions/Calc.java index d85402d..f16fae0 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Calc.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Calc.java @@ -77,8 +77,8 @@ public static double getCurrentPrice(String shopName, String idx, boolean buy, b } } - // 특정 아이탬의 앞으로 n개의 가치합을 계산 (다이나믹 or 고정가) (세금 반영) - public static double calcTotalCost(String shopName, String idx, int amount) + // 특정 아이탬의 앞으로 n개의 가치합을 계산 (다이나믹 or 고정가) ([0] 세금 반영된 값, [1] 세금) + public static double[] calcTotalCost(String shopName, String idx, int amount) { FileConfiguration data = ShopUtil.shopConfigFiles.get(shopName).get(); @@ -133,23 +133,26 @@ public static double calcTotalCost(String shopName, String idx, int amount) } // 세금 적용 (판매가 별도지정시 세금계산 안함) + double tax = 0; if (amount < 0 && !data.contains(idx + ".value2")) { - double tax = ((total / 100) * getTaxRate(shopName)); + tax = ((total / 100) * getTaxRate(shopName)); total -= tax; } if (data.contains("Options.flag.integeronly")) { if(amount > 0) - return Math.ceil(total); + total = Math.ceil(total); else - return Math.floor(total); + total = Math.floor(total); } else { - return (Math.round(total * 100) / 100.0); + total = (Math.round(total * 100) / 100.0); } + + return new double[]{total, tax}; } // 상점의 세율 반환 diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java index 0e43f6a..39da41e 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java @@ -1,7 +1,9 @@ package me.sat7.dynamicshop.transactions; import java.util.HashMap; +import java.util.Map; +import me.sat7.dynamicshop.economyhook.PlayerpointHook; import me.sat7.dynamicshop.events.ShopBuySellEvent; import me.sat7.dynamicshop.files.CustomConfig; import me.sat7.dynamicshop.guis.ItemTrade; @@ -13,7 +15,7 @@ import me.sat7.dynamicshop.DynaShopAPI; import me.sat7.dynamicshop.DynamicShop; -import me.sat7.dynamicshop.jobshook.JobsHook; +import me.sat7.dynamicshop.economyhook.JobsHook; import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.EconomyResponse; @@ -111,7 +113,8 @@ public static double quickSellItem(Player player, ItemStack tempIS, String shopN return 0; } - priceSum += Calc.calcTotalCost(shopName, String.valueOf(tradeIdx), -tradeAmount); + double[] calcResult = Calc.calcTotalCost(shopName, String.valueOf(tradeIdx), -tradeAmount); + priceSum += calcResult[0]; // 재고 증가 if (stockOld > 0) @@ -135,21 +138,7 @@ public static double quickSellItem(Player player, ItemStack tempIS, String shopN if (player != null) { // 플레이어에게 메시지 출력 - 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); - } + SendSellMessage(ItemTrade.CURRENCY.VAULT, econ, r, player, tradeAmount, priceSum, tempIS); // 플레이어에게 소리 재생 player.playSound(player.getLocation(), Sound.valueOf("ENTITY_EXPERIENCE_ORB_PICKUP"), 1, 1); @@ -162,18 +151,7 @@ public static double quickSellItem(Player player, ItemStack tempIS, String shopN } // 커맨드 실행 - if (data.get().contains("Options.command.active") && data.get().getBoolean("Options.command.active") && - data.get().contains("Options.command.sell")) - { - String sellCmd = data.get().getString("Options.command.sell") - .replace("{player}", player != null ? player.getName() : shopName) - .replace("{shop}", shopName) - .replace("{itemType}", tempIS.getType().toString()) - .replace("{amount}", tradeAmount+"") - .replace("{priceSum}", priceSum+""); - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), sellCmd); - } + RunSellCommand(data, player, shopName, tempIS, tradeAmount, priceSum, calcResult[1]); // 이벤트 호출 if (player != null) @@ -208,7 +186,7 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN double priceBuyOld = Calc.getCurrentPrice(shopName, String.valueOf(tradeIdx), true); int stockOld = data.get().getInt(tradeIdx + ".stock"); // 상점에 돈이 없음 - if (ShopUtil.getShopBalance(shopName) != -1 && ShopUtil.getShopBalance(shopName) < Calc.calcTotalCost(shopName, tradeIdx, tempIS.getAmount())) + if (ShopUtil.getShopBalance(shopName) != -1 && ShopUtil.getShopBalance(shopName) < Calc.calcTotalCost(shopName, tradeIdx, tempIS.getAmount())[0]) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SHOP_BAL_LOW")); return; @@ -230,7 +208,8 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN return; } - priceSum += Calc.calcTotalCost(shopName, tradeIdx, -actualAmount); + double[] calcResult = Calc.calcTotalCost(shopName, tradeIdx, -actualAmount); + priceSum += calcResult[0]; // 재고 증가 if (!infiniteStock) @@ -250,13 +229,53 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN { if (!JobsHook.addJobsPoint(player, priceSum)) return; + } else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + if (!PlayerpointHook.addPP(player, priceSum)) + return; } //로그 기록 - String currencyString = currency == ItemTrade.CURRENCY.VAULT ? "vault" : "jobpoint"; + String currencyString = ""; + if(currency == ItemTrade.CURRENCY.VAULT) + { + currencyString = "vault"; + } + else if(currency == ItemTrade.CURRENCY.JOB_POINT) + { + currencyString = "jobpoint"; + } + else if(currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + currencyString = "playerPoint"; + } LogUtil.addLog(shopName, tempIS.getType().toString(), -actualAmount, priceSum, currencyString, player.getName()); // 메시지 출력 + SendSellMessage(currency, econ, r, player, actualAmount, priceSum, tempIS); + + // 플레이어에게 소리 재생 + SoundUtil.playerSoundEffect(player, "sell"); + + // 상점 계좌 잔액 수정 + if (data.get().contains("Options.Balance")) + { + ShopUtil.addShopBalance(shopName, priceSum * -1); + } + + // 커맨드 실행 + RunSellCommand(data, player, shopName, tempIS, actualAmount, priceSum, calcResult[1]); + + data.save(); + DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); + + // 이벤트 호출 + 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); + } + + private static void SendSellMessage(ItemTrade.CURRENCY currency, Economy econ, EconomyResponse r, Player player, int actualAmount, double priceSum, ItemStack tempIS) + { boolean useLocalizedName = DynamicShop.plugin.getConfig().getBoolean("UI.LocalizedItemName"); String message = ""; if (currency == ItemTrade.CURRENCY.VAULT) @@ -264,7 +283,7 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SELL_SUCCESS", !useLocalizedName) .replace("{amount}", Integer.toString(actualAmount)) .replace("{price}", n(r.amount)) - .replace("{bal}", n(econ.getBalance((player)))); + .replace("{bal}", n(econ.getBalance(player))); } else if (currency == ItemTrade.CURRENCY.JOB_POINT) { message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SELL_SUCCESS_JP", !useLocalizedName) @@ -272,6 +291,13 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN .replace("{price}", n(priceSum)) .replace("{bal}", n(JobsHook.getCurJobPoints(player))); } + else if (currency == ItemTrade.CURRENCY.PLAYER_POINT) + { + message = DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SELL_SUCCESS_PP", !useLocalizedName) + .replace("{amount}", Integer.toString(actualAmount)) + .replace("{price}", n(priceSum)) + .replace("{bal}", n(PlayerpointHook.getCurrentPP(player))); + } if (useLocalizedName) { @@ -282,35 +308,27 @@ public static void sell(ItemTrade.CURRENCY currency, Player player, String shopN message = message.replace("{item}", ItemsUtil.getBeautifiedName(tempIS.getType())); player.sendMessage(message); } + } - // 플레이어에게 소리 재생 - SoundUtil.playerSoundEffect(player, "sell"); - - // 상점 계좌 잔액 수정 - if (data.get().contains("Options.Balance")) - { - ShopUtil.addShopBalance(shopName, priceSum * -1); - } - - // 커맨드 실행 + private static void RunSellCommand(CustomConfig data, Player player, String shopName, ItemStack tempIS, int actualAmount, double priceSum, double tax) + { if (data.get().contains("Options.command.active") && data.get().getBoolean("Options.command.active") && data.get().contains("Options.command.sell")) { - String sellCmd = data.get().getString("Options.command.sell") - .replace("{player}", player.getName()) - .replace("{shop}", shopName) - .replace("{itemType}", tempIS.getType().toString()) - .replace("{amount}", actualAmount+"") - .replace("{priceSum}", priceSum+""); - - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), sellCmd); + if (data.get().getConfigurationSection("Options.command.sell") != null) + { + for (Map.Entry s : data.get().getConfigurationSection("Options.command.sell").getValues(false).entrySet()) + { + String sellCmd = s.getValue().toString() + .replace("{player}", player.getName()) + .replace("{shop}", shopName) + .replace("{itemType}", tempIS.getType().toString()) + .replace("{amount}", actualAmount+"") + .replace("{priceSum}", priceSum+"") + .replace("{tax}", tax+""); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), sellCmd); + } + } } - - data.save(); - DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); - - // 이벤트 호출 - 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); } } diff --git a/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java index 860ca05..c275088 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java @@ -13,7 +13,7 @@ public final class ConfigUtil @Setter private static int currentTax; - public final static int configVersion = 3; + public final static int configVersion = 4; private final static String[] dataKeys = new String[] { diff --git a/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java index 15c3228..da0c48c 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java @@ -100,6 +100,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("SHOP_SETTING.LOCAL_SHOP_LORE", "§f실제 상점 위치를 방문해야 합니다.\n§f상점의 위치를 설정해야만 합니다."); ccLang.get().addDefault("SHOP_SETTING.DELIVERY_CHARGE_LORE", "§f배달비를 지불하고 localshop에서 원격으로 거래합니다."); ccLang.get().addDefault("SHOP_SETTING.JOB_POINT_LORE", "§fJobs 플러그인의 job point로 거래합니다."); + ccLang.get().addDefault("SHOP_SETTING.PLAYER_POINT_LORE", "§fPlayerPoint 플러그인의 point로 거래합니다."); ccLang.get().addDefault("SHOP_SETTING.SHOW_VALUE_CHANGE_LORE", "§f가격 변화량을 표시합니다."); ccLang.get().addDefault("SHOP_SETTING.HIDE_STOCK", "§f재고 수량 표시를 숨깁니다."); ccLang.get().addDefault("SHOP_SETTING.HIDE_PRICING_TYPE", "§f가격 유형 표기를 숨깁니다."); @@ -118,7 +119,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("SHOP_SETTING.COMMAND_SELL", "§f판매시 명령어"); ccLang.get().addDefault("SHOP_SETTING.COMMAND_BUY", "§f구매시 명령어"); ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE1", "§e좌클릭: 설정"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE2", "§e씨프트 우클릭: 삭제"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE3", "§e씨프트 우클릭: 마지막 항목 삭제"); ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3로테이션 에디터"); ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§a로테이션 켜짐"); @@ -299,11 +300,14 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§f{item} {amount}개를 {price}에 판매함. 잔액: {bal}"); ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_JP", "§f{item} {amount}개를 {price}포인트에 구매함. 남은포인트: {bal}"); ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_JP", "§f{item} {amount}개를 {price}포인트에 판매함. 남은포인트: {bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_PP", "§f{item} {amount}개를 {price}포인트에 구매함. 남은포인트: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_PP", "§f{item} {amount}개를 {price}포인트에 판매함. 남은포인트: {bal}"); ccLang.get().addDefault("MESSAGE.QSELL_NA", "§f해당 아이탬을 취급하는 상점이 없습니다."); ccLang.get().addDefault("MESSAGE.DELIVERY_CHARGE", "§f배달비: {fee}"); ccLang.get().addDefault("MESSAGE.DELIVERY_CHARGE_NA", "§f다른 월드로 배달할 수 없습니다."); ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_MONEY", "§f돈이 부족합니다. 잔액: {bal}"); ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_POINT", "§f포인트가 부족합니다. 잔액: {bal}"); + ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_PLAYER_POINT", "§f플레이어 포인트가 부족합니다. 잔액: {bal}"); ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§f판매 할 아이탬이 없습니다."); ccLang.get().addDefault("MESSAGE.INVENTORY_FULL", "§4인벤토리에 빈 공간이 없습니다!"); ccLang.get().addDefault("MESSAGE.IRREVERSIBLE", "§f이 행동은 되돌릴 수 없습니다!"); @@ -322,6 +326,9 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("MESSAGE.SHOP_DISABLED", "이 상점은 비황성화된 상태입니다. 어드민이 아닌 유저는 접근할 수 없습니다. 상점 설정에서 활성화 할 수 있습니다."); ccLang.get().addDefault("MESSAGE.ROTATION_SHARED_DATA_MISSING", "§e[ ! ]§f'{0}/SharedData.yml' 에서 {1} 개의 아이템에 대한 정보를 찾을 수 없었습니다. 이 아이템들은 장식으로 추가되었습니다."); ccLang.get().addDefault("MESSAGE.ENTER_COMMAND", "명령어를 '/' 제외하고 입력하세요."); + ccLang.get().addDefault("MESSAGE.ENTER_COMMAND_2", "'인덱스/명령어' 형태로 입력하세요."); + ccLang.get().addDefault("MESSAGE.SELL_COMMAND_CUR", "현재 적용중인 판매 명령어:"); + ccLang.get().addDefault("MESSAGE.BUY_COMMAND_CUR", "현재 적용중인 구매 명령어:"); ccLang.get().addDefault("HELP.TITLE", "§f도움말: {command} --------------------"); ccLang.get().addDefault("HELP.SHOP", "상점을 엽니다."); @@ -368,6 +375,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("ERR.DEFAULT_VALUE_OUT_OF_RANGE", "기본 가격은 최소 가격과 최대 가격 사이의 값이어야 합니다."); ccLang.get().addDefault("ERR.NO_RECOMMEND_DATA", "Worth.yml 파일에 이 아이탬의 정보가 없습니다."); ccLang.get().addDefault("ERR.JOBS_REBORN_NOT_FOUND", "Jobs reborn 플러그인을 찾을 수 없습니다."); + ccLang.get().addDefault("ERR.PLAYER_POINTS_NOT_FOUND", "Player points 플러그인을 찾을 수 없습니다."); ccLang.get().addDefault("ERR.SHOP_HAS_INF_BAL", "{shop} 상점은 무한계좌 상점입니다."); ccLang.get().addDefault("ERR.SHOP_DIFF_CURRENCY", "두 상점이 서로 다른 통화를 사용합니다."); ccLang.get().addDefault("ERR.PLAYER_NOT_EXIST", "해당 플레이어를 찾을 수 없습니다."); @@ -400,6 +408,9 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("CLOSE", "§f닫기"); ccLang.get().addDefault("CLOSE_LORE", "§f§n클릭: 닫기"); + ccLang.get().addDefault("JOB_POINTS", "Job Points"); + ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); + ccLang.get().addDefault("PAID_VERSION.DESC", "§f유료 버전에서 사용할 수 있습니다. "); ccLang.get().addDefault("PAID_VERSION.GET_PREMIUM", "구매하기"); @@ -479,6 +490,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("SHOP_SETTING.LOCAL_SHOP_LORE", "§fMust visit actual store locations."); ccLang.get().addDefault("SHOP_SETTING.DELIVERY_CHARGE_LORE", "§fYou can pay for delivery without \n§fhaving to go to the shop location to transact."); ccLang.get().addDefault("SHOP_SETTING.JOB_POINT_LORE", "§fTrade with job points. \n§fRequires 'Jobs Reborn' plugin"); + ccLang.get().addDefault("SHOP_SETTING.PLAYER_POINT_LORE", "§fTrade with player points. \n§fRequires 'Player point' plugin"); ccLang.get().addDefault("SHOP_SETTING.SHOW_VALUE_CHANGE_LORE", "§fShows the amount of change in price."); ccLang.get().addDefault("SHOP_SETTING.HIDE_STOCK", "§fHide stock."); ccLang.get().addDefault("SHOP_SETTING.HIDE_PRICING_TYPE", "§fHide price type."); @@ -497,7 +509,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("SHOP_SETTING.COMMAND_SELL", "§fSell Command"); ccLang.get().addDefault("SHOP_SETTING.COMMAND_BUY", "§fBuy Command"); ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE1", "§eLMB: Set"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE2", "§eShift RMB: Delete"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_LORE3", "§eShift RMB: Delete last item"); ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3Rotation Editor"); ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§aEnabled"); @@ -677,11 +689,14 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§fSold {item} x{amount} for {price}. Balance: {bal}"); ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_JP", "§fBought {item} x{amount} for {price}points. Remaining points: {bal}"); ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_JP", "§fSold {item} x{amount} for {price}points. Remaining points: {bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_PP", "§fBought {item} x{amount} for {price}points. Remaining points: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_PP", "§fSold {item} x{amount} for {price}points. Remaining points: {bal}"); ccLang.get().addDefault("MESSAGE.QSELL_NA", "§fThere is no shop that handles this item."); ccLang.get().addDefault("MESSAGE.DELIVERY_CHARGE", "§fDelivery fee: {fee}"); ccLang.get().addDefault("MESSAGE.DELIVERY_CHARGE_NA", "§fIt cannot be delivered to another world."); ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_MONEY", "§fNot enough money. balance: {bal}"); ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_POINT", "§fNot enough points. balance: {bal}"); + ccLang.get().addDefault("MESSAGE.NOT_ENOUGH_PLAYER_POINT", "§fNot enough player points. balance: {bal}"); ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§fThere are no items for sale."); ccLang.get().addDefault("MESSAGE.INVENTORY_FULL", "§4There are no empty spaces in your inventory!"); ccLang.get().addDefault("MESSAGE.IRREVERSIBLE", "§fThis action is irreversible!"); @@ -700,6 +715,9 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("MESSAGE.SHOP_DISABLED", "This shop is currently disabled. Non-admin users cannot use it. You can enable it in the shop settings."); ccLang.get().addDefault("MESSAGE.ROTATION_SHARED_DATA_MISSING", "§e[ ! ]§fThe required data could not be found in '{0}/SharedData.yml' for {1} items. These items have been added as decoration."); ccLang.get().addDefault("MESSAGE.ENTER_COMMAND", "Enter the command without '/'."); + ccLang.get().addDefault("MESSAGE.ENTER_COMMAND_2", "Enter in the form of 'index/command'."); + ccLang.get().addDefault("MESSAGE.SELL_COMMAND_CUR", "Sell commands currently in effect:"); + ccLang.get().addDefault("MESSAGE.BUY_COMMAND_CUR", "Buy commands currently in effect:"); ccLang.get().addDefault("HELP.TITLE", "§fHelp: {command} --------------------"); ccLang.get().addDefault("HELP.SHOP", "Open shop"); @@ -746,6 +764,7 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("ERR.DEFAULT_VALUE_OUT_OF_RANGE", "The base price must be between the minimum price and the maximum price."); ccLang.get().addDefault("ERR.NO_RECOMMEND_DATA", "There is no information for this item in the Worth.yml file."); ccLang.get().addDefault("ERR.JOBS_REBORN_NOT_FOUND", "Could not find 'Jobs reborn'."); + ccLang.get().addDefault("ERR.PLAYER_POINTS_NOT_FOUND", "Could not find 'Player points'."); ccLang.get().addDefault("ERR.SHOP_HAS_INF_BAL", "{shop} is an infinite account store."); ccLang.get().addDefault("ERR.SHOP_DIFF_CURRENCY", "The two stores use different currencies."); ccLang.get().addDefault("ERR.PLAYER_NOT_EXIST", "The player could not be found."); @@ -777,6 +796,10 @@ public static void setupLangFile(String lang) ccLang.get().addDefault("RMB", "RMB"); ccLang.get().addDefault("CLOSE", "§fClose"); ccLang.get().addDefault("CLOSE_LORE", "§f§nClick: Close"); + + ccLang.get().addDefault("JOB_POINTS", "Job Points"); + ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); + ccLang.get().addDefault("PAID_VERSION.DESC", "§fAvailable in paid version. "); ccLang.get().addDefault("PAID_VERSION.GET_PREMIUM", "Get Premium"); diff --git a/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java index a5c778d..e33084e 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/ShopUtil.java @@ -670,7 +670,9 @@ public static CompletableFuture asyncFindBestShoptoSell(Player player, continue; } - if (data.get().contains("Options.flag.signshop") || data.get().contains("Options.flag.jobpoint")) + if (data.get().contains("Options.flag.signshop") || + data.get().contains("Options.flag.jobpoint") || + data.get().contains("Options.flag.playerpoint")) continue; // 영업시간 확인 @@ -691,7 +693,8 @@ public static CompletableFuture asyncFindBestShoptoSell(Player player, if (tradeType != null && tradeType.equalsIgnoreCase("BuyOnly")) continue; // 구매만 가능함 // 상점에 돈이 없음 - if (ShopUtil.getShopBalance(entry.getKey()) != -1 && ShopUtil.getShopBalance(entry.getKey()) < Calc.calcTotalCost(entry.getKey(), String.valueOf(sameItemIdx), itemStack.getAmount())) + if (ShopUtil.getShopBalance(entry.getKey()) != -1 && + ShopUtil.getShopBalance(entry.getKey()) < Calc.calcTotalCost(entry.getKey(), String.valueOf(sameItemIdx), itemStack.getAmount())[0]) { continue; } @@ -748,7 +751,9 @@ public static String[] FindTheBestShopToBuy(Player player, ItemStack itemStack) continue; } - if (data.get().contains("Options.flag.signshop") || data.get().contains("Options.flag.jobpoint")) + if (data.get().contains("Options.flag.signshop") || + data.get().contains("Options.flag.jobpoint") || + data.get().contains("Options.flag.playerpoint")) continue; // 영업시간 확인 @@ -1177,7 +1182,7 @@ public static boolean CheckShopHour(String shopName, Player player) } } - public static void SetShopSellCommand(String shopName, String command) + public static void SetShopSellCommand(String shopName, int idx, String command) { CustomConfig shopData = ShopUtil.shopConfigFiles.get(shopName); if (shopData == null) @@ -1187,11 +1192,11 @@ public static void SetShopSellCommand(String shopName, String command) if (shopConf == null) return; - shopConf.set("command.sell", command); + shopConf.set("command.sell." + idx, command); shopData.save(); } - public static void SetShopBuyCommand(String shopName, String command) + public static void SetShopBuyCommand(String shopName, int idx, String command) { CustomConfig shopData = ShopUtil.shopConfigFiles.get(shopName); if (shopData == null) @@ -1201,7 +1206,7 @@ public static void SetShopBuyCommand(String shopName, String command) if (shopConf == null) return; - shopConf.set("command.buy", command); + shopConf.set("command.buy." + idx, command); shopData.save(); } } diff --git a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java index b8f8e38..2da6633 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java @@ -278,6 +278,7 @@ public static List onTabCompleteBody(DynamicShop dynamicShop, CommandSen temp.add("localShop"); temp.add("deliveryCharge"); temp.add("jobPoint"); + temp.add("playerPoint"); temp.add("showValueChange"); temp.add("hideStock"); temp.add("hidePricingType"); @@ -334,6 +335,16 @@ else if (args.length == 5 && args[3].equalsIgnoreCase("active")) AddToAutoCompleteIfValid(args[4]); } + else if (args[3].equalsIgnoreCase("sell") || args[3].equalsIgnoreCase("buy")) + { + if(args.length == 5) + { + temp.add("add"); + temp.add("delete"); + + AddToAutoCompleteIfValid(args[4]); + } + } Help.showHelp("command", (Player) sender, args); } else if (args[2].equalsIgnoreCase("account") && sender.hasPermission(P_ADMIN_SHOP_EDIT)) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bdaccad..bd7c42b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,7 +2,7 @@ name: DynamicShop version: ${project.version} main: me.sat7.dynamicshop.DynamicShop depend: [Vault] -softdepend: [PlaceholderAPI, Jobs, LocaleLib] +softdepend: [PlaceholderAPI, Jobs, LocaleLib, PlayerPoints] api-version: 1.16 authors: [sat7, jpenilla, Multitallented, Chris6ix, KevinDaGame, FlorianKoerner, Kapitowa, LincolnJota] description: Full GUI shop with dynamic prices