From 500744c60763c2b06be92d3487f7088285bebc15 Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Tue, 8 Jul 2025 21:12:09 +0800 Subject: [PATCH 1/6] Update shop utilities, tests, dependencies, and metadata Introduced `ccShop` to `ShopUtil` and adjusted test cases for cost calculations. Upgraded dependencies in `pom.xml`, added additional repository, and updated plugin authors in `plugin.yml`. Incremented the plugin version to 3.120.3. --- pom.xml | 8 ++++++-- src/main/resources/plugin.yml | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index f3c31f2..6dc1174 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.sat7 DynamicShop - 3.120.1 + 3.120.3 jar DynamicShop @@ -104,6 +104,10 @@ rosewood-repo https://repo.rosewooddev.io/repository/public/ + + codemc-repo + https://repo.codemc.io/repository/maven-public/ + @@ -162,7 +166,7 @@ com.github.PikaMug LocaleLib - 3.9 + 4.1.1 org.black_ixx diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7dd5050..ec84cd3 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ main: me.sat7.dynamicshop.DynamicShop depend: [Vault] softdepend: [PlaceholderAPI, Jobs, LocaleLib, PlayerPoints] api-version: 1.16 -authors: [sat7, jpenilla, Multitallented, Chris6ix, KevinDaGame, FlorianKoerner, Kapitowa, LincolnJota] +authors: [sat7, jpenilla, Multitallented, Chris6ix, KevinDaGame, FlorianKoerner, Kapitowa, LincolnJota, CreamGod45] description: Full GUI shop with dynamic prices commands: DynamicShop: From e8d0180cf2073e1346a6e2664cb28d87de127db2 Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Wed, 9 Jul 2025 02:04:39 +0800 Subject: [PATCH 2/6] Add help fallback, enhance features, and update dependencies Introduce help fallback for unrecognized commands to improve UX. Enhance ItemPalette functionality with better last page handling and error prevention. Update dependencies in pom.xml to newer versions for improved stability and performance. (cherry picked from commit 312279a3ec54c1f713fa9fa446a68c484f143ddf) --- README.md | 2 +- pom.xml | 4 +- .../sat7/dynamicshop/commands/CMDManager.java | 2 + .../me/sat7/dynamicshop/commands/Help.java | 197 +- .../me/sat7/dynamicshop/guis/ItemPalette.java | 13 +- .../sat7/dynamicshop/utilities/LangUtil.java | 2244 ++++++++++------- .../utilities/TabCompleteUtil.java | 5 +- src/main/resources/plugin.yml | 51 + 8 files changed, 1614 insertions(+), 904 deletions(-) diff --git a/README.md b/README.md index 37658c9..188e26e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Supported Minecraft versions: 1.16.5 ~ 1.21 +Supported Minecraft versions: 1.16.5 ~ 1.21.5 Free version https://www.spigotmc.org/resources/65603/ diff --git a/pom.xml b/pom.xml index 6dc1174..f74598b 100644 --- a/pom.xml +++ b/pom.xml @@ -132,12 +132,12 @@ com.opencsv opencsv - 5.2 + 5.11.2 commons-io commons-io - 2.11.0 + 2.14.0 me.clip diff --git a/src/main/java/me/sat7/dynamicshop/commands/CMDManager.java b/src/main/java/me/sat7/dynamicshop/commands/CMDManager.java index ece64aa..3dbe7c6 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/CMDManager.java +++ b/src/main/java/me/sat7/dynamicshop/commands/CMDManager.java @@ -123,6 +123,8 @@ public static void RunCMD(String key, String[] args, CommandSender sender) if(CMDHashMap.containsKey(key)) { CMDHashMap.get(key).RunCMD(args, sender); + } else { + Help.showHelp("main", sender, args); } } } diff --git a/src/main/java/me/sat7/dynamicshop/commands/Help.java b/src/main/java/me/sat7/dynamicshop/commands/Help.java index 30cbbbf..b3b9059 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Help.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Help.java @@ -3,6 +3,7 @@ import me.sat7.dynamicshop.commands.shop.Command; import me.sat7.dynamicshop.utilities.UserUtil; import org.bukkit.Material; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -103,7 +104,9 @@ public static void showHelp(String helpcode, Player player, String[] args) { try { - ItemStack tempItem = new ItemStack(Material.getMaterial(args[3])); + Material material = Material.getMaterial(args[3]); + if(material == null) return; + ItemStack tempItem = new ItemStack(material); int idx = ShopUtil.findItemFromShop(args[1], tempItem); if (idx != -1) @@ -124,7 +127,9 @@ public static void showHelp(String helpcode, Player player, String[] args) { try { - ItemStack tempItem = new ItemStack(Material.getMaterial(args[3].substring(args[3].indexOf("/") + 1))); + Material material = Material.getMaterial(args[3].substring(args[3].indexOf("/") + 1)); + if(material == null) return; + ItemStack tempItem = new ItemStack(material); int idx = ShopUtil.findItemFromShop(args[1], tempItem); if (idx != -1) @@ -222,5 +227,193 @@ else if (helpcode.equals("background")) { CMDManager.background.SendHelpMessage(player); } + else + { + CMDManager.commandHelp.SendHelpMessage(player); + } + } + + public static void showHelp(String helpcode, CommandSender sender, String[] args) { + // 控制台不需要权限和用户数据检查 + + switch (helpcode) { + case "main": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "main")); + sender.sendMessage(" - shop: " + t(sender, "HELP.SHOP")); + sender.sendMessage(" - qsell: " + t(sender, "HELP.QSELL")); + sender.sendMessage(" - cmdHelp: " + t(sender, "HELP.CMD")); + sender.sendMessage("§e - createshop: " + t(sender, "HELP.CREATE_SHOP")); + sender.sendMessage("§e - deleteshop: " + t(sender, "HELP.DELETE_SHOP")); + sender.sendMessage("§e - reload: " + t(sender, "HELP.RELOAD")); + sender.sendMessage(""); + break; + case "shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "shop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop []"); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + + ": /ds shop "); + + sender.sendMessage("§e - enable: " + t(sender, "HELP.SHOP_ENABLE")); + sender.sendMessage("§e - add: " + t(sender, "HELP.SHOP_ADD_ITEM")); + sender.sendMessage("§e - edit: " + t(sender, "HELP.SHOP_EDIT")); + sender.sendMessage("§e - editall: " + t(sender, "HELP.EDIT_ALL")); + sender.sendMessage("§e - setToRecAll: " + t(sender, "HELP.SET_TO_REC_ALL")); + sender.sendMessage(""); + break; + case "open_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "open_shop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds openshop [player]"); + sender.sendMessage(""); + break; + case "enable": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "enable")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop enable "); + sender.sendMessage(""); + break; + case "add": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "add")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop add [display_name]"); + sender.sendMessage(""); + break; + case "edit": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "edit")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop edit "); + sender.sendMessage(""); + break; + case "edit_all": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "edit_all")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop editall "); + sender.sendMessage(""); + break; + case "set_to_rec_all": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "set_to_rec_all")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop setToRecAll"); + sender.sendMessage(""); + break; + case "cmd_help": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "cmdHelp")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds cmdHelp "); + sender.sendMessage(" - " + t(sender, "HELP.CMD")); + sender.sendMessage(""); + break; + case "iteminfo": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "iteminfo")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds iteminfo"); + sender.sendMessage(""); + break; + case "create_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "createshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds createshop "); + sender.sendMessage(""); + break; + case "delete_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "deleteshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds deleteshop "); + sender.sendMessage(""); + break; + case "merge_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "mergeshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds mergeshop "); + sender.sendMessage(""); + break; + case "rename_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "renameshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds renameshop "); + sender.sendMessage(""); + break; + case "copy_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "copyshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds copyshop "); + sender.sendMessage(""); + break; + case "permission": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "permission")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop permission "); + sender.sendMessage(""); + break; + case "max_page": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "maxpage")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop maxpage "); + sender.sendMessage(""); + break; + case "currency": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "currency")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop currency "); + sender.sendMessage(""); + break; + case "flag": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "flag")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop flag "); + sender.sendMessage(""); + break; + case "position": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "position")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop position"); + sender.sendMessage(""); + break; + case "shophours": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "shophours")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop shophours "); + sender.sendMessage(""); + break; + case "fluctuation": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "fluctuation")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop fluctuation "); + sender.sendMessage(""); + break; + case "stock_stabilizing": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "stockStabilizing")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop stockStabilizing "); + sender.sendMessage(""); + break; + case "command": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "command")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop command add "); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop command delete "); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop command active "); + sender.sendMessage(""); + Command.PrintCurrentState(sender, Shop.GetShopName(args), true, true); + break; + case "account": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "account")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop account [value]"); + sender.sendMessage(""); + break; + case "set_tax": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "settax")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds settax "); + sender.sendMessage(""); + break; + case "set_default_shop": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "setdefaultshop")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds setdefaultshop "); + sender.sendMessage(""); + break; + case "delete_old_user": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "deleteolduser")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds deleteolduser "); + sender.sendMessage(""); + break; + case "sellbuy": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "sellbuy")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop sellbuy "); + sender.sendMessage(""); + break; + case "log": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "log")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop log "); + sender.sendMessage(""); + break; + case "resetTradingVolume": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "resetTradingVolume")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop resetTradingVolume"); + sender.sendMessage(""); + break; + case "background": + sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "HELP.TITLE").replace("{command}", "background")); + sender.sendMessage(" - " + t(sender, "HELP.USAGE") + ": /ds shop background "); + sender.sendMessage(""); + break; + } } } diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java index cf2ad44..d1c8451 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java @@ -1,8 +1,6 @@ package me.sat7.dynamicshop.guis; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; +import java.util.*; import me.sat7.dynamicshop.DynaShopAPI; import me.sat7.dynamicshop.events.OnChat; @@ -29,6 +27,7 @@ public final class ItemPalette extends InGameUI { + public ItemPalette() { uiType = UI_TYPE.ItemPalette; @@ -44,6 +43,7 @@ public ItemPalette() private static ArrayList sortedList = new ArrayList<>(); private ArrayList paletteList = new ArrayList<>(); + private Map lastPage = new HashMap<>(); private Player player; private String shopName = ""; private int shopSlotIndex = 0; @@ -392,6 +392,10 @@ private void MovePage(boolean isLeft, boolean isRight) return; DynaShopAPI.openItemPalette(player, uiSubType, shopName, shopSlotIndex, targetPage, this.search); + + if(uiType == UI_TYPE.Shop) { + lastPage.put(player.getUniqueId(), currentPage); + } } private void AddAll(boolean applyRecommend) @@ -431,6 +435,7 @@ private void AddAll(boolean applyRecommend) if (worth != 0) { median = ShopUtil.CalcRecommendedMedian(worth, ConfigUtil.GetNumberOfPlayer()); + worth = 1; } else { if (player != null) @@ -442,7 +447,7 @@ private void AddAll(boolean applyRecommend) ShopUtil.addItemToShop(shopName, targetSlotIdx, temp); } } - DynaShopAPI.openShopGui(player, shopName, 1); + DynaShopAPI.openShopGui(player, shopName, lastPage.getOrDefault(player.getUniqueId(), 1)); } private void OnClickSearch(boolean isLeft, boolean isRight) diff --git a/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java index 90cd64d..cbc0f5d 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/LangUtil.java @@ -28,905 +28,17 @@ private LangUtil() public static void setupLangFile(String lang) { // 한국어 - { - ccLang.setup("Lang_V3_ko-KR", null); - - ccLang.get().addDefault("START_PAGE.EDITOR_TITLE", "§3아이콘 편집"); - ccLang.get().addDefault("START_PAGE.EDIT_NAME", "§f이름 바꾸기"); - ccLang.get().addDefault("START_PAGE.EDIT_LORE", "§f설명 바꾸기"); - ccLang.get().addDefault("START_PAGE.EDIT_ICON", "§f아이콘 바꾸기"); - ccLang.get().addDefault("START_PAGE.EDIT_ACTION", "§f실행 명령어 바꾸기"); - ccLang.get().addDefault("START_PAGE.SHOP_SHORTCUT", "§f상점으로 가는 버튼 만들기"); - ccLang.get().addDefault("START_PAGE.CREATE_DECO", "§f장식 버튼 만들기"); - ccLang.get().addDefault("START_PAGE.ENTER_SHOP_NAME", "상점 이름을 입력하세요."); - ccLang.get().addDefault("START_PAGE.DEFAULT_SHOP_LORE", "§f§n클릭: 상점으로 가기"); - ccLang.get().addDefault("START_PAGE.ITEM_MOVE_LORE", "§e우클릭: 이동"); - ccLang.get().addDefault("START_PAGE.ITEM_COPY_LORE", "§e우클릭: 복사"); - ccLang.get().addDefault("START_PAGE.ITEM_REMOVE_LORE", "§eShift 좌클릭: 삭제"); - ccLang.get().addDefault("START_PAGE.ITEM_EDIT_LORE", "§eShift우클릭: 편집"); - ccLang.get().addDefault("START_PAGE.REMOVE", "§f제거"); - ccLang.get().addDefault("START_PAGE.REMOVE_LORE", "§f이 버튼을 시작페이지에서 제거합니다."); - ccLang.get().addDefault("START_PAGE.ENTER_NAME", "버튼의 새 이름을 입력하세요."); - ccLang.get().addDefault("START_PAGE.ENTER_LORE", "버튼의 새 설명을 입력하세요."); - ccLang.get().addDefault("START_PAGE.ENTER_ICON", "버튼의 아이콘으로 사용할 아이탬 이름을 입력하세요. (영문. 대소문자 구분없음)"); - ccLang.get().addDefault("START_PAGE.ENTER_ACTION", "명령어를 '/' 제외하고 입력하세요. 버튼을 눌렀을때 이 명령어가 실행됩니다."); - ccLang.get().addDefault("START_PAGE.ENTER_COLOR", "장식 버튼의 색상을 입력하세요. (영문)"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST_TITLE", "§3상점 목록"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_LORE", "§e좌클릭: 이전 페이지\n§e우클릭: 다음 페이지"); - - ccLang.get().addDefault("COLOR_PICKER_TITLE", "§3색상 선택"); - - ccLang.get().addDefault("SHOP.TRADE_LORE", "§f§n클릭: 거래"); - ccLang.get().addDefault("SHOP.BUY_PRICE", "§f구매: {num}"); - ccLang.get().addDefault("SHOP.SELL_PRICE", "§f판매: {num}"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED", "§f구매: §8§m{num}§r §a{num2}"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED", "§f판매: §8§m{num}§r §c{num2}"); - ccLang.get().addDefault("SHOP.BUY_PRICE_PP", "§f구매: {num}PP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_PP", "§f판매: {num}PP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_EXP", "§f구매: {num}Exp"); - ccLang.get().addDefault("SHOP.SELL_PRICE_EXP", "§f판매: {num}Exp"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_EXP", "§f구매: §8§m{num}Exp§r §a{num2}Exp"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_EXP", "§f판매: §8§m{num}Exp§r §c{num2}Exp"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_PP", "§f구매: §8§m{num}PP§r §a{num2}PP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_PP", "§f판매: §8§m{num}PP§r §c{num2}PP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_JP", "§f구매: {num}JP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_JP", "§f판매: {num}JP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_JP", "§f구매: §8§m{num}JP§r §a{num2}JP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_JP", "§f판매: §8§m{num}JP§r §c{num2}JP"); - ccLang.get().addDefault("SHOP.STOCK", "§8재고: {num}"); - ccLang.get().addDefault("SHOP.STOCK_2", "§8재고: {stock}/{max_stock}"); - ccLang.get().addDefault("SHOP.INF_STOCK", "§8무한"); - ccLang.get().addDefault("SHOP.STATIC_PRICE", "§8[고정 가격]"); - ccLang.get().addDefault("SHOP.STACKS", "§8{num} 스택"); - ccLang.get().addDefault("SHOP.ITEM_MOVE_LORE", "§e우클릭: 이동"); - ccLang.get().addDefault("SHOP.ITEM_COPY_LORE", "§e우클릭: 복사"); - ccLang.get().addDefault("SHOP.ITEM_EDIT_LORE", "§eShift우클릭: 편집"); - ccLang.get().addDefault("SHOP.DECO_DELETE_LORE", "§eShift우클릭: 삭제"); - ccLang.get().addDefault("SHOP.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); - ccLang.get().addDefault("SHOP.PAGE_LORE_V2", "§f§n좌클릭: 이전 페이지\n§f§n우클릭: 다음 페이지\n§7인벤토리에서 아이템을 클릭하면 \n§7그 아이템이 있는 페이지로 이동합니다."); - ccLang.get().addDefault("SHOP.GO_TO_PAGE_EDITOR", "§eShift+우: 페이지 에디터"); - ccLang.get().addDefault("SHOP.ITEM_MOVE_SELECTED", "아이탬 선택됨. 비어있는 칸을 우클릭하면 이동합니다."); - ccLang.get().addDefault("SHOP.PERMISSION", "§f퍼미션:"); - ccLang.get().addDefault("SHOP.PERMISSION_ITEM", "§7 - {permission}"); - ccLang.get().addDefault("SHOP.FLAGS", "§e플래그:"); - ccLang.get().addDefault("SHOP.FLAGS_ITEM", "§e - {flag}"); - ccLang.get().addDefault("SHOP.SHOP_BAL_INF", "§f상점 계좌 무제한"); - ccLang.get().addDefault("SHOP.SHOP_BAL", "§f상점 계좌 잔액"); - ccLang.get().addDefault("SHOP.SHOP_LOCATION", "§f상점 위치: x {x}, y {y}, z {z}"); - ccLang.get().addDefault("SHOP.SHOP_LOCATION_B", "§f상점 위치: "); - ccLang.get().addDefault("SHOP.SHOP_INFO_DASH", "§7 - "); - ccLang.get().addDefault("SHOP.DISABLED", "§c비활성§8|§f"); - ccLang.get().addDefault("SHOP.INCOMPLETE_DATA", "불완전한 데이터"); - ccLang.get().addDefault("SHOP.INCOMPLETE_DATA_Lore", "이 아이템은 어드민이 아닌\n유저에게는 보이지 않습니다.\nIndex: "); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_BUY", "§a구매량 제한 : {num} 남음"); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_SELL", "§a판매량 제한 : {num} 남음"); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_TIMER", "§a다음 리셋: {time}"); - ccLang.get().addDefault("SHOP.CLICK_TO_ADD", "§e클릭: 추가"); - - ccLang.get().addDefault("SHOP_SETTING_TITLE", "§3상점 설정"); - ccLang.get().addDefault("SHOP_SETTING.LOG_TOGGLE_LORE", "§e우클릭: 로그 뷰어"); - ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_CONSOLE", "§f로그를 콘솔에 출력"); - ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_ADMIN", "§f로그를 어드민에게 출력"); - ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE", "§f최대 페이지"); - ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE_LORE", "§f상점의 최대 페이지를 설정합니다"); - ccLang.get().addDefault("SHOP_SETTING.BACKGROUND", "§f배경 색상"); - ccLang.get().addDefault("SHOP_SETTING.BACKGROUND_LORE", "§e클릭: 변경"); - ccLang.get().addDefault("SHOP_SETTING.L_R_SHIFT", "§e좌: -1 우: +1 Shift: x5"); - ccLang.get().addDefault("SHOP_SETTING.FLAG", "§f플래그"); - ccLang.get().addDefault("SHOP_SETTING.SHOP_SETTINGS_LORE", "§e우클릭: 상점 편집"); - ccLang.get().addDefault("SHOP_SETTING.SIGN_SHOP_LORE", "§f표지판을 통해서만 접근할 수 있습니다."); - 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.SELECTED", "§2선택됨"); - ccLang.get().addDefault("SHOP_SETTING.CURRENCY", "§f화폐 유형: "); - ccLang.get().addDefault("SHOP_SETTING.VAULT_LORE", "§f기본값 입니다."); - ccLang.get().addDefault("SHOP_SETTING.EXP_LORE", "§f플레이어의 경험치로 거래합니다."); - 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가격 유형 표기를 숨깁니다."); - ccLang.get().addDefault("SHOP_SETTING.HIDE_SHOP_BALANCE", "§f상점 계좌 잔액을 숨깁니다."); - ccLang.get().addDefault("SHOP_SETTING.SHOW_MAX_STOCK", "§f재고 상한을 표시합니다."); - ccLang.get().addDefault("SHOP_SETTING.HIDDEN_IN_COMMAND", "§f명령어 자동완성시 이 상점을 표시하지 않습니다."); - ccLang.get().addDefault("SHOP_SETTING.INTEGER_ONLY", "§f구매 가격이 올림 처리됩니다.\n§f판매 가격은 내림 처리됩니다."); - ccLang.get().addDefault("SHOP_SETTING.PERMISSION", "§f퍼미션"); - ccLang.get().addDefault("SHOP_SETTING.STATE", "§f상태"); - ccLang.get().addDefault("SHOP_SETTING.STATE_ENABLE", "§a활성"); - ccLang.get().addDefault("SHOP_SETTING.STATE_DISABLE", "§c비활성"); - ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR", "§f로테이션: "); - ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR_LORE", "§e클릭: 로테이션 에디터"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE", "§f커맨드 실행"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE_LORE", "§f상점 거래 발생시 서버 명령어를 실행합니다."); - 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_LORE3", "§e씨프트 우클릭: 마지막 항목 삭제"); - ccLang.get().addDefault("SHOP_SETTING.TRADE_UI", "§f거래 UI 설정"); - ccLang.get().addDefault("SHOP_SETTING.TRADE_UI_LORE_2", "§e좌클릭: 편집\n§e우클릭: 초기화"); - - ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3로테이션 에디터"); - ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§a로테이션 켜짐"); - ccLang.get().addDefault("ROTATION_EDITOR.DISABLED", "§c로테이션 꺼짐"); - ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_ENABLE", "§e좌클릭: 로테이션 켜기"); - ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_DISABLE", "§e좌클릭: 로테이션 끄기"); - ccLang.get().addDefault("ROTATION_EDITOR.CURRENT_TIME", "§f현재 시간: "); - ccLang.get().addDefault("ROTATION_EDITOR.CURRENTLY_IN_USE", "§a[현재 적용중]"); - ccLang.get().addDefault("ROTATION_EDITOR.NEXT_ROTATION", "§f다음 로테이션: "); - ccLang.get().addDefault("ROTATION_EDITOR.PERIOD", "§f로테이션 주기"); - ccLang.get().addDefault("ROTATION_EDITOR.PERIOD_LORE_V2", "§e좌클릭: -1시간, 우클릭: +1시간, 씨프트: x10"); - ccLang.get().addDefault("ROTATION_EDITOR.TIMER", "§f타이머 조정"); - ccLang.get().addDefault("ROTATION_EDITOR.TIMER_LORE_V2", "§e좌클릭: -10분, 우클릭: +10분, 씨프트: x6"); - ccLang.get().addDefault("ROTATION_EDITOR.HOUR", "§f{0}시간"); - ccLang.get().addDefault("ROTATION_EDITOR.UNSAVED_CHANGES", "§c§o저장되지 않은 변경사항 있음"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES", "§f변경사항 적용"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES_LORE", "§e좌클릭: 변경사항 적용\n§e우클릭: 변경사항 초기화"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_ROTATION", "§e좌클릭: 지금 적용"); - ccLang.get().addDefault("ROTATION_EDITOR.OPEN", "§e좌클릭: 열기"); - ccLang.get().addDefault("ROTATION_EDITOR.CREATE", "§e좌클릭: 빈 로테이션 만들기"); - ccLang.get().addDefault("ROTATION_EDITOR.COPY_AS_NEW", "§e우클릭: 현재 상점 복사하여 만들기"); - ccLang.get().addDefault("ROTATION_EDITOR.DELETE", "§e씨프트 우클릭: §c삭제"); - ccLang.get().addDefault("ROTATION_EDITOR.REAPPLY", "§e씨프트 좌클릭: 재적용"); - ccLang.get().addDefault("ROTATION_EDITOR.MOVE", "§e우클릭: 이동"); - - ccLang.get().addDefault("ITEM_SETTING_TITLE", "§3아이탬 셋팅"); - ccLang.get().addDefault("ITEM_SETTING.VALUE_BUY", "§f구매가치: "); - ccLang.get().addDefault("ITEM_SETTING.VALUE_SELL", "§f판매가치: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE", "§f구매: "); - ccLang.get().addDefault("ITEM_SETTING.SELL_PRICE", "§f판매: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE_MIN", "§f최소 가격: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE_MAX", "§f최대 가격: "); - ccLang.get().addDefault("ITEM_SETTING.MEDIAN", "§f중앙값: "); - ccLang.get().addDefault("ITEM_SETTING.STOCK", "§f재고: "); - ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK", "§f재고 상한: "); - ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK_LORE", "§f재고량이 이보다 많아지면\n§f더이상 상점에 판매할 수 없게됩니다."); - ccLang.get().addDefault("ITEM_SETTING.INF_STOCK", "무한 재고"); - ccLang.get().addDefault("ITEM_SETTING.STATIC_PRICE", "고정 가격"); - ccLang.get().addDefault("ITEM_SETTING.UNLIMITED", "무제한"); - ccLang.get().addDefault("ITEM_SETTING.MEDIAN_HELP", "§f중앙값이 작을수록 가격이 급격이 변화합니다."); - ccLang.get().addDefault("ITEM_SETTING.TAX_IGNORED", "판매세 설정이 무시됩니다."); - ccLang.get().addDefault("ITEM_SETTING.RECOMMEND", "§f추천 값 적용"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT", "§f할인"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE", "§f할인율: {num}%\n§e좌클릭: +10, 우클릭: -10"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE_2", "§f할인율: {num}%\n§e좌클릭: -10, 우클릭: +10"); - ccLang.get().addDefault("ITEM_SETTING.DONE", "§f완료"); - ccLang.get().addDefault("ITEM_SETTING.DONE_LORE", "§f완료!"); - ccLang.get().addDefault("ITEM_SETTING.ROUND_DOWN", "§f내림"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_MEDIAN", "§f중앙값에 맞춤"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_STOCK", "§f재고에 맞춤"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_VALUE", "§f가격에 맞춤"); - ccLang.get().addDefault("ITEM_SETTING.CLOSE", "§f닫기"); - ccLang.get().addDefault("ITEM_SETTING.CLOSE_LORE", "§f§n클릭: 닫기"); - ccLang.get().addDefault("ITEM_SETTING.REMOVE", "§c제거"); - ccLang.get().addDefault("ITEM_SETTING.REMOVE_LORE", "§f이 아이템을 상점에서 제거합니다."); - ccLang.get().addDefault("ITEM_SETTING.BUY", "§3§l구매: {num}"); - ccLang.get().addDefault("ITEM_SETTING.SELL", "§3§l판매: {num}"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL", "§f플레이어 당 판매량 제한"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY", "§f플레이어 당 구매량 제한"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL", "§f거래량 제한 리셋 주기"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL_LORE", "§f주기: {interval}\n§f다음 리셋: {time}\n§e좌클릭: -1시간, 우클릭: +1시간, 씨프트 = x12"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER", "§f타이머 조정"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER_LORE", "§f{num}\n§f다음 리셋: {time}\n§e좌클릭: -1시간, 우클릭: +1시간, 씨프트 = x12"); - - ccLang.get().addDefault("TRADE_TITLE", "§3아이템 거래"); - ccLang.get().addDefault("TRADE.TOGGLE_SELLABLE", "§e클릭: 판매전용 토글"); - ccLang.get().addDefault("TRADE.TOGGLE_BUYABLE", "§e클릭: 구매전용 토글"); - ccLang.get().addDefault("TRADE.BUY_ONLY_LORE", "§f구매만 가능한 아이템"); - ccLang.get().addDefault("TRADE.SELL_ONLY_LORE", "§f판매만 가능한 아이템"); - ccLang.get().addDefault("TRADE.BALANCE", "§3내 잔액"); - ccLang.get().addDefault("TRADE.PRICE", "§f구매: {num}"); - ccLang.get().addDefault("TRADE.SELL_PRICE", "§f판매: {num}"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED", "§f구매: §8§m{num}§r §a{num2}"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED", "§f판매: §8§m{num}§r §c{num2}"); - ccLang.get().addDefault("TRADE.PRICE_EXP", "§f구매: {num}EXP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_EXP", "§f판매: {num}EXP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_EXP", "§f구매: §8§m{num}EXP§r §a{num2}EXP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_EXP", "§f판매: §8§m{num}EXP§r §c{num2}EXP"); - ccLang.get().addDefault("TRADE.PRICE_PP", "§f구매: {num}PP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_PP", "§f판매: {num}PP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_PP", "§f구매: §8§m{num}PP§r §a{num2}PP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_PP", "§f판매: §8§m{num}PP§r §c{num2}PP"); - ccLang.get().addDefault("TRADE.PRICE_JP", "§f구매: {num}JP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_JP", "§f판매: {num}JP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_JP", "§f구매: §8§m{num}JP§r §a{num2}JP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_JP", "§f판매: §8§m{num}JP§r §c{num2}JP"); - ccLang.get().addDefault("TRADE.BUY", "§c구매"); - ccLang.get().addDefault("TRADE.SELL", "§2판매"); - ccLang.get().addDefault("TRADE.STOCK", "§8재고: "); - ccLang.get().addDefault("TRADE.STACKS", "§8{num} 스택"); - ccLang.get().addDefault("TRADE.INF_STOCK", "§8무한 재고"); - ccLang.get().addDefault("TRADE.SHOP_BAL_INF", "§f상점 계좌 무제한"); - ccLang.get().addDefault("TRADE.SHOP_BAL", "§3상점 계좌 잔액 \n§f{num}"); - ccLang.get().addDefault("TRADE.CLICK_TO_BUY", "§c§n클릭: {amount}개 구매"); - ccLang.get().addDefault("TRADE.CLICK_TO_SELL", "§2§n클릭: {amount}개 판매"); - ccLang.get().addDefault("TRADE.PURCHASE_LIMIT_PER_PLAYER", "§a구매량 제한 : {num} 남음\n§a다음 리셋: {time}"); - ccLang.get().addDefault("TRADE.SALES_LIMIT_PER_PLAYER", "§a판매량 제한 : {num} 남음\n§a다음 리셋: {time}"); - - ccLang.get().addDefault("PAGE_EDITOR_TITLE", "§3페이지 편집"); - ccLang.get().addDefault("PAGE_EDITOR.PREV", "§f<<"); - ccLang.get().addDefault("PAGE_EDITOR.NEXT", "§f>>"); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SUCCESS", "§f페이지가 교체 되었습니다."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_FAIL", "§f페이지 교체 실패."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SELECTED", "§f페이지 선택되었습니다. 서로 교체 할 다른 페이지를 우클릭 하세요."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_LORE_PREMIUM", "§e좌클릭: 페이지 이동\n§e우클릭: 페이지 교체(스왑)\n§eShift+좌: 페이지 삽입\n§eShift+우: 페이지 삭제"); - ccLang.get().addDefault("PAGE_EDITOR.PRICE", "§f구매: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.SELL_PRICE", "§f판매: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.STOCK", "§8재고: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.STACKS", "§8{num} 스택"); - ccLang.get().addDefault("PAGE_EDITOR.STATIC_PRICE", "§8[고정 가격]"); - ccLang.get().addDefault("PAGE_EDITOR.EMPTY", "§8(비어있음)"); - ccLang.get().addDefault("PAGE_EDITOR.EMPTY_SLOT_LORE", "§e좌,우클릭: 밀기\n§e+씨프트: 당기기"); - ccLang.get().addDefault("TRADE.QUANTITY_LORE", "§eShift+우: 수량 편집"); - ccLang.get().addDefault("TRADE.WAIT_FOR_INPUT", "거래 UI에 표시 될 수량을 입력하세요.\n예시: 1,2,4,8,16,32,64"); - - ccLang.get().addDefault("LOG_VIEWER_TITLE", "§3로그 뷰어"); - ccLang.get().addDefault("LOG_VIEWER.DATE", "§f날짜: "); - ccLang.get().addDefault("LOG_VIEWER.TIME", "§f시간: "); - ccLang.get().addDefault("LOG_VIEWER.CURRENCY", "§f화폐 유형: "); - ccLang.get().addDefault("LOG_VIEWER.PRICE", "§f가격: "); - ccLang.get().addDefault("LOG_VIEWER.EXPAND", "§f펼치기"); - ccLang.get().addDefault("LOG_VIEWER.COLLAPSE", "§f접기"); - ccLang.get().addDefault("LOG_VIEWER.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); - ccLang.get().addDefault("LOG_VIEWER.PAGE_LORE", "§e좌클릭: 이전 페이지\n§e우클릭: 다음 페이지"); - ccLang.get().addDefault("LOG_VIEWER.FILE_LORE", "§e좌클릭: 열기\n§eShift+우: §c삭제"); - - - ccLang.get().addDefault("LOG.LOG", "§f로그"); - ccLang.get().addDefault("LOG.CLEAR", "§f로그 삭제됨"); - ccLang.get().addDefault("LOG.SAVE", "§f로그 저장됨"); - ccLang.get().addDefault("LOG.DELETE", "§4로그 삭제"); - ccLang.get().addDefault("LOG.SELL", "§f{player}(이)가 {shop}에 {item} {amount}개를 판매함"); - ccLang.get().addDefault("LOG.BUY", "§f{player}(이)가 {shop}에서 {item} {amount}개를 구매함"); - - ccLang.get().addDefault("STOCK_SIMULATOR_TITLE", "§3재고 시뮬레이터"); - ccLang.get().addDefault("STOCK_SIMULATOR.CHANGE_SAMPLE_LORE", "§e좌, 우클릭: 아이템 변경"); - ccLang.get().addDefault("STOCK_SIMULATOR.SIMULATOR_BUTTON_LORE", "§e우클릭: 시뮬레이터"); - ccLang.get().addDefault("STOCK_SIMULATOR.RUN_TITLE", "§f실행"); - ccLang.get().addDefault("STOCK_SIMULATOR.RUN_LORE", "§e좌클릭: 시뮬레이션 실행\n§e우클릭: 설정값을 상점에 적용합니다\n§f아이템은 영향받지 않습니다."); - ccLang.get().addDefault("STOCK_SIMULATOR.REAL_TIME", "§a(실제 시간)"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_S", "§a{0}초 후"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_M", "§a{0}분 후"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_H", "§a{0}시간 후"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_D", "§a{0}일 후"); - ccLang.get().addDefault("STOCK_SIMULATOR.L_R_SHIFT", "§e좌: -1 우: +1 Shift: x5"); - ccLang.get().addDefault("STOCK_SIMULATOR.PRICE", "§f구매: {num}"); - ccLang.get().addDefault("STOCK_SIMULATOR.MEDIAN", "§f중앙값: {num}"); - ccLang.get().addDefault("STOCK_SIMULATOR.STOCK", "§f재고: {num}"); - - ccLang.get().addDefault("PALETTE_TITLE", "§3판매할 아이템 선택"); - ccLang.get().addDefault("PALETTE_TITLE2", "§3아이템 선택"); - ccLang.get().addDefault("PALETTE.LORE_PREMIUM", "§e좌클릭: 추가\n§e씨프트 좌클릭: 설정 후 추가\n§e우클릭: 장식으로 추가\n§e씨프트 우클릭: '{item}' 를 검색"); - ccLang.get().addDefault("PALETTE.LORE2", "§e좌클릭: 선택\n§e씨프트 우클릭: '{item}' 를 검색"); - ccLang.get().addDefault("PALETTE.SEARCH", "§f찾기"); - ccLang.get().addDefault("PALETTE.ADD_ALL", "§f모두 추가"); - ccLang.get().addDefault("PALETTE.ADD_ALL_LORE", "§e좌클릭: 모두 추가\n§e씨프트 좌클릭: 모두 추가하고 권장 값 적용"); - ccLang.get().addDefault("PALETTE.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); - ccLang.get().addDefault("PALETTE.PAGE_LORE", "§f§n좌클릭: 이전 페이지\n§f§n우클릭: 다음 페이지"); - ccLang.get().addDefault("PALETTE.FILTER_APPLIED", "§f필터 적용됨 : "); - ccLang.get().addDefault("PALETTE.FILTER_LORE", "§f좌클릭: 검색\n§f우클릭: 필터 초기화\n\n§7\"BLUE_WOOL\"을 찾으려는 경우:\n§7 b w\n§7 wool\n§7 blue wool"); - - ccLang.get().addDefault("QUICK_SELL_TITLE", "§3빠른 판매"); - ccLang.get().addDefault("QUICK_SELL.GUIDE_TITLE", "§3§l빠른 판매 도움말"); - ccLang.get().addDefault("QUICK_SELL.GUIDE_LORE", "§a판매할 아이템을 좌클릭 하세요.\n§a씨프트 좌클릭으로 같은 유형의 아이템을 모두 팝니다.\n§a우클릭으로 해당 아이템 상점으로 이동합니다."); - - ccLang.get().addDefault("ARROW.UP", "§a⬆"); - ccLang.get().addDefault("ARROW.DOWN", "§c⬇"); - ccLang.get().addDefault("ARROW.UP_2", "§c⬆"); - ccLang.get().addDefault("ARROW.DOWN_2", "§a⬇"); - - ccLang.get().addDefault("TIME.OPEN", "Open"); - ccLang.get().addDefault("TIME.CLOSE", "Close"); - ccLang.get().addDefault("TIME.OPEN_LORE", "§f문 여는 시간 설정"); - ccLang.get().addDefault("TIME.CLOSE_LORE", "§f문 닫는 시간 설정"); - ccLang.get().addDefault("TIME.SHOPHOURS", "§f영업시간"); - ccLang.get().addDefault("TIME.OPEN24", "24시간 오픈"); - ccLang.get().addDefault("TIME.SHOP_IS_CLOSED", "§f상점이 문을 닫았습니다. 개점: {time}시. 현재시간: {curTime}시"); - ccLang.get().addDefault("TIME.SET_SHOPHOURS", "영업시간 설정"); - ccLang.get().addDefault("TIME.CUR", "§f현재 시간: {time}시"); - - ccLang.get().addDefault("STOCK_STABILIZING.SS", "§f재고 안정화"); - ccLang.get().addDefault("STOCK_STABILIZING.L_R_SHIFT", "§e좌클릭: -0.1 우클릭: +0.1 Shift: x5"); - ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_A", "§f중앙값(median)의 n%"); - ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_B", "§f중앙값(median)과의 격차의 n%"); - - ccLang.get().addDefault("FLUCTUATION.FLUCTUATION", "§f무작위 재고 변동"); - ccLang.get().addDefault("FLUCTUATION.INTERVAL", "§f변화 간격"); - ccLang.get().addDefault("FLUCTUATION.INTERVAL_LORE", "§f1h = 1000틱 = 현실시간 50초"); - ccLang.get().addDefault("FLUCTUATION.STRENGTH", "§f변화 강도"); - ccLang.get().addDefault("FLUCTUATION.STRENGTH_LORE", "§f중앙값(median)의 n%"); - - ccLang.get().addDefault("TAX.SALES_TAX", "§f판매세"); - ccLang.get().addDefault("TAX.USE_GLOBAL", "전역설정 사용 ({tax}%)"); - ccLang.get().addDefault("TAX.USE_LOCAL", "별도 설정"); - - ccLang.get().addDefault("MESSAGE.SEARCH_ITEM", "§f찾으려는 아이템의 이름을 입력하세요."); - ccLang.get().addDefault("MESSAGE.SEARCH_CANCELED", "§f검색 취소됨."); - ccLang.get().addDefault("MESSAGE.INPUT_CANCELED", "§f입력 취소됨."); - ccLang.get().addDefault("MESSAGE.DELETE_CONFIRM", "§f정말로 페이지를 삭제할까요? 'delete' 를 입력하면 삭제합니다."); - ccLang.get().addDefault("MESSAGE.CANT_DELETE_LAST_PAGE", "§f마지막 남은 페이지를 삭제할 수 없습니다."); - ccLang.get().addDefault("MESSAGE.SHOP_BAL_LOW", "§f상점이 돈을 충분히 가지고 있지 않습니다."); - ccLang.get().addDefault("MESSAGE.SHOP_CREATED", "§f상점 생성됨!"); - ccLang.get().addDefault("MESSAGE.SHOP_DELETED", "§f상점 제거됨!"); - ccLang.get().addDefault("MESSAGE.OUT_OF_STOCK", "§f재고 없음!"); - ccLang.get().addDefault("MESSAGE.BUY_SUCCESS", "§f{item} {amount}개를 {price}에 구매함. 잔액: {bal}"); - ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§f{item} {amount}개를 {price}에 판매함. 잔액: {bal}"); - ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_EXP", "§f{item} {amount}개를 {price}경험치 포인트에 구매함. 잔액: {bal}"); - ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_EXP", "§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.NOT_ENOUGH_EXP_POINT", "§f경험치 포인트가 부족합니다. 잔액: {bal}"); - ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§f판매 할 아이템이 없습니다."); - ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL_2", "§f판매 가능 한 아이템이 없습니다."); - ccLang.get().addDefault("MESSAGE.INVENTORY_FULL", "§4인벤토리에 빈 공간이 없습니다!"); - ccLang.get().addDefault("MESSAGE.IRREVERSIBLE", "§f이 행동은 되돌릴 수 없습니다!"); - ccLang.get().addDefault("MESSAGE.ITEM_ADDED", "아이템 추가됨!"); - ccLang.get().addDefault("MESSAGE.ITEM_UPDATED", "아이템 수정됨!"); - ccLang.get().addDefault("MESSAGE.ITEM_DELETED", "아이템 제거됨!"); - ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED", "변경사항 적용됨. 새로운 값: "); - ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED_2", "변경사항 적용됨"); - ccLang.get().addDefault("MESSAGE.RECOMMEND_APPLIED", "추천 값 적용됨. {playerNum}명 기준입니다. config파일에서 이 값을 바꿀 수 있습니다."); - ccLang.get().addDefault("MESSAGE.TRANSFER_SUCCESS", "송금 완료"); - ccLang.get().addDefault("MESSAGE.PURCHASE_REJECTED", "상점에 이 아이템이 너무 많습니다. 지금은 팔 수 없습니다."); - ccLang.get().addDefault("MESSAGE.CLICK_YOUR_ITEM_START_PAGE", "인벤토리의 아이템을 클릭하면 가장 좋은 조건의 상점으로 이동합니다.\n좌클릭: 구매 우클릭: 판매"); - ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_BUY", "{item}을 가장 저렴하게 살 수 있는 상점으로 이동했습니다."); - ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_SELL", "{item}을 가장 비싸게 팔 수 있는 상점으로 이동했습니다."); - ccLang.get().addDefault("MESSAGE.SHOP_IS_CLOSED_BY_ADMIN", "이 상점은 서버 관리자에 의해 닫혔습니다."); - 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("MESSAGE.Q_SEARCH_FAIL_CURRENCY", "해당 아이템은 여러 종류의 재화로 거래 중 입니다."); - - ccLang.get().addDefault("HELP.TITLE", "§f도움말: {command} --------------------"); - ccLang.get().addDefault("HELP.SHOP", "상점을 엽니다."); - ccLang.get().addDefault("HELP.CMD", "명령어 도움말 표시 토글."); - ccLang.get().addDefault("HELP.CREATE_SHOP", "상점을 새로 만듭니다."); - ccLang.get().addDefault("HELP.CREATE_SHOP_2", "퍼미션(나중에 바꿀 수 있습니다.)\n true: dshop.user.shop.상점이름\n false: 아무나 접근가능(기본값)\n 임의 입력: 해당 퍼미션 필요"); - ccLang.get().addDefault("HELP.DELETE_SHOP", "기존의 상점을 제거합니다."); - ccLang.get().addDefault("HELP.SHOP_ADD_HAND", "손에 들고 있는 아이템을 상점에 추가합니다."); - ccLang.get().addDefault("HELP.SHOP_ADD_ITEM", "상점에 아이템을 추가합니다."); - ccLang.get().addDefault("HELP.SHOP_EDIT", "상점에 있는 아이템을 수정합니다."); - ccLang.get().addDefault("HELP.PRICE", "§7가격은 다음과 같이 계산됩니다: median*value/stock"); - ccLang.get().addDefault("HELP.INF_STATIC", "§7median<0 == 고정가격 stock<0 == 무한재고"); - ccLang.get().addDefault("HELP.EDIT_ALL", "상점의 모든 아이템을 한번에 수정합니다."); - ccLang.get().addDefault("HELP.RELOAD", "플러그인을 재시작 합니다."); - ccLang.get().addDefault("HELP.RELOADED", "플러그인 리로드됨!"); - ccLang.get().addDefault("HELP.USAGE", "사용법"); - ccLang.get().addDefault("HELP.ITEM_ALREADY_EXIST", "§7§o{item}(은)는 이미 판매중임.\n {info}\n 명령어를 입력하면 값이 수정됩니다."); - ccLang.get().addDefault("HELP.ITEM_INFO", "§7§o{item}의 현재 설정:\n {info}"); - ccLang.get().addDefault("HELP.REMOVE_ITEM", "§f인자를 0으로 입력하면 이 아이템을 상점에서 §4제거§f합니다."); - ccLang.get().addDefault("HELP.QSELL", "§f빠르게 아이템을 판매합니다."); - ccLang.get().addDefault("HELP.DELETE_OLD_USER", "장기간 접속하지 않은 유저의 데이터를 삭제합니다."); - ccLang.get().addDefault("HELP.ACCOUNT", "상점의 계좌 잔액을 설정합니다. -1 = 무제한"); - ccLang.get().addDefault("HELP.SET_TO_REC_ALL", "§e상점의 모든 아이템 설정값을 권장값으로 §c초기화§e합니다."); - ccLang.get().addDefault("HELP.SHOP_ENABLE", "상점을 활성화 또는 비활성화 합니다."); - - ccLang.get().addDefault("ERR.NO_USER_ID", "§6플레이어 uuid를 찾을 수 없습니다. 상점 이용 불가능."); - ccLang.get().addDefault("ERR.ITEM_NOT_EXIST", "상점에 해당 아이템이 존재하지 않습니다."); - ccLang.get().addDefault("ERR.ITEM_FORBIDDEN", "사용할 수 없는 아이템 입니다."); - ccLang.get().addDefault("ERR.NO_PERMISSION", "§e권한이 없습니다."); - ccLang.get().addDefault("ERR.WRONG_USAGE", "잘못된 명령어 사용법. 도움말을 확인하세요."); - ccLang.get().addDefault("ERR.NO_EMPTY_SLOT", "상점에 빈 공간이 없습니다."); - ccLang.get().addDefault("ERR.WRONG_DATATYPE", "인자의 유형이 잘못 입력되었습니다."); - ccLang.get().addDefault("ERR.VALUE_ZERO", "인자값이 0보다 커야 합니다."); - ccLang.get().addDefault("ERR.WRONG_ITEM_NAME", "유효하지 않은 아이템 이름입니다."); - ccLang.get().addDefault("ERR.HAND_EMPTY", "아이템을 손에 들고 있어야 합니다."); - ccLang.get().addDefault("ERR.HAND_EMPTY2", "§c§o아이템을 손에 들고 있어야 합니다!"); - ccLang.get().addDefault("ERR.SHOP_NOT_FOUND", "§f해당 상점을 찾을 수 없습니다."); - ccLang.get().addDefault("ERR.SHOP_EXIST", "해당 이름을 가진 상점이 이미 존재합니다."); - ccLang.get().addDefault("ERR.SHOP_NOT_EXIST", "그런 이름을 가진 상점이 없습니다."); - ccLang.get().addDefault("ERR.SIGN_SHOP_REMOTE_ACCESS", "해당 상점은 표지판을 통해서만 접근할 수 있습니다."); - ccLang.get().addDefault("ERR.LOCAL_SHOP_REMOTE_ACCESS", "해당 상점은 직접 방문해야만 사용할 수 있습니다."); - ccLang.get().addDefault("ERR.MAX_LOWER_THAN_MIN", "최대 가격은 최소 가격보다 커야합니다."); - 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", "해당 플레이어를 찾을 수 없습니다."); - ccLang.get().addDefault("ERR.SHOP_LINK_FAIL", "상점 둘 중 하나는 실제 계좌이어야 합니다."); - ccLang.get().addDefault("ERR.SHOP_LINK_TARGET_ERR", "목표 상점은 실제 계좌를 가지고 있어야 합니다."); - ccLang.get().addDefault("ERR.NESTED_STRUCTURE", "계층 구조를 이루는것은 금지되어 있습니다. (ex. aa-bb, bb-cc)"); - ccLang.get().addDefault("ERR.CREATIVE", "§eCreative mode 에서 이 명령어를 사용할 수 없습니다. 권한이 없습니다."); - ccLang.get().addDefault("ERR.FILE_CREATE_FAIL", "§e파일 생성에 실패했습니다."); - ccLang.get().addDefault("ERR.INVALID_TRANSACTION", "이 거래는 더이상 유효하지 않습니다. 문제가 반복되면 서버 관리자에게 문의하세요."); - ccLang.get().addDefault("ERR.SIGN_WALL", "상점 표지판이 벽에 설치되야 합니다."); - - ccLang.get().addDefault("ERR.SHOP_NULL", "§e상점 이름이 지정되지 않았습니다."); - ccLang.get().addDefault("ERR.ITEMINFO_HAND_EMPTY", "아이템을 들고 있어야 합니다."); - ccLang.get().addDefault("HELP.ITEMINFO_USAGE", "§f아이템 정보를 보려면 손에 아이템을 들고 있어야 합니다."); - ccLang.get().addDefault("HELP.ITEMINFO_REALNAME", "§7실제 이름: §3{item_realname}"); - ccLang.get().addDefault("HELP.ITEMINFO_SIGN_NAME", "§7표지판용 이름: §3{item_signname}"); - ccLang.get().addDefault("ERR.SIGN_ITEM_INVALID", "아이템 이름이 잘못되었습니다. /ds iteminfo 를 사용하여 아이템 이름을 확인해 보세요."); - ccLang.get().addDefault("ERR.SIGN_ITEM_NOT_FOR_SALE", "상점에 없는 아이템 입니다."); - ccLang.get().addDefault("MESSAGE.SIGN_SHOP_CREATED", "§a표지판 상점 생성!"); - - ccLang.get().addDefault("ON", "켜짐"); - ccLang.get().addDefault("OFF", "꺼짐"); - ccLang.get().addDefault("SET", "설정"); - ccLang.get().addDefault("UNSET", "설정해제"); - ccLang.get().addDefault("NULL", "없음"); - ccLang.get().addDefault("NULL(OPEN)", "없음 (모두에게 열려있음)"); - ccLang.get().addDefault("CUR_STATE", "현재상태"); - ccLang.get().addDefault("CLICK", "클릭"); - ccLang.get().addDefault("LMB", "좌클릭"); - ccLang.get().addDefault("RMB", "우클릭"); - ccLang.get().addDefault("CLOSE", "§f닫기"); - ccLang.get().addDefault("CLOSE_LORE", "§f§n클릭: 닫기"); - - ccLang.get().addDefault("EXP_POINTS", "Exp"); - ccLang.get().addDefault("JOB_POINTS", "Job Points"); - ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); - - ccLang.get().options().copyDefaults(true); - ccLang.save(); - } + ko_KR(); // 영어 - { - ccLang.setup("Lang_V3_en-US", null); - - ccLang.get().addDefault("START_PAGE.EDITOR_TITLE", "§3Edit icon"); - ccLang.get().addDefault("START_PAGE.EDIT_NAME", "§fRename"); - ccLang.get().addDefault("START_PAGE.EDIT_LORE", "§fChange lore"); - ccLang.get().addDefault("START_PAGE.EDIT_ICON", "§fChange icon"); - ccLang.get().addDefault("START_PAGE.EDIT_ACTION", "§fChange command"); - ccLang.get().addDefault("START_PAGE.SHOP_SHORTCUT", "§fCreate shop button"); - ccLang.get().addDefault("START_PAGE.CREATE_DECO", "§fCreate decorative button"); - ccLang.get().addDefault("START_PAGE.ENTER_SHOP_NAME", "Please enter shop name"); - ccLang.get().addDefault("START_PAGE.DEFAULT_SHOP_LORE", "§f§nClick: go to shop"); - ccLang.get().addDefault("START_PAGE.ITEM_MOVE_LORE", "§eRMB: Move"); - ccLang.get().addDefault("START_PAGE.ITEM_COPY_LORE", "§eRMB: Copy"); - ccLang.get().addDefault("START_PAGE.ITEM_REMOVE_LORE", "§eShift LMB: Remove"); - ccLang.get().addDefault("START_PAGE.ITEM_EDIT_LORE", "§eShift RMB: Edit"); - ccLang.get().addDefault("START_PAGE.REMOVE", "§fRemove"); - ccLang.get().addDefault("START_PAGE.REMOVE_LORE", "§fRemove this button from the start page."); - ccLang.get().addDefault("START_PAGE.ENTER_NAME", "Enter a new name for the button."); - ccLang.get().addDefault("START_PAGE.ENTER_LORE", "Enter a new description for the button."); - ccLang.get().addDefault("START_PAGE.ENTER_ICON", "Enter the name of the item to be used as the icon for the button. (English, case insensitive)"); - ccLang.get().addDefault("START_PAGE.ENTER_ACTION", "Enter the command without '/'. This command is executed when the button is pressed."); - ccLang.get().addDefault("START_PAGE.ENTER_COLOR", "Enter a color for the decorative button. (English)"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST_TITLE", "§3Shop List"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); - ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_LORE", "§eLMB: Previous page\n§eRMB: Next page"); - - ccLang.get().addDefault("COLOR_PICKER_TITLE", "§3Color Picker"); - - ccLang.get().addDefault("SHOP.TRADE_LORE", "§f§nClick: Trade"); - ccLang.get().addDefault("SHOP.BUY_PRICE", "§fBuy: {num}"); - ccLang.get().addDefault("SHOP.SELL_PRICE", "§fSell: {num}"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED", "§fBuy: §8§m{num}§r §a{num2}"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED", "§fSell: §8§m{num}§r §c{num2}"); - ccLang.get().addDefault("SHOP.BUY_PRICE_EXP", "§fBuy: {num}Exp"); - ccLang.get().addDefault("SHOP.SELL_PRICE_EXP", "§fSell: {num}Exp"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_EXP", "§fBuy: §8§m{num}Exp§r §a{num2}Exp"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_EXP", "§fSell: §8§m{num}Exp§r §c{num2}Exp"); - ccLang.get().addDefault("SHOP.BUY_PRICE_PP", "§fBuy: {num}PP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_PP", "§fSell: {num}PP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_PP", "§fBuy: §8§m{num}PP§r §a{num2}PP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_PP", "§fSell: §8§m{num}PP§r §c{num2}PP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_JP", "§fBuy: {num}JP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_JP", "§fSell: {num}JP"); - ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_JP", "§fBuy: §8§m{num}JP§r §a{num2}JP"); - ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_JP", "§fSell: §8§m{num}JP§r §c{num2}JP"); - ccLang.get().addDefault("SHOP.STOCK", "§8Stock: {num}"); - ccLang.get().addDefault("SHOP.STOCK_2", "§8Stock: {stock}/{max_stock}"); - ccLang.get().addDefault("SHOP.INF_STOCK", "§8Infinite"); - ccLang.get().addDefault("SHOP.STATIC_PRICE", "§8[Fixed price]"); - ccLang.get().addDefault("SHOP.STACKS", "§8{num} Stacks"); - ccLang.get().addDefault("SHOP.ITEM_MOVE_LORE", "§eRMB: Move"); - ccLang.get().addDefault("SHOP.ITEM_COPY_LORE", "§eRMB: Copy"); - ccLang.get().addDefault("SHOP.ITEM_EDIT_LORE", "§eShiftRMB: Edit"); - ccLang.get().addDefault("SHOP.DECO_DELETE_LORE", "§eShiftRMB: Remove"); - ccLang.get().addDefault("SHOP.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); - ccLang.get().addDefault("SHOP.PAGE_LORE_V2", "§f§nLMB: Previous page\n§f§nRMB: Next page\n§7Clicking on your item will\n§7take you to the page where\n§7that item is located."); - ccLang.get().addDefault("SHOP.GO_TO_PAGE_EDITOR", "§eShift RMB: Page Editor"); - ccLang.get().addDefault("SHOP.ITEM_MOVE_SELECTED", "Item selected. Right-click on an empty field to move it."); - ccLang.get().addDefault("SHOP.PERMISSION", "§fPermission:"); - ccLang.get().addDefault("SHOP.PERMISSION_ITEM", "§7 - {permission}"); - ccLang.get().addDefault("SHOP.FLAGS", "§eFlag:"); - ccLang.get().addDefault("SHOP.FLAGS_ITEM", "§e - {flag}"); - ccLang.get().addDefault("SHOP.SHOP_BAL_INF", "§fUnlimited"); - ccLang.get().addDefault("SHOP.SHOP_BAL", "§fShop account balance"); - ccLang.get().addDefault("SHOP.SHOP_LOCATION", "§fShop location: x {x}, y {y}, z {z}"); - ccLang.get().addDefault("SHOP.SHOP_LOCATION_B", "§fShop location: "); - ccLang.get().addDefault("SHOP.SHOP_INFO_DASH", "§7 - "); - ccLang.get().addDefault("SHOP.DISABLED", "§cDisabled§8|§f"); - ccLang.get().addDefault("SHOP.INCOMPLETE_DATA", "INCOMPLETE DATA"); - ccLang.get().addDefault("SHOP.INCOMPLETE_DATA_Lore", "This item is not visible\nto non-op users.\nIndex: "); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_BUY", "§aPurchase limit: {num}left"); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_SELL", "§aSales limit: {num}left"); - ccLang.get().addDefault("SHOP.TRADE_LIMIT_TIMER", "§aNext reset: {time}"); - ccLang.get().addDefault("SHOP.CLICK_TO_ADD", "§eClick: Add"); - - ccLang.get().addDefault("SHOP_SETTING_TITLE", "§3Shop Settings"); - ccLang.get().addDefault("SHOP_SETTING.LOG_TOGGLE_LORE", "§eRMB: Log Viewer"); - ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_CONSOLE", "§fPrint log to console"); - ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_ADMIN", "§fPrint log to admin"); - ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE", "§fMax page"); - ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE_LORE", "§fSets the maximum page for the shop."); - ccLang.get().addDefault("SHOP_SETTING.BACKGROUND", "§fBackground color"); - ccLang.get().addDefault("SHOP_SETTING.BACKGROUND_LORE", "§eClick: Change color"); - ccLang.get().addDefault("SHOP_SETTING.L_R_SHIFT", "§eLMB: -1 RMB: +1 Shift: x5"); - ccLang.get().addDefault("SHOP_SETTING.FLAG", "§fFlag"); - ccLang.get().addDefault("SHOP_SETTING.SHOP_SETTINGS_LORE", "§eRMB: Shop Settings"); - ccLang.get().addDefault("SHOP_SETTING.SIGN_SHOP_LORE", "§fOnly accessible via sign."); - 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.SELECTED", "§2Selected"); - ccLang.get().addDefault("SHOP_SETTING.CURRENCY", "§fCurrency Type: "); - ccLang.get().addDefault("SHOP_SETTING.VAULT_LORE", "§fThis is the default."); - ccLang.get().addDefault("SHOP_SETTING.EXP_LORE", "§fTrade with the player's experience points."); - 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."); - ccLang.get().addDefault("SHOP_SETTING.HIDE_SHOP_BALANCE", "§fHide shop account balance."); - ccLang.get().addDefault("SHOP_SETTING.SHOW_MAX_STOCK", "§fShow max stock."); - ccLang.get().addDefault("SHOP_SETTING.HIDDEN_IN_COMMAND", "§fDon't show this store\n§fin command autocomplete."); - ccLang.get().addDefault("SHOP_SETTING.INTEGER_ONLY", "§fThe purchase price will be rounded up.\n§fThe sale price will be rounded down."); - ccLang.get().addDefault("SHOP_SETTING.PERMISSION", "§fPermission"); - ccLang.get().addDefault("SHOP_SETTING.STATE", "§fState"); - ccLang.get().addDefault("SHOP_SETTING.STATE_ENABLE", "§aEnable"); - ccLang.get().addDefault("SHOP_SETTING.STATE_DISABLE", "§cDisable"); - ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR", "§fRotation: "); - ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR_LORE", "§eClick: Rotation editor"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE", "§fCommand"); - ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE_LORE", "§fExecutes server commands\n§fwhen a store transaction occurs."); - 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_LORE3", "§eShift RMB: Delete last item"); - ccLang.get().addDefault("SHOP_SETTING.TRADE_UI", "§fEdit Trade UI"); - ccLang.get().addDefault("SHOP_SETTING.TRADE_UI_LORE_2", "§eLMB: Edit\n§eRMB: Reset"); - - ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3Rotation Editor"); - ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§aEnabled"); - ccLang.get().addDefault("ROTATION_EDITOR.DISABLED", "§cDisabled"); - ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_ENABLE", "§eLMB: Enable"); - ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_DISABLE", "§eLMB: Disable"); - ccLang.get().addDefault("ROTATION_EDITOR.CURRENT_TIME", "§fCurrent time: "); - ccLang.get().addDefault("ROTATION_EDITOR.CURRENTLY_IN_USE", "§a[Currently in use]"); - ccLang.get().addDefault("ROTATION_EDITOR.NEXT_ROTATION", "§fNext rotation: "); - ccLang.get().addDefault("ROTATION_EDITOR.PERIOD", "§fPeriod"); - ccLang.get().addDefault("ROTATION_EDITOR.PERIOD_LORE_V2", "§eLMB: -1h, RMB: +1h, Shift: x10"); - ccLang.get().addDefault("ROTATION_EDITOR.TIMER", "§fTimer adjustment"); - ccLang.get().addDefault("ROTATION_EDITOR.TIMER_LORE_V2", "§eLMB: -10m, RMB: +10m, Shift: x6"); - ccLang.get().addDefault("ROTATION_EDITOR.HOUR", "§f{0}hours"); - ccLang.get().addDefault("ROTATION_EDITOR.UNSAVED_CHANGES", "§c§oUnsaved changes"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES", "§fApply changes"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES_LORE", "§eLMB: Save changes\n§eRMB: Reset Changes"); - ccLang.get().addDefault("ROTATION_EDITOR.APPLY_ROTATION", "§eLMB: Apply now"); - ccLang.get().addDefault("ROTATION_EDITOR.OPEN", "§eLMB: Open"); - ccLang.get().addDefault("ROTATION_EDITOR.CREATE", "§eLMB: Create empty"); - ccLang.get().addDefault("ROTATION_EDITOR.COPY_AS_NEW", "§eRMB: Copy as new"); - ccLang.get().addDefault("ROTATION_EDITOR.DELETE", "§eShift RMB: §cDelete"); - ccLang.get().addDefault("ROTATION_EDITOR.REAPPLY", "§eShift LMB: Reapply"); - ccLang.get().addDefault("ROTATION_EDITOR.MOVE", "§eRMB: Move"); - - ccLang.get().addDefault("ITEM_SETTING_TITLE", "§3Item Settings"); - ccLang.get().addDefault("ITEM_SETTING.VALUE_BUY", "§fPurchase value: "); - ccLang.get().addDefault("ITEM_SETTING.VALUE_SELL", "§fSales value: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE", "§fBuy: "); - ccLang.get().addDefault("ITEM_SETTING.SELL_PRICE", "§fSell: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE_MIN", "§fMinimum price: "); - ccLang.get().addDefault("ITEM_SETTING.PRICE_MAX", "§fMaximum price: "); - ccLang.get().addDefault("ITEM_SETTING.MEDIAN", "§fMedian: "); - ccLang.get().addDefault("ITEM_SETTING.STOCK", "§fStock: "); - ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK", "§fMax stock: "); - ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK_LORE", "§fIf the stock exceeds this,\n§fthe shop will refuse to purchase."); - ccLang.get().addDefault("ITEM_SETTING.INF_STOCK", "Infinite stock"); - ccLang.get().addDefault("ITEM_SETTING.STATIC_PRICE", "Fixed price"); - ccLang.get().addDefault("ITEM_SETTING.UNLIMITED", "Unlimited"); - ccLang.get().addDefault("ITEM_SETTING.MEDIAN_HELP", "§fThe smaller the median,\n§fthe steeper the price change."); - ccLang.get().addDefault("ITEM_SETTING.TAX_IGNORED", "Sales tax settings are ignored."); - ccLang.get().addDefault("ITEM_SETTING.RECOMMEND", "§fApply recommended values"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT", "§fDiscount"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE", "§fDiscount rate: {num}%\n§eLMB: +10, RMB: -10"); - ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE_2", "§fDiscount rate: {num}%\n§eLMB: -10, RMB: +10"); - ccLang.get().addDefault("ITEM_SETTING.DONE", "§fDone"); - ccLang.get().addDefault("ITEM_SETTING.DONE_LORE", "§fDone!"); - ccLang.get().addDefault("ITEM_SETTING.ROUND_DOWN", "§fRound down"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_MEDIAN", "§fSet to median"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_STOCK", "§fSet to stock"); - ccLang.get().addDefault("ITEM_SETTING.SET_TO_VALUE", "§fSet to value"); - ccLang.get().addDefault("ITEM_SETTING.CLOSE", "§fClose"); - ccLang.get().addDefault("ITEM_SETTING.CLOSE_LORE", "§f§nClick: Close"); - ccLang.get().addDefault("ITEM_SETTING.REMOVE", "§cRemove"); - ccLang.get().addDefault("ITEM_SETTING.REMOVE_LORE", "§fRemove this item from the shop."); - ccLang.get().addDefault("ITEM_SETTING.BUY", "§3§lBuy: {num}"); - ccLang.get().addDefault("ITEM_SETTING.SELL", "§3§lSell: {num}"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL", "§fSales limit per player"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY", "§fPurchase limit per player"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL", "§fTrading volume limit reset cycle"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL_LORE", "§fInterval: {interval}\n§fNext reset: {time}\n§eLMB: -1h, RMB: +1h, Shift = x12"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER", "§fAdjust Timer"); - ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER_LORE", "§f{num}\n§fNext reset: {time}\n§eLMB: -1h, RMB: +1h, Shift = x12"); - - ccLang.get().addDefault("TRADE_TITLE", "§3Trade"); - ccLang.get().addDefault("TRADE.TOGGLE_SELLABLE", "§eClick: Sale only toggle"); - ccLang.get().addDefault("TRADE.TOGGLE_BUYABLE", "§eClick: Purchase Only Toggle"); - ccLang.get().addDefault("TRADE.BUY_ONLY_LORE", "§fThis item cannot be sold."); - ccLang.get().addDefault("TRADE.SELL_ONLY_LORE", "§fThis item cannot be purchased."); - ccLang.get().addDefault("TRADE.BALANCE", "§3My balance"); - ccLang.get().addDefault("TRADE.PRICE", "§fBuy: {num}"); - ccLang.get().addDefault("TRADE.SELL_PRICE", "§fSell: {num}"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED", "§fBuy: §8§m{num}§r §a{num2}"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED", "§fSell: §8§m{num}§r §c{num2}"); - ccLang.get().addDefault("TRADE.PRICE_EXP", "§fBuy: {num}EXP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_EXP", "§fSell: {num}EXP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_EXP", "§fBuy: §8§m{num}EXP§r §a{num2}EXP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_EXP", "§fSell: §8§m{num}EXP§r §c{num2}EXP"); - ccLang.get().addDefault("TRADE.PRICE_PP", "§fBuy: {num}PP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_PP", "§fSell: {num}PP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_PP", "§fBuy: §8§m{num}PP§r §a{num2}PP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_PP", "§fSell: §8§m{num}PP§r §c{num2}PP"); - ccLang.get().addDefault("TRADE.PRICE_JP", "§fBuy: {num}JP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_JP", "§fSell: {num}JP"); - ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_JP", "§fBuy: §8§m{num}JP§r §a{num2}JP"); - ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_JP", "§fSell: §8§m{num}JP§r §c{num2}JP"); - ccLang.get().addDefault("TRADE.BUY", "§cBuy"); - ccLang.get().addDefault("TRADE.SELL", "§2Sell"); - ccLang.get().addDefault("TRADE.STOCK", "§8Stock: "); - ccLang.get().addDefault("TRADE.STACKS", "§8{num} Stacks"); - ccLang.get().addDefault("TRADE.INF_STOCK", "§8Infinite"); - ccLang.get().addDefault("TRADE.SHOP_BAL_INF", "§fUnlimited"); - ccLang.get().addDefault("TRADE.SHOP_BAL", "§3Shop account balance \n§f{num}"); - ccLang.get().addDefault("TRADE.CLICK_TO_BUY", "§c§nClick: Buy {amount}"); - ccLang.get().addDefault("TRADE.CLICK_TO_SELL", "§2§nClick: Sell {amount}"); - ccLang.get().addDefault("TRADE.PURCHASE_LIMIT_PER_PLAYER", "§aPurchase limit: {num}left\n§aNext reset: {time}"); - ccLang.get().addDefault("TRADE.SALES_LIMIT_PER_PLAYER", "§aSales limit: {num}left\n§aNext reset: {time}"); - ccLang.get().addDefault("TRADE.QUANTITY_LORE", "§eShift RMB: Edit Quantity"); - ccLang.get().addDefault("TRADE.WAIT_FOR_INPUT", "Enter the quantity that will be displayed in the Trade UI.\nExample: 1,2,4,8,16,32,64"); - - ccLang.get().addDefault("PAGE_EDITOR_TITLE", "§3Page Editor"); - ccLang.get().addDefault("PAGE_EDITOR.PREV", "§f<<"); - ccLang.get().addDefault("PAGE_EDITOR.NEXT", "§f>>"); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SUCCESS", "§fThe page has been replaced."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_FAIL", "§fPage replacement failed."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SELECTED", "§fPage has been selected. Right-click on the other pages to be replaced."); - ccLang.get().addDefault("PAGE_EDITOR.PAGE_LORE_PREMIUM", "§eLMB: Open page\n§eRMB: Swap\n§eShift LMB: Insert\n§eShift RMB: Delete"); - ccLang.get().addDefault("PAGE_EDITOR.PRICE", "§fBuy: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.SELL_PRICE", "§fSell: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.STOCK", "§8Stock: {num}"); - ccLang.get().addDefault("PAGE_EDITOR.STACKS", "§8{num} Stakcs"); - ccLang.get().addDefault("PAGE_EDITOR.STATIC_PRICE", "§8[Fixed price]"); - ccLang.get().addDefault("PAGE_EDITOR.EMPTY", "§8(empty)"); - ccLang.get().addDefault("PAGE_EDITOR.EMPTY_SLOT_LORE", "§eLMB,RMB: Push\n§e+Shift: Pull"); - - ccLang.get().addDefault("LOG_VIEWER_TITLE", "§3Log Viewer"); - ccLang.get().addDefault("LOG_VIEWER.DATE", "§fDate: "); - ccLang.get().addDefault("LOG_VIEWER.TIME", "§fTime: "); - ccLang.get().addDefault("LOG_VIEWER.CURRENCY", "§fCurrency: "); - ccLang.get().addDefault("LOG_VIEWER.PRICE", "§fPrice: "); - ccLang.get().addDefault("LOG_VIEWER.EXPAND", "§fExpand"); - ccLang.get().addDefault("LOG_VIEWER.COLLAPSE", "§fCollapse"); - ccLang.get().addDefault("LOG_VIEWER.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); - ccLang.get().addDefault("LOG_VIEWER.PAGE_LORE", "§eLMB: Prev\n§eRMB: Next"); - ccLang.get().addDefault("LOG_VIEWER.FILE_LORE", "§eLMB: Open\n§eShift RMB: §cDelete"); - - ccLang.get().addDefault("LOG.LOG", "§fLog"); - ccLang.get().addDefault("LOG.CLEAR", "§fLog deleted"); - ccLang.get().addDefault("LOG.SAVE", "§fLog saved"); - ccLang.get().addDefault("LOG.DELETE", "§4Delete log"); - ccLang.get().addDefault("LOG.SELL", "§f{player} sells {amount} {item} to {shop}"); - ccLang.get().addDefault("LOG.BUY", "§f{player} buys {amount} {item} from {shop}"); - - ccLang.get().addDefault("STOCK_SIMULATOR_TITLE", "§3Stock Simulator"); - ccLang.get().addDefault("STOCK_SIMULATOR.CHANGE_SAMPLE_LORE", "§eLMB, RMB: Change Item"); - ccLang.get().addDefault("STOCK_SIMULATOR.SIMULATOR_BUTTON_LORE", "§eRMB: Simulator"); - ccLang.get().addDefault("STOCK_SIMULATOR.RUN_TITLE", "§fRun"); - ccLang.get().addDefault("STOCK_SIMULATOR.RUN_LORE", "§eLMB: Run simulation\n§eRMB: Apply the settings to the shop\n§fItems are not affected."); - ccLang.get().addDefault("STOCK_SIMULATOR.REAL_TIME", "§a(real time)"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_S", "§aAfter {0} seconds"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_M", "§aAfter {0} minutes"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_H", "§aAfter {0} hours"); - ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_D", "§aAfter {0} days"); - ccLang.get().addDefault("STOCK_SIMULATOR.L_R_SHIFT", "§eLMB: -1 RMB: +1 Shift: x5"); - ccLang.get().addDefault("STOCK_SIMULATOR.PRICE", "§fPurchase price: {num}"); - ccLang.get().addDefault("STOCK_SIMULATOR.MEDIAN", "§fMedian: {num}"); - ccLang.get().addDefault("STOCK_SIMULATOR.STOCK", "§fStock: {num}"); - - ccLang.get().addDefault("PALETTE_TITLE", "§3Select item to sell"); - ccLang.get().addDefault("PALETTE_TITLE2", "§3Select item"); - ccLang.get().addDefault("PALETTE.LORE_PREMIUM", "§eLMB: Add\n§eShift LMB: Add after setting\n§eRMB: Add as decoration\n§eShift RMB: Search '{item}'"); - ccLang.get().addDefault("PALETTE.LORE2", "§eLMB: Select\n§eShift RMB: Search '{item}'"); - ccLang.get().addDefault("PALETTE.SEARCH", "§fSearch"); - ccLang.get().addDefault("PALETTE.ADD_ALL", "§fAdd all"); - ccLang.get().addDefault("PALETTE.ADD_ALL_LORE", "§eLMB: Add all\n§eShift LMB: Add all and apply recommended values"); - ccLang.get().addDefault("PALETTE.PAGE_TITLE", "§f{curPage}/{maxPage} page"); - ccLang.get().addDefault("PALETTE.PAGE_LORE", "§f§nLMB: Prev\n§f§nRMB: Next"); - ccLang.get().addDefault("PALETTE.FILTER_APPLIED", "§fFilter Applied : "); - ccLang.get().addDefault("PALETTE.FILTER_LORE", "§eLMB: Search\n§eRMB: Clear filter\n\n§7Example for finding \"BLUE_WOOL\":\n§7 b w\n§7 wool\n§7 blue wool"); - - ccLang.get().addDefault("QUICK_SELL_TITLE", "§3Quick Sell"); - ccLang.get().addDefault("QUICK_SELL.GUIDE_TITLE", "§3§lQuick Sell Guide"); - ccLang.get().addDefault("QUICK_SELL.GUIDE_LORE", "§aLeft-click the item you want to sell.\n§aShift left click to sell all items of the same type.\n§aRight-click to go to the item shop."); - - ccLang.get().addDefault("ARROW.UP", "§a⬆"); - ccLang.get().addDefault("ARROW.DOWN", "§c⬇"); - ccLang.get().addDefault("ARROW.UP_2", "§c⬆"); - ccLang.get().addDefault("ARROW.DOWN_2", "§a⬇"); - - ccLang.get().addDefault("TIME.OPEN", "Open"); - ccLang.get().addDefault("TIME.CLOSE", "Close"); - ccLang.get().addDefault("TIME.OPEN_LORE", "§fSet opening time"); - ccLang.get().addDefault("TIME.CLOSE_LORE", "§fSet closing time"); - ccLang.get().addDefault("TIME.SHOPHOURS", "§fOpening hours"); - ccLang.get().addDefault("TIME.OPEN24", "Open 24 hours"); - ccLang.get().addDefault("TIME.SHOP_IS_CLOSED", "§fThe shop is closed. It opens at {time} o'clock. {curTime} o'clock now."); - ccLang.get().addDefault("TIME.SET_SHOPHOURS", "Set business hours"); - ccLang.get().addDefault("TIME.CUR", "§fCurrent time: {time}h"); - - ccLang.get().addDefault("STOCK_STABILIZING.SS", "§fStock stabilization"); - ccLang.get().addDefault("STOCK_STABILIZING.L_R_SHIFT", "§eLMB: -0.1 RMB: +0.1 Shift: x5"); - ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_A", "§fn% of median"); - ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_B", "§fn% of the gap with median"); - - ccLang.get().addDefault("FLUCTUATION.FLUCTUATION", "§fStock fluctuation"); - ccLang.get().addDefault("FLUCTUATION.INTERVAL", "§fInterval"); - ccLang.get().addDefault("FLUCTUATION.INTERVAL_LORE", "§f1h = 1000ticks = real time 50s"); - ccLang.get().addDefault("FLUCTUATION.STRENGTH", "§fStrength"); - ccLang.get().addDefault("FLUCTUATION.STRENGTH_LORE", "§fn% of median"); - - ccLang.get().addDefault("TAX.SALES_TAX", "§fSales tax"); - ccLang.get().addDefault("TAX.USE_GLOBAL", "Use global settings ({tax}%)"); - ccLang.get().addDefault("TAX.USE_LOCAL", "Set separately"); - - ccLang.get().addDefault("MESSAGE.SEARCH_ITEM", "§fEnter the name of the item you are looking for."); - ccLang.get().addDefault("MESSAGE.SEARCH_CANCELED", "§fSearch Canceled."); - ccLang.get().addDefault("MESSAGE.INPUT_CANCELED", "§fInput canceled."); - ccLang.get().addDefault("MESSAGE.DELETE_CONFIRM", "§fAre you sure you want to delete the page? Enter 'delete' to delete."); - ccLang.get().addDefault("MESSAGE.CANT_DELETE_LAST_PAGE", "§fThe last remaining page cannot be deleted."); - ccLang.get().addDefault("MESSAGE.SHOP_BAL_LOW", "§fThe shop doesn't have enough money."); - ccLang.get().addDefault("MESSAGE.SHOP_CREATED", "§fShop created!"); - ccLang.get().addDefault("MESSAGE.SHOP_DELETED", "§fShop deleted!"); - ccLang.get().addDefault("MESSAGE.OUT_OF_STOCK", "§fOut of stock!"); - ccLang.get().addDefault("MESSAGE.BUY_SUCCESS", "§fBought {item} x{amount} for {price}. Balance: {bal}"); - ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§fSold {item} x{amount} for {price}. Balance: {bal}"); - ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_EXP", "§fBought {item} x{amount} for {price}Exp Points. Balance: {bal}"); - ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_EXP", "§fSold {item} x{amount} for {price}Exp Points. 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.NOT_ENOUGH_EXP_POINT", "§fNot enough Exp points. balance: {bal}"); - ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§fThere are no items for sale."); - ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL_2", "§fThere are no items available 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!"); - ccLang.get().addDefault("MESSAGE.ITEM_ADDED", "Item added!"); - ccLang.get().addDefault("MESSAGE.ITEM_UPDATED", "Item updated!"); - ccLang.get().addDefault("MESSAGE.ITEM_DELETED", "Item deleted!"); - ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED", "Changes applied. New values:"); - ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED_2", "Changes applied"); - ccLang.get().addDefault("MESSAGE.RECOMMEND_APPLIED", "Recommended value applied. It is based on {playerNum}players. You can change this value in the config file."); - ccLang.get().addDefault("MESSAGE.TRANSFER_SUCCESS", "Remittance completed"); - ccLang.get().addDefault("MESSAGE.PURCHASE_REJECTED", "There are too many of these items in the shop. Can't sell it now."); - ccLang.get().addDefault("MESSAGE.CLICK_YOUR_ITEM_START_PAGE", "Click on an item in your inventory to find the shop with the best deal.\nLMB: Buy RMB: Sell"); - ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_BUY", "Moved to the shop where you can buy {item} at the lowest price."); - ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_SELL", "Moved to the shop where you can sell {item} at the highest price."); - ccLang.get().addDefault("MESSAGE.SHOP_IS_CLOSED_BY_ADMIN", "This shop is currently closed by the server administrator."); - 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("MESSAGE.Q_SEARCH_FAIL_CURRENCY", "This item is being traded in several currencies."); - - ccLang.get().addDefault("HELP.TITLE", "§fHelp: {command} --------------------"); - ccLang.get().addDefault("HELP.SHOP", "Open shop"); - ccLang.get().addDefault("HELP.CMD", "Toggle display of command help."); - ccLang.get().addDefault("HELP.CREATE_SHOP", "Create a new shop."); - ccLang.get().addDefault("HELP.CREATE_SHOP_2", "Permissions (can be changed later)\n true: dshop.user.shop.shopName\n false: Anyone can access (default)\n Arbitrary value: Requires permission"); - ccLang.get().addDefault("HELP.DELETE_SHOP", "Remove existing stores."); - ccLang.get().addDefault("HELP.SHOP_ADD_HAND", "Adds the item in hand to the shop."); - ccLang.get().addDefault("HELP.SHOP_ADD_ITEM", "Add item to the shop."); - ccLang.get().addDefault("HELP.SHOP_EDIT", "Edit item in the store."); - ccLang.get().addDefault("HELP.PRICE", "§7Price calculation formula: median*value/stock"); - ccLang.get().addDefault("HELP.INF_STATIC", "§7median<0 == Fixed price stock<0 == Infinite stock"); - ccLang.get().addDefault("HELP.EDIT_ALL", "Modify all items in the shop at once."); - ccLang.get().addDefault("HELP.RELOAD", "Reload the plugin."); - ccLang.get().addDefault("HELP.RELOADED", "Plugin reloaded"); - ccLang.get().addDefault("HELP.USAGE", "Usage"); - ccLang.get().addDefault("HELP.ITEM_ALREADY_EXIST", "§7§o{item} is already on sale.\n {info}\n Entering a command modifies the value."); - ccLang.get().addDefault("HELP.ITEM_INFO", "§7§o{item}'s current settings:\n {info}"); - ccLang.get().addDefault("HELP.REMOVE_ITEM", "§fEntering an argument of 0 will §4remove§f this item from the store."); - ccLang.get().addDefault("HELP.QSELL", "§fSell items quickly."); - ccLang.get().addDefault("HELP.DELETE_OLD_USER", "Delete long-term inactive user data"); - ccLang.get().addDefault("HELP.ACCOUNT", "Sets the account balance of the shop. -1 = unlimited"); - ccLang.get().addDefault("HELP.SET_TO_REC_ALL", "§cResets§e all item settings in the store to the recommended values."); - ccLang.get().addDefault("HELP.SHOP_ENABLE", "Enables or disables the shop."); - - ccLang.get().addDefault("ERR.NO_USER_ID", "§6Player uuid not found. Shop unavailable."); - ccLang.get().addDefault("ERR.ITEM_NOT_EXIST", "The item does not exist in the store."); - ccLang.get().addDefault("ERR.ITEM_FORBIDDEN", "This is a prohibited item."); - ccLang.get().addDefault("ERR.NO_PERMISSION", "§eYou do not have permission."); - ccLang.get().addDefault("ERR.WRONG_USAGE", "Incorrect command usage."); - ccLang.get().addDefault("ERR.NO_EMPTY_SLOT", "There is no empty space in the shop."); - ccLang.get().addDefault("ERR.WRONG_DATATYPE", "Invalid argument type"); - ccLang.get().addDefault("ERR.VALUE_ZERO", "The argument value must be greater than 0."); - ccLang.get().addDefault("ERR.WRONG_ITEM_NAME", "Invalid item name."); - ccLang.get().addDefault("ERR.HAND_EMPTY", "You must hold the item in your hand."); - ccLang.get().addDefault("ERR.HAND_EMPTY2", "§c§oYou must have the item in your hand!"); - ccLang.get().addDefault("ERR.SHOP_NOT_FOUND", "§fThe shop could not be found."); - ccLang.get().addDefault("ERR.SHOP_EXIST", "A store with that name already exists."); - ccLang.get().addDefault("ERR.SHOP_NOT_EXIST", "No shop with that name."); - ccLang.get().addDefault("ERR.SIGN_SHOP_REMOTE_ACCESS", "The shop is only accessible via sign."); - ccLang.get().addDefault("ERR.LOCAL_SHOP_REMOTE_ACCESS", "The shop can only be used by visiting it in person."); - ccLang.get().addDefault("ERR.MAX_LOWER_THAN_MIN", "The maximum price must be greater than the minimum price."); - 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."); - ccLang.get().addDefault("ERR.SHOP_LINK_FAIL", "Either store must be a real account."); - ccLang.get().addDefault("ERR.SHOP_LINK_TARGET_ERR", "The target store must have a real account."); - ccLang.get().addDefault("ERR.NESTED_STRUCTURE", "It is forbidden to build hierarchies. (ex. aa-bb, bb-cc)"); - ccLang.get().addDefault("ERR.CREATIVE", "§eYou cannot use this command in Creative mode. You do not have permission."); - ccLang.get().addDefault("ERR.FILE_CREATE_FAIL", "§eFile creation failed"); - ccLang.get().addDefault("ERR.INVALID_TRANSACTION", "This transaction is no longer valid. If this problem recurs, contact your server administrator"); - ccLang.get().addDefault("ERR.SIGN_WALL", "Sign must be placed on wall."); - - ccLang.get().addDefault("ERR.SHOP_NULL", "§eShop name cannot be null."); - ccLang.get().addDefault("ERR.ITEMINFO_HAND_EMPTY", "You need to hold an item."); - ccLang.get().addDefault("HELP.ITEMINFO_USAGE", "§fHold an item in your hand to learn about it."); - ccLang.get().addDefault("HELP.ITEMINFO_REALNAME", "§7Real name: §3{item_realname}"); - ccLang.get().addDefault("HELP.ITEMINFO_SIGN_NAME", "§7Sign name: §3{item_signname}"); - ccLang.get().addDefault("ERR.SIGN_ITEM_INVALID", "Invalid item. Use /ds iteminfo to find the name of the item on the sign."); - ccLang.get().addDefault("ERR.SIGN_ITEM_NOT_FOR_SALE", "First you must add the item in the shop and then use it on the sign."); - ccLang.get().addDefault("MESSAGE.SIGN_SHOP_CREATED", "§aSign Shop created!"); - - ccLang.get().addDefault("ON", "ON"); - ccLang.get().addDefault("OFF", "OFF"); - ccLang.get().addDefault("SET", "SET"); - ccLang.get().addDefault("UNSET", "UNSET"); - ccLang.get().addDefault("NULL", "Null"); - ccLang.get().addDefault("NULL(OPEN)", "None (open to all)"); - ccLang.get().addDefault("CUR_STATE", "Current Status"); - ccLang.get().addDefault("CLICK", "Click"); - ccLang.get().addDefault("LMB", "LMB"); - ccLang.get().addDefault("RMB", "RMB"); - ccLang.get().addDefault("CLOSE", "§fClose"); - ccLang.get().addDefault("CLOSE_LORE", "§f§nClick: Close"); - - ccLang.get().addDefault("EXP_POINTS", "Exp Points"); - ccLang.get().addDefault("JOB_POINTS", "Job Points"); - ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); - - ccLang.get().options().copyDefaults(true); - ccLang.save(); - } + en_US(); + + // 繁體中文 + zh_TW(); if (lang == null) lang = "en-US"; - if (!lang.equals("en-US") && !lang.equals("ko-KR")) + if (!lang.equals("en-US") && !lang.equals("ko-KR") && !lang.equalsIgnoreCase("zh-TW")) { ConfigurationSection conf = ccLang.get().getConfigurationSection(""); @@ -951,6 +63,1350 @@ public static void setupLangFile(String lang) ReloadNumberFormat(); } + private static void ko_KR() + { + ccLang.setup("Lang_V3_ko-KR", null); + + ccLang.get().addDefault("START_PAGE.EDITOR_TITLE", "§3아이콘 편집"); + ccLang.get().addDefault("START_PAGE.EDIT_NAME", "§f이름 바꾸기"); + ccLang.get().addDefault("START_PAGE.EDIT_LORE", "§f설명 바꾸기"); + ccLang.get().addDefault("START_PAGE.EDIT_ICON", "§f아이콘 바꾸기"); + ccLang.get().addDefault("START_PAGE.EDIT_ACTION", "§f실행 명령어 바꾸기"); + ccLang.get().addDefault("START_PAGE.SHOP_SHORTCUT", "§f상점으로 가는 버튼 만들기"); + ccLang.get().addDefault("START_PAGE.CREATE_DECO", "§f장식 버튼 만들기"); + ccLang.get().addDefault("START_PAGE.ENTER_SHOP_NAME", "상점 이름을 입력하세요."); + ccLang.get().addDefault("START_PAGE.DEFAULT_SHOP_LORE", "§f§n클릭: 상점으로 가기"); + ccLang.get().addDefault("START_PAGE.ITEM_MOVE_LORE", "§e우클릭: 이동"); + ccLang.get().addDefault("START_PAGE.ITEM_COPY_LORE", "§e우클릭: 복사"); + ccLang.get().addDefault("START_PAGE.ITEM_REMOVE_LORE", "§eShift 좌클릭: 삭제"); + ccLang.get().addDefault("START_PAGE.ITEM_EDIT_LORE", "§eShift우클릭: 편집"); + ccLang.get().addDefault("START_PAGE.REMOVE", "§f제거"); + ccLang.get().addDefault("START_PAGE.REMOVE_LORE", "§f이 버튼을 시작페이지에서 제거합니다."); + ccLang.get().addDefault("START_PAGE.ENTER_NAME", "버튼의 새 이름을 입력하세요."); + ccLang.get().addDefault("START_PAGE.ENTER_LORE", "버튼의 새 설명을 입력하세요."); + ccLang.get().addDefault("START_PAGE.ENTER_ICON", "버튼의 아이콘으로 사용할 아이탬 이름을 입력하세요. (영문. 대소문자 구분없음)"); + ccLang.get().addDefault("START_PAGE.ENTER_ACTION", "명령어를 '/' 제외하고 입력하세요. 버튼을 눌렀을때 이 명령어가 실행됩니다."); + ccLang.get().addDefault("START_PAGE.ENTER_COLOR", "장식 버튼의 색상을 입력하세요. (영문)"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST_TITLE", "§3상점 목록"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_LORE", "§e좌클릭: 이전 페이지\n§e우클릭: 다음 페이지"); + + ccLang.get().addDefault("COLOR_PICKER_TITLE", "§3색상 선택"); + + ccLang.get().addDefault("SHOP.TRADE_LORE", "§f§n클릭: 거래"); + ccLang.get().addDefault("SHOP.BUY_PRICE", "§f구매: {num}"); + ccLang.get().addDefault("SHOP.SELL_PRICE", "§f판매: {num}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED", "§f구매: §8§m{num}§r §a{num2}"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED", "§f판매: §8§m{num}§r §c{num2}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_PP", "§f구매: {num}PP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_PP", "§f판매: {num}PP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_EXP", "§f구매: {num}Exp"); + ccLang.get().addDefault("SHOP.SELL_PRICE_EXP", "§f판매: {num}Exp"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_EXP", "§f구매: §8§m{num}Exp§r §a{num2}Exp"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_EXP", "§f판매: §8§m{num}Exp§r §c{num2}Exp"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_PP", "§f구매: §8§m{num}PP§r §a{num2}PP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_PP", "§f판매: §8§m{num}PP§r §c{num2}PP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_JP", "§f구매: {num}JP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_JP", "§f판매: {num}JP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_JP", "§f구매: §8§m{num}JP§r §a{num2}JP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_JP", "§f판매: §8§m{num}JP§r §c{num2}JP"); + ccLang.get().addDefault("SHOP.STOCK", "§8재고: {num}"); + ccLang.get().addDefault("SHOP.STOCK_2", "§8재고: {stock}/{max_stock}"); + ccLang.get().addDefault("SHOP.INF_STOCK", "§8무한"); + ccLang.get().addDefault("SHOP.STATIC_PRICE", "§8[고정 가격]"); + ccLang.get().addDefault("SHOP.STACKS", "§8{num} 스택"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_LORE", "§e우클릭: 이동"); + ccLang.get().addDefault("SHOP.ITEM_COPY_LORE", "§e우클릭: 복사"); + ccLang.get().addDefault("SHOP.ITEM_EDIT_LORE", "§eShift우클릭: 편집"); + ccLang.get().addDefault("SHOP.DECO_DELETE_LORE", "§eShift우클릭: 삭제"); + ccLang.get().addDefault("SHOP.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); + ccLang.get().addDefault("SHOP.PAGE_LORE_V2", "§f§n좌클릭: 이전 페이지\n§f§n우클릭: 다음 페이지\n§7인벤토리에서 아이템을 클릭하면 \n§7그 아이템이 있는 페이지로 이동합니다."); + ccLang.get().addDefault("SHOP.GO_TO_PAGE_EDITOR", "§eShift+우: 페이지 에디터"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_SELECTED", "아이탬 선택됨. 비어있는 칸을 우클릭하면 이동합니다."); + ccLang.get().addDefault("SHOP.PERMISSION", "§f퍼미션:"); + ccLang.get().addDefault("SHOP.PERMISSION_ITEM", "§7 - {permission}"); + ccLang.get().addDefault("SHOP.FLAGS", "§e플래그:"); + ccLang.get().addDefault("SHOP.FLAGS_ITEM", "§e - {flag}"); + ccLang.get().addDefault("SHOP.SHOP_BAL_INF", "§f상점 계좌 무제한"); + ccLang.get().addDefault("SHOP.SHOP_BAL", "§f상점 계좌 잔액"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION", "§f상점 위치: x {x}, y {y}, z {z}"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION_B", "§f상점 위치: "); + ccLang.get().addDefault("SHOP.SHOP_INFO_DASH", "§7 - "); + ccLang.get().addDefault("SHOP.DISABLED", "§c비활성§8|§f"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA", "불완전한 데이터"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA_Lore", "이 아이템은 어드민이 아닌\n유저에게는 보이지 않습니다.\nIndex: "); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_BUY", "§a구매량 제한 : {num} 남음"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_SELL", "§a판매량 제한 : {num} 남음"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_TIMER", "§a다음 리셋: {time}"); + ccLang.get().addDefault("SHOP.CLICK_TO_ADD", "§e클릭: 추가"); + + ccLang.get().addDefault("SHOP_SETTING_TITLE", "§3상점 설정"); + ccLang.get().addDefault("SHOP_SETTING.LOG_TOGGLE_LORE", "§e우클릭: 로그 뷰어"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_CONSOLE", "§f로그를 콘솔에 출력"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_ADMIN", "§f로그를 어드민에게 출력"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE", "§f최대 페이지"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE_LORE", "§f상점의 최대 페이지를 설정합니다"); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND", "§f배경 색상"); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND_LORE", "§e클릭: 변경"); + ccLang.get().addDefault("SHOP_SETTING.L_R_SHIFT", "§e좌: -1 우: +1 Shift: x5"); + ccLang.get().addDefault("SHOP_SETTING.FLAG", "§f플래그"); + ccLang.get().addDefault("SHOP_SETTING.SHOP_SETTINGS_LORE", "§e우클릭: 상점 편집"); + ccLang.get().addDefault("SHOP_SETTING.SIGN_SHOP_LORE", "§f표지판을 통해서만 접근할 수 있습니다."); + 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.SELECTED", "§2선택됨"); + ccLang.get().addDefault("SHOP_SETTING.CURRENCY", "§f화폐 유형: "); + ccLang.get().addDefault("SHOP_SETTING.VAULT_LORE", "§f기본값 입니다."); + ccLang.get().addDefault("SHOP_SETTING.EXP_LORE", "§f플레이어의 경험치로 거래합니다."); + 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가격 유형 표기를 숨깁니다."); + ccLang.get().addDefault("SHOP_SETTING.HIDE_SHOP_BALANCE", "§f상점 계좌 잔액을 숨깁니다."); + ccLang.get().addDefault("SHOP_SETTING.SHOW_MAX_STOCK", "§f재고 상한을 표시합니다."); + ccLang.get().addDefault("SHOP_SETTING.HIDDEN_IN_COMMAND", "§f명령어 자동완성시 이 상점을 표시하지 않습니다."); + ccLang.get().addDefault("SHOP_SETTING.INTEGER_ONLY", "§f구매 가격이 올림 처리됩니다.\n§f판매 가격은 내림 처리됩니다."); + ccLang.get().addDefault("SHOP_SETTING.PERMISSION", "§f퍼미션"); + ccLang.get().addDefault("SHOP_SETTING.STATE", "§f상태"); + ccLang.get().addDefault("SHOP_SETTING.STATE_ENABLE", "§a활성"); + ccLang.get().addDefault("SHOP_SETTING.STATE_DISABLE", "§c비활성"); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR", "§f로테이션: "); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR_LORE", "§e클릭: 로테이션 에디터"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE", "§f커맨드 실행"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE_LORE", "§f상점 거래 발생시 서버 명령어를 실행합니다."); + 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_LORE3", "§e씨프트 우클릭: 마지막 항목 삭제"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI", "§f거래 UI 설정"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI_LORE_2", "§e좌클릭: 편집\n§e우클릭: 초기화"); + + ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3로테이션 에디터"); + ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§a로테이션 켜짐"); + ccLang.get().addDefault("ROTATION_EDITOR.DISABLED", "§c로테이션 꺼짐"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_ENABLE", "§e좌클릭: 로테이션 켜기"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_DISABLE", "§e좌클릭: 로테이션 끄기"); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENT_TIME", "§f현재 시간: "); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENTLY_IN_USE", "§a[현재 적용중]"); + ccLang.get().addDefault("ROTATION_EDITOR.NEXT_ROTATION", "§f다음 로테이션: "); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD", "§f로테이션 주기"); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD_LORE_V2", "§e좌클릭: -1시간, 우클릭: +1시간, 씨프트: x10"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER", "§f타이머 조정"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER_LORE_V2", "§e좌클릭: -10분, 우클릭: +10분, 씨프트: x6"); + ccLang.get().addDefault("ROTATION_EDITOR.HOUR", "§f{0}시간"); + ccLang.get().addDefault("ROTATION_EDITOR.UNSAVED_CHANGES", "§c§o저장되지 않은 변경사항 있음"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES", "§f변경사항 적용"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES_LORE", "§e좌클릭: 변경사항 적용\n§e우클릭: 변경사항 초기화"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_ROTATION", "§e좌클릭: 지금 적용"); + ccLang.get().addDefault("ROTATION_EDITOR.OPEN", "§e좌클릭: 열기"); + ccLang.get().addDefault("ROTATION_EDITOR.CREATE", "§e좌클릭: 빈 로테이션 만들기"); + ccLang.get().addDefault("ROTATION_EDITOR.COPY_AS_NEW", "§e우클릭: 현재 상점 복사하여 만들기"); + ccLang.get().addDefault("ROTATION_EDITOR.DELETE", "§e씨프트 우클릭: §c삭제"); + ccLang.get().addDefault("ROTATION_EDITOR.REAPPLY", "§e씨프트 좌클릭: 재적용"); + ccLang.get().addDefault("ROTATION_EDITOR.MOVE", "§e우클릭: 이동"); + + ccLang.get().addDefault("ITEM_SETTING_TITLE", "§3아이탬 셋팅"); + ccLang.get().addDefault("ITEM_SETTING.VALUE_BUY", "§f구매가치: "); + ccLang.get().addDefault("ITEM_SETTING.VALUE_SELL", "§f판매가치: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE", "§f구매: "); + ccLang.get().addDefault("ITEM_SETTING.SELL_PRICE", "§f판매: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MIN", "§f최소 가격: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MAX", "§f최대 가격: "); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN", "§f중앙값: "); + ccLang.get().addDefault("ITEM_SETTING.STOCK", "§f재고: "); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK", "§f재고 상한: "); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK_LORE", "§f재고량이 이보다 많아지면\n§f더이상 상점에 판매할 수 없게됩니다."); + ccLang.get().addDefault("ITEM_SETTING.INF_STOCK", "무한 재고"); + ccLang.get().addDefault("ITEM_SETTING.STATIC_PRICE", "고정 가격"); + ccLang.get().addDefault("ITEM_SETTING.UNLIMITED", "무제한"); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN_HELP", "§f중앙값이 작을수록 가격이 급격이 변화합니다."); + ccLang.get().addDefault("ITEM_SETTING.TAX_IGNORED", "판매세 설정이 무시됩니다."); + ccLang.get().addDefault("ITEM_SETTING.RECOMMEND", "§f추천 값 적용"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT", "§f할인"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE", "§f할인율: {num}%\n§e좌클릭: +10, 우클릭: -10"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE_2", "§f할인율: {num}%\n§e좌클릭: -10, 우클릭: +10"); + ccLang.get().addDefault("ITEM_SETTING.DONE", "§f완료"); + ccLang.get().addDefault("ITEM_SETTING.DONE_LORE", "§f완료!"); + ccLang.get().addDefault("ITEM_SETTING.ROUND_DOWN", "§f내림"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_MEDIAN", "§f중앙값에 맞춤"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_STOCK", "§f재고에 맞춤"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_VALUE", "§f가격에 맞춤"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE", "§f닫기"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE_LORE", "§f§n클릭: 닫기"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE", "§c제거"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE_LORE", "§f이 아이템을 상점에서 제거합니다."); + ccLang.get().addDefault("ITEM_SETTING.BUY", "§3§l구매: {num}"); + ccLang.get().addDefault("ITEM_SETTING.SELL", "§3§l판매: {num}"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL", "§f플레이어 당 판매량 제한"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY", "§f플레이어 당 구매량 제한"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL", "§f거래량 제한 리셋 주기"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL_LORE", "§f주기: {interval}\n§f다음 리셋: {time}\n§e좌클릭: -1시간, 우클릭: +1시간, 씨프트 = x12"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER", "§f타이머 조정"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER_LORE", "§f{num}\n§f다음 리셋: {time}\n§e좌클릭: -1시간, 우클릭: +1시간, 씨프트 = x12"); + + ccLang.get().addDefault("TRADE_TITLE", "§3아이템 거래"); + ccLang.get().addDefault("TRADE.TOGGLE_SELLABLE", "§e클릭: 판매전용 토글"); + ccLang.get().addDefault("TRADE.TOGGLE_BUYABLE", "§e클릭: 구매전용 토글"); + ccLang.get().addDefault("TRADE.BUY_ONLY_LORE", "§f구매만 가능한 아이템"); + ccLang.get().addDefault("TRADE.SELL_ONLY_LORE", "§f판매만 가능한 아이템"); + ccLang.get().addDefault("TRADE.BALANCE", "§3내 잔액"); + ccLang.get().addDefault("TRADE.PRICE", "§f구매: {num}"); + ccLang.get().addDefault("TRADE.SELL_PRICE", "§f판매: {num}"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED", "§f구매: §8§m{num}§r §a{num2}"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED", "§f판매: §8§m{num}§r §c{num2}"); + ccLang.get().addDefault("TRADE.PRICE_EXP", "§f구매: {num}EXP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_EXP", "§f판매: {num}EXP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_EXP", "§f구매: §8§m{num}EXP§r §a{num2}EXP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_EXP", "§f판매: §8§m{num}EXP§r §c{num2}EXP"); + ccLang.get().addDefault("TRADE.PRICE_PP", "§f구매: {num}PP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_PP", "§f판매: {num}PP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_PP", "§f구매: §8§m{num}PP§r §a{num2}PP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_PP", "§f판매: §8§m{num}PP§r §c{num2}PP"); + ccLang.get().addDefault("TRADE.PRICE_JP", "§f구매: {num}JP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_JP", "§f판매: {num}JP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_JP", "§f구매: §8§m{num}JP§r §a{num2}JP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_JP", "§f판매: §8§m{num}JP§r §c{num2}JP"); + ccLang.get().addDefault("TRADE.BUY", "§c구매"); + ccLang.get().addDefault("TRADE.SELL", "§2판매"); + ccLang.get().addDefault("TRADE.STOCK", "§8재고: "); + ccLang.get().addDefault("TRADE.STACKS", "§8{num} 스택"); + ccLang.get().addDefault("TRADE.INF_STOCK", "§8무한 재고"); + ccLang.get().addDefault("TRADE.SHOP_BAL_INF", "§f상점 계좌 무제한"); + ccLang.get().addDefault("TRADE.SHOP_BAL", "§3상점 계좌 잔액 \n§f{num}"); + ccLang.get().addDefault("TRADE.CLICK_TO_BUY", "§c§n클릭: {amount}개 구매"); + ccLang.get().addDefault("TRADE.CLICK_TO_SELL", "§2§n클릭: {amount}개 판매"); + ccLang.get().addDefault("TRADE.PURCHASE_LIMIT_PER_PLAYER", "§a구매량 제한 : {num} 남음\n§a다음 리셋: {time}"); + ccLang.get().addDefault("TRADE.SALES_LIMIT_PER_PLAYER", "§a판매량 제한 : {num} 남음\n§a다음 리셋: {time}"); + + ccLang.get().addDefault("PAGE_EDITOR_TITLE", "§3페이지 편집"); + ccLang.get().addDefault("PAGE_EDITOR.PREV", "§f<<"); + ccLang.get().addDefault("PAGE_EDITOR.NEXT", "§f>>"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SUCCESS", "§f페이지가 교체 되었습니다."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_FAIL", "§f페이지 교체 실패."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SELECTED", "§f페이지 선택되었습니다. 서로 교체 할 다른 페이지를 우클릭 하세요."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_LORE_PREMIUM", "§e좌클릭: 페이지 이동\n§e우클릭: 페이지 교체(스왑)\n§eShift+좌: 페이지 삽입\n§eShift+우: 페이지 삭제"); + ccLang.get().addDefault("PAGE_EDITOR.PRICE", "§f구매: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.SELL_PRICE", "§f판매: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.STOCK", "§8재고: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.STACKS", "§8{num} 스택"); + ccLang.get().addDefault("PAGE_EDITOR.STATIC_PRICE", "§8[고정 가격]"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY", "§8(비어있음)"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY_SLOT_LORE", "§e좌,우클릭: 밀기\n§e+씨프트: 당기기"); + ccLang.get().addDefault("TRADE.QUANTITY_LORE", "§eShift+우: 수량 편집"); + ccLang.get().addDefault("TRADE.WAIT_FOR_INPUT", "거래 UI에 표시 될 수량을 입력하세요.\n예시: 1,2,4,8,16,32,64"); + + ccLang.get().addDefault("LOG_VIEWER_TITLE", "§3로그 뷰어"); + ccLang.get().addDefault("LOG_VIEWER.DATE", "§f날짜: "); + ccLang.get().addDefault("LOG_VIEWER.TIME", "§f시간: "); + ccLang.get().addDefault("LOG_VIEWER.CURRENCY", "§f화폐 유형: "); + ccLang.get().addDefault("LOG_VIEWER.PRICE", "§f가격: "); + ccLang.get().addDefault("LOG_VIEWER.EXPAND", "§f펼치기"); + ccLang.get().addDefault("LOG_VIEWER.COLLAPSE", "§f접기"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_LORE", "§e좌클릭: 이전 페이지\n§e우클릭: 다음 페이지"); + ccLang.get().addDefault("LOG_VIEWER.FILE_LORE", "§e좌클릭: 열기\n§eShift+우: §c삭제"); + + + ccLang.get().addDefault("LOG.LOG", "§f로그"); + ccLang.get().addDefault("LOG.CLEAR", "§f로그 삭제됨"); + ccLang.get().addDefault("LOG.SAVE", "§f로그 저장됨"); + ccLang.get().addDefault("LOG.DELETE", "§4로그 삭제"); + ccLang.get().addDefault("LOG.SELL", "§f{player}(이)가 {shop}에 {item} {amount}개를 판매함"); + ccLang.get().addDefault("LOG.BUY", "§f{player}(이)가 {shop}에서 {item} {amount}개를 구매함"); + + ccLang.get().addDefault("STOCK_SIMULATOR_TITLE", "§3재고 시뮬레이터"); + ccLang.get().addDefault("STOCK_SIMULATOR.CHANGE_SAMPLE_LORE", "§e좌, 우클릭: 아이템 변경"); + ccLang.get().addDefault("STOCK_SIMULATOR.SIMULATOR_BUTTON_LORE", "§e우클릭: 시뮬레이터"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_TITLE", "§f실행"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_LORE", "§e좌클릭: 시뮬레이션 실행\n§e우클릭: 설정값을 상점에 적용합니다\n§f아이템은 영향받지 않습니다."); + ccLang.get().addDefault("STOCK_SIMULATOR.REAL_TIME", "§a(실제 시간)"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_S", "§a{0}초 후"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_M", "§a{0}분 후"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_H", "§a{0}시간 후"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_D", "§a{0}일 후"); + ccLang.get().addDefault("STOCK_SIMULATOR.L_R_SHIFT", "§e좌: -1 우: +1 Shift: x5"); + ccLang.get().addDefault("STOCK_SIMULATOR.PRICE", "§f구매: {num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.MEDIAN", "§f중앙값: {num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.STOCK", "§f재고: {num}"); + + ccLang.get().addDefault("PALETTE_TITLE", "§3판매할 아이템 선택"); + ccLang.get().addDefault("PALETTE_TITLE2", "§3아이템 선택"); + ccLang.get().addDefault("PALETTE.LORE_PREMIUM", "§e좌클릭: 추가\n§e씨프트 좌클릭: 설정 후 추가\n§e우클릭: 장식으로 추가\n§e씨프트 우클릭: '{item}' 를 검색"); + ccLang.get().addDefault("PALETTE.LORE2", "§e좌클릭: 선택\n§e씨프트 우클릭: '{item}' 를 검색"); + ccLang.get().addDefault("PALETTE.SEARCH", "§f찾기"); + ccLang.get().addDefault("PALETTE.ADD_ALL", "§f모두 추가"); + ccLang.get().addDefault("PALETTE.ADD_ALL_LORE", "§e좌클릭: 모두 추가\n§e씨프트 좌클릭: 모두 추가하고 권장 값 적용"); + ccLang.get().addDefault("PALETTE.PAGE_TITLE", "§f{curPage}/{maxPage} 페이지"); + ccLang.get().addDefault("PALETTE.PAGE_LORE", "§f§n좌클릭: 이전 페이지\n§f§n우클릭: 다음 페이지"); + ccLang.get().addDefault("PALETTE.FILTER_APPLIED", "§f필터 적용됨 : "); + ccLang.get().addDefault("PALETTE.FILTER_LORE", "§f좌클릭: 검색\n§f우클릭: 필터 초기화\n\n§7\"BLUE_WOOL\"을 찾으려는 경우:\n§7 b w\n§7 wool\n§7 blue wool"); + + ccLang.get().addDefault("QUICK_SELL_TITLE", "§3빠른 판매"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_TITLE", "§3§l빠른 판매 도움말"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_LORE", "§a판매할 아이템을 좌클릭 하세요.\n§a씨프트 좌클릭으로 같은 유형의 아이템을 모두 팝니다.\n§a우클릭으로 해당 아이템 상점으로 이동합니다."); + + ccLang.get().addDefault("ARROW.UP", "§a⬆"); + ccLang.get().addDefault("ARROW.DOWN", "§c⬇"); + ccLang.get().addDefault("ARROW.UP_2", "§c⬆"); + ccLang.get().addDefault("ARROW.DOWN_2", "§a⬇"); + + ccLang.get().addDefault("TIME.OPEN", "Open"); + ccLang.get().addDefault("TIME.CLOSE", "Close"); + ccLang.get().addDefault("TIME.OPEN_LORE", "§f문 여는 시간 설정"); + ccLang.get().addDefault("TIME.CLOSE_LORE", "§f문 닫는 시간 설정"); + ccLang.get().addDefault("TIME.SHOPHOURS", "§f영업시간"); + ccLang.get().addDefault("TIME.OPEN24", "24시간 오픈"); + ccLang.get().addDefault("TIME.SHOP_IS_CLOSED", "§f상점이 문을 닫았습니다. 개점: {time}시. 현재시간: {curTime}시"); + ccLang.get().addDefault("TIME.SET_SHOPHOURS", "영업시간 설정"); + ccLang.get().addDefault("TIME.CUR", "§f현재 시간: {time}시"); + + ccLang.get().addDefault("STOCK_STABILIZING.SS", "§f재고 안정화"); + ccLang.get().addDefault("STOCK_STABILIZING.L_R_SHIFT", "§e좌클릭: -0.1 우클릭: +0.1 Shift: x5"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_A", "§f중앙값(median)의 n%"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_B", "§f중앙값(median)과의 격차의 n%"); + + ccLang.get().addDefault("FLUCTUATION.FLUCTUATION", "§f무작위 재고 변동"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL", "§f변화 간격"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL_LORE", "§f1h = 1000틱 = 현실시간 50초"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH", "§f변화 강도"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH_LORE", "§f중앙값(median)의 n%"); + + ccLang.get().addDefault("TAX.SALES_TAX", "§f판매세"); + ccLang.get().addDefault("TAX.USE_GLOBAL", "전역설정 사용 ({tax}%)"); + ccLang.get().addDefault("TAX.USE_LOCAL", "별도 설정"); + + ccLang.get().addDefault("MESSAGE.SEARCH_ITEM", "§f찾으려는 아이템의 이름을 입력하세요."); + ccLang.get().addDefault("MESSAGE.SEARCH_CANCELED", "§f검색 취소됨."); + ccLang.get().addDefault("MESSAGE.INPUT_CANCELED", "§f입력 취소됨."); + ccLang.get().addDefault("MESSAGE.DELETE_CONFIRM", "§f정말로 페이지를 삭제할까요? 'delete' 를 입력하면 삭제합니다."); + ccLang.get().addDefault("MESSAGE.CANT_DELETE_LAST_PAGE", "§f마지막 남은 페이지를 삭제할 수 없습니다."); + ccLang.get().addDefault("MESSAGE.SHOP_BAL_LOW", "§f상점이 돈을 충분히 가지고 있지 않습니다."); + ccLang.get().addDefault("MESSAGE.SHOP_CREATED", "§f상점 생성됨!"); + ccLang.get().addDefault("MESSAGE.SHOP_DELETED", "§f상점 제거됨!"); + ccLang.get().addDefault("MESSAGE.OUT_OF_STOCK", "§f재고 없음!"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS", "§f{item} {amount}개를 {price}에 구매함. 잔액: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§f{item} {amount}개를 {price}에 판매함. 잔액: {bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_EXP", "§f{item} {amount}개를 {price}경험치 포인트에 구매함. 잔액: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_EXP", "§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.NOT_ENOUGH_EXP_POINT", "§f경험치 포인트가 부족합니다. 잔액: {bal}"); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§f판매 할 아이템이 없습니다."); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL_2", "§f판매 가능 한 아이템이 없습니다."); + ccLang.get().addDefault("MESSAGE.INVENTORY_FULL", "§4인벤토리에 빈 공간이 없습니다!"); + ccLang.get().addDefault("MESSAGE.IRREVERSIBLE", "§f이 행동은 되돌릴 수 없습니다!"); + ccLang.get().addDefault("MESSAGE.ITEM_ADDED", "아이템 추가됨!"); + ccLang.get().addDefault("MESSAGE.ITEM_UPDATED", "아이템 수정됨!"); + ccLang.get().addDefault("MESSAGE.ITEM_DELETED", "아이템 제거됨!"); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED", "변경사항 적용됨. 새로운 값: "); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED_2", "변경사항 적용됨"); + ccLang.get().addDefault("MESSAGE.RECOMMEND_APPLIED", "추천 값 적용됨. {playerNum}명 기준입니다. config파일에서 이 값을 바꿀 수 있습니다."); + ccLang.get().addDefault("MESSAGE.TRANSFER_SUCCESS", "송금 완료"); + ccLang.get().addDefault("MESSAGE.PURCHASE_REJECTED", "상점에 이 아이템이 너무 많습니다. 지금은 팔 수 없습니다."); + ccLang.get().addDefault("MESSAGE.CLICK_YOUR_ITEM_START_PAGE", "인벤토리의 아이템을 클릭하면 가장 좋은 조건의 상점으로 이동합니다.\n좌클릭: 구매 우클릭: 판매"); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_BUY", "{item}을 가장 저렴하게 살 수 있는 상점으로 이동했습니다."); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_SELL", "{item}을 가장 비싸게 팔 수 있는 상점으로 이동했습니다."); + ccLang.get().addDefault("MESSAGE.SHOP_IS_CLOSED_BY_ADMIN", "이 상점은 서버 관리자에 의해 닫혔습니다."); + 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("MESSAGE.Q_SEARCH_FAIL_CURRENCY", "해당 아이템은 여러 종류의 재화로 거래 중 입니다."); + + ccLang.get().addDefault("HELP.TITLE", "§f도움말: {command} --------------------"); + ccLang.get().addDefault("HELP.SHOP", "상점을 엽니다."); + ccLang.get().addDefault("HELP.CMD", "명령어 도움말 표시 토글."); + ccLang.get().addDefault("HELP.CREATE_SHOP", "상점을 새로 만듭니다."); + ccLang.get().addDefault("HELP.CREATE_SHOP_2", "퍼미션(나중에 바꿀 수 있습니다.)\n true: dshop.user.shop.상점이름\n false: 아무나 접근가능(기본값)\n 임의 입력: 해당 퍼미션 필요"); + ccLang.get().addDefault("HELP.DELETE_SHOP", "기존의 상점을 제거합니다."); + ccLang.get().addDefault("HELP.SHOP_ADD_HAND", "손에 들고 있는 아이템을 상점에 추가합니다."); + ccLang.get().addDefault("HELP.SHOP_ADD_ITEM", "상점에 아이템을 추가합니다."); + ccLang.get().addDefault("HELP.SHOP_EDIT", "상점에 있는 아이템을 수정합니다."); + ccLang.get().addDefault("HELP.PRICE", "§7가격은 다음과 같이 계산됩니다: median*value/stock"); + ccLang.get().addDefault("HELP.INF_STATIC", "§7median<0 == 고정가격 stock<0 == 무한재고"); + ccLang.get().addDefault("HELP.EDIT_ALL", "상점의 모든 아이템을 한번에 수정합니다."); + ccLang.get().addDefault("HELP.RELOAD", "플러그인을 재시작 합니다."); + ccLang.get().addDefault("HELP.RELOADED", "플러그인 리로드됨!"); + ccLang.get().addDefault("HELP.USAGE", "사용법"); + ccLang.get().addDefault("HELP.ITEM_ALREADY_EXIST", "§7§o{item}(은)는 이미 판매중임.\n {info}\n 명령어를 입력하면 값이 수정됩니다."); + ccLang.get().addDefault("HELP.ITEM_INFO", "§7§o{item}의 현재 설정:\n {info}"); + ccLang.get().addDefault("HELP.REMOVE_ITEM", "§f인자를 0으로 입력하면 이 아이템을 상점에서 §4제거§f합니다."); + ccLang.get().addDefault("HELP.QSELL", "§f빠르게 아이템을 판매합니다."); + ccLang.get().addDefault("HELP.DELETE_OLD_USER", "장기간 접속하지 않은 유저의 데이터를 삭제합니다."); + ccLang.get().addDefault("HELP.ACCOUNT", "상점의 계좌 잔액을 설정합니다. -1 = 무제한"); + ccLang.get().addDefault("HELP.SET_TO_REC_ALL", "§e상점의 모든 아이템 설정값을 권장값으로 §c초기화§e합니다."); + ccLang.get().addDefault("HELP.SHOP_ENABLE", "상점을 활성화 또는 비활성화 합니다."); + + ccLang.get().addDefault("ERR.NO_USER_ID", "§6플레이어 uuid를 찾을 수 없습니다. 상점 이용 불가능."); + ccLang.get().addDefault("ERR.ITEM_NOT_EXIST", "상점에 해당 아이템이 존재하지 않습니다."); + ccLang.get().addDefault("ERR.ITEM_FORBIDDEN", "사용할 수 없는 아이템 입니다."); + ccLang.get().addDefault("ERR.NO_PERMISSION", "§e권한이 없습니다."); + ccLang.get().addDefault("ERR.WRONG_USAGE", "잘못된 명령어 사용법. 도움말을 확인하세요."); + ccLang.get().addDefault("ERR.NO_EMPTY_SLOT", "상점에 빈 공간이 없습니다."); + ccLang.get().addDefault("ERR.WRONG_DATATYPE", "인자의 유형이 잘못 입력되었습니다."); + ccLang.get().addDefault("ERR.VALUE_ZERO", "인자값이 0보다 커야 합니다."); + ccLang.get().addDefault("ERR.WRONG_ITEM_NAME", "유효하지 않은 아이템 이름입니다."); + ccLang.get().addDefault("ERR.HAND_EMPTY", "아이템을 손에 들고 있어야 합니다."); + ccLang.get().addDefault("ERR.HAND_EMPTY2", "§c§o아이템을 손에 들고 있어야 합니다!"); + ccLang.get().addDefault("ERR.SHOP_NOT_FOUND", "§f해당 상점을 찾을 수 없습니다."); + ccLang.get().addDefault("ERR.SHOP_EXIST", "해당 이름을 가진 상점이 이미 존재합니다."); + ccLang.get().addDefault("ERR.SHOP_NOT_EXIST", "그런 이름을 가진 상점이 없습니다."); + ccLang.get().addDefault("ERR.SIGN_SHOP_REMOTE_ACCESS", "해당 상점은 표지판을 통해서만 접근할 수 있습니다."); + ccLang.get().addDefault("ERR.LOCAL_SHOP_REMOTE_ACCESS", "해당 상점은 직접 방문해야만 사용할 수 있습니다."); + ccLang.get().addDefault("ERR.MAX_LOWER_THAN_MIN", "최대 가격은 최소 가격보다 커야합니다."); + 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", "해당 플레이어를 찾을 수 없습니다."); + ccLang.get().addDefault("ERR.SHOP_LINK_FAIL", "상점 둘 중 하나는 실제 계좌이어야 합니다."); + ccLang.get().addDefault("ERR.SHOP_LINK_TARGET_ERR", "목표 상점은 실제 계좌를 가지고 있어야 합니다."); + ccLang.get().addDefault("ERR.NESTED_STRUCTURE", "계층 구조를 이루는것은 금지되어 있습니다. (ex. aa-bb, bb-cc)"); + ccLang.get().addDefault("ERR.CREATIVE", "§eCreative mode 에서 이 명령어를 사용할 수 없습니다. 권한이 없습니다."); + ccLang.get().addDefault("ERR.FILE_CREATE_FAIL", "§e파일 생성에 실패했습니다."); + ccLang.get().addDefault("ERR.INVALID_TRANSACTION", "이 거래는 더이상 유효하지 않습니다. 문제가 반복되면 서버 관리자에게 문의하세요."); + ccLang.get().addDefault("ERR.SIGN_WALL", "상점 표지판이 벽에 설치되야 합니다."); + + ccLang.get().addDefault("ERR.SHOP_NULL", "§e상점 이름이 지정되지 않았습니다."); + ccLang.get().addDefault("ERR.ITEMINFO_HAND_EMPTY", "아이템을 들고 있어야 합니다."); + ccLang.get().addDefault("HELP.ITEMINFO_USAGE", "§f아이템 정보를 보려면 손에 아이템을 들고 있어야 합니다."); + ccLang.get().addDefault("HELP.ITEMINFO_REALNAME", "§7실제 이름: §3{item_realname}"); + ccLang.get().addDefault("HELP.ITEMINFO_SIGN_NAME", "§7표지판용 이름: §3{item_signname}"); + ccLang.get().addDefault("ERR.SIGN_ITEM_INVALID", "아이템 이름이 잘못되었습니다. /ds iteminfo 를 사용하여 아이템 이름을 확인해 보세요."); + ccLang.get().addDefault("ERR.SIGN_ITEM_NOT_FOR_SALE", "상점에 없는 아이템 입니다."); + ccLang.get().addDefault("MESSAGE.SIGN_SHOP_CREATED", "§a표지판 상점 생성!"); + + ccLang.get().addDefault("ON", "켜짐"); + ccLang.get().addDefault("OFF", "꺼짐"); + ccLang.get().addDefault("SET", "설정"); + ccLang.get().addDefault("UNSET", "설정해제"); + ccLang.get().addDefault("NULL", "없음"); + ccLang.get().addDefault("NULL(OPEN)", "없음 (모두에게 열려있음)"); + ccLang.get().addDefault("CUR_STATE", "현재상태"); + ccLang.get().addDefault("CLICK", "클릭"); + ccLang.get().addDefault("LMB", "좌클릭"); + ccLang.get().addDefault("RMB", "우클릭"); + ccLang.get().addDefault("CLOSE", "§f닫기"); + ccLang.get().addDefault("CLOSE_LORE", "§f§n클릭: 닫기"); + + ccLang.get().addDefault("EXP_POINTS", "Exp"); + ccLang.get().addDefault("JOB_POINTS", "Job Points"); + ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); + + ccLang.get().options().copyDefaults(true); + ccLang.save(); + } + + private static void zh_TW() + { + ccLang.setup("Lang_V3_zh-TW", null); + + ccLang.get().addDefault("START_PAGE.EDITOR_TITLE", "§3編輯圖示"); + ccLang.get().addDefault("START_PAGE.EDIT_NAME", "§f重新命名"); + ccLang.get().addDefault("START_PAGE.EDIT_LORE", "§f修改描述"); + ccLang.get().addDefault("START_PAGE.EDIT_ICON", "§f更換圖示"); + ccLang.get().addDefault("START_PAGE.EDIT_ACTION", "§f更改指令"); + ccLang.get().addDefault("START_PAGE.SHOP_SHORTCUT", "§f建立商店按鈕"); + ccLang.get().addDefault("START_PAGE.CREATE_DECO", "§f建立裝飾按鈕"); + ccLang.get().addDefault("START_PAGE.ENTER_SHOP_NAME", "請輸入商店名稱"); + ccLang.get().addDefault("START_PAGE.DEFAULT_SHOP_LORE", "§f§n點擊:前往商店"); + ccLang.get().addDefault("START_PAGE.ITEM_MOVE_LORE", "§e右鍵:移動"); + ccLang.get().addDefault("START_PAGE.ITEM_COPY_LORE", "§e右鍵:複製"); + ccLang.get().addDefault("START_PAGE.ITEM_REMOVE_LORE", "§eShift 左鍵:移除"); + ccLang.get().addDefault("START_PAGE.ITEM_EDIT_LORE", "§eShift 右鍵:編輯"); + ccLang.get().addDefault("START_PAGE.REMOVE", "§f移除"); + ccLang.get().addDefault("START_PAGE.REMOVE_LORE", "§f從開始頁面移除此按鈕。"); + ccLang.get().addDefault("START_PAGE.ENTER_NAME", "請輸入此按鈕的新名稱。"); + ccLang.get().addDefault("START_PAGE.ENTER_LORE", "請輸入此按鈕的新描述。"); + ccLang.get().addDefault("START_PAGE.ENTER_ICON", "請輸入要用作按鈕圖示的物品名稱。(英文,不區分大小寫)"); + ccLang.get().addDefault("START_PAGE.ENTER_ACTION", "請輸入指令(不含 /)。當按下按鈕時會執行此指令。"); + ccLang.get().addDefault("START_PAGE.ENTER_COLOR", "請輸入裝飾按鈕的顏色。(英文)"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST_TITLE", "§3商店清單"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_TITLE", "§f{curPage}/{maxPage} 頁"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_LORE", "§e左鍵:上一頁\n§e右鍵:下一頁"); + + ccLang.get().addDefault("COLOR_PICKER_TITLE", "§3顏色選擇器"); + + ccLang.get().addDefault("SHOP.TRADE_LORE", "§f§n點擊:交易"); + ccLang.get().addDefault("SHOP.BUY_PRICE", "§f購買:{num}"); + ccLang.get().addDefault("SHOP.SELL_PRICE", "§f出售:{num}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED", "§f購買:§8§m{num}§r §a{num2}"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED", "§f出售:§8§m{num}§r §c{num2}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_EXP", "§f購買:{num} 經驗值"); + ccLang.get().addDefault("SHOP.SELL_PRICE_EXP", "§f出售:{num} 經驗值"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_EXP", "§f購買:§8§m{num} 經驗值§r §a{num2} 經驗值"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_EXP", "§f出售:§8§m{num} 經驗值§r §c{num2} 經驗值"); + ccLang.get().addDefault("SHOP.BUY_PRICE_PP", "§f購買:{num} 積分"); + ccLang.get().addDefault("SHOP.SELL_PRICE_PP", "§f出售:{num} 積分"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_PP", "§f購買:§8§m{num} 積分§r §a{num2} 積分"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_PP", "§f出售:§8§m{num} 積分§r §c{num2} 積分"); + ccLang.get().addDefault("SHOP.BUY_PRICE_JP", "§f購買:{num} 職業點數"); + ccLang.get().addDefault("SHOP.SELL_PRICE_JP", "§f出售:{num} 職業點數"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_JP", "§f購買:§8§m{num} 職業點數§r §a{num2} 職業點數"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_JP", "§f出售:§8§m{num} 職業點數§r §c{num2} 職業點數"); + ccLang.get().addDefault("SHOP.STOCK", "§8庫存:{num}"); + ccLang.get().addDefault("SHOP.STOCK_2", "§8庫存:{stock}/{max_stock}"); + ccLang.get().addDefault("SHOP.INF_STOCK", "§8無限"); + ccLang.get().addDefault("SHOP.STATIC_PRICE", "§8【固定價格】"); + ccLang.get().addDefault("SHOP.STACKS", "§8{num} 組"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_LORE", "§e右鍵:移動"); + ccLang.get().addDefault("SHOP.ITEM_COPY_LORE", "§e右鍵:複製"); + ccLang.get().addDefault("SHOP.ITEM_EDIT_LORE", "§eShift右鍵:編輯"); + ccLang.get().addDefault("SHOP.DECO_DELETE_LORE", "§eShift右鍵:移除"); + ccLang.get().addDefault("SHOP.PAGE_TITLE", "§f{curPage}/{maxPage} 頁"); + ccLang.get().addDefault("SHOP.PAGE_LORE_V2", "§f§n左鍵:上一頁\n§f§n右鍵:下一頁\n§7點擊你的物品會\n§7跳轉到該物品所在頁面。"); + ccLang.get().addDefault("SHOP.GO_TO_PAGE_EDITOR", "§eShift 右鍵:頁面編輯器"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_SELECTED", "已選擇物品。右鍵點擊空欄位以移動。"); + ccLang.get().addDefault("SHOP.PERMISSION", "§f權限:"); + ccLang.get().addDefault("SHOP.PERMISSION_ITEM", "§7 - {permission}"); + ccLang.get().addDefault("SHOP.FLAGS", "§e標記:"); + ccLang.get().addDefault("SHOP.FLAGS_ITEM", "§e - {flag}"); + ccLang.get().addDefault("SHOP.SHOP_BAL_INF", "§f無限"); + ccLang.get().addDefault("SHOP.SHOP_BAL", "§f商店帳戶餘額"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION", "§f商店位置:x {x}, y {y}, z {z}"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION_B", "§f商店位置:"); + ccLang.get().addDefault("SHOP.SHOP_INFO_DASH", "§7 - "); + ccLang.get().addDefault("SHOP.DISABLED", "§c已停用§8|§f"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA", "資料不完整"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA_Lore", "此物品對非 OP 玩家不可見\n索引:"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_BUY", "§a購買上限:剩餘 {num}"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_SELL", "§a販售上限:剩餘 {num}"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_TIMER", "§a下次重置:{time}"); + ccLang.get().addDefault("SHOP.CLICK_TO_ADD", "§e點擊:新增"); + + ccLang.get().addDefault("SHOP_SETTING_TITLE", "§3商店設定"); + ccLang.get().addDefault("SHOP_SETTING.LOG_TOGGLE_LORE", "§e右鍵:查看紀錄"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_CONSOLE", "§f將紀錄輸出至主控台"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_ADMIN", "§f將紀錄發送給管理員"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE", "§f最大頁數"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE_LORE", "§f設定商店最大頁數。"); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND", "§f背景顏色"); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND_LORE", "§e點擊:變更顏色"); + ccLang.get().addDefault("SHOP_SETTING.L_R_SHIFT", "§e左鍵:-1 右鍵:+1 Shift:x5"); + ccLang.get().addDefault("SHOP_SETTING.FLAG", "§f標記"); + ccLang.get().addDefault("SHOP_SETTING.SHOP_SETTINGS_LORE", "§e右鍵:商店設定"); + ccLang.get().addDefault("SHOP_SETTING.SIGN_SHOP_LORE", "§f僅可透過告示牌進入。"); + ccLang.get().addDefault("SHOP_SETTING.LOCAL_SHOP_LORE", "§f必須親訪實體商店位置。"); + ccLang.get().addDefault("SHOP_SETTING.DELIVERY_CHARGE_LORE", "§f您可以付費配送,\n§f無需親訪商店交易。"); + ccLang.get().addDefault("SHOP_SETTING.SELECTED", "§2已選擇"); + ccLang.get().addDefault("SHOP_SETTING.CURRENCY", "§f貨幣類型:"); + ccLang.get().addDefault("SHOP_SETTING.VAULT_LORE", "§f預設貨幣。"); + ccLang.get().addDefault("SHOP_SETTING.EXP_LORE", "§f以玩家經驗值交易。"); + ccLang.get().addDefault("SHOP_SETTING.JOB_POINT_LORE", "§f使用職業點數交易。\n§f需安裝 Jobs Reborn 插件"); + ccLang.get().addDefault("SHOP_SETTING.PLAYER_POINT_LORE", "§f使用玩家積分交易。\n§f需安裝 PlayerPoints 插件"); + 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隱藏價格類型。"); + ccLang.get().addDefault("SHOP_SETTING.HIDE_SHOP_BALANCE", "§f隱藏商店帳戶餘額。"); + ccLang.get().addDefault("SHOP_SETTING.SHOW_MAX_STOCK", "§f顯示最大庫存。"); + ccLang.get().addDefault("SHOP_SETTING.HIDDEN_IN_COMMAND", "§f此商店不會\n§f出現在指令補全中。"); + ccLang.get().addDefault("SHOP_SETTING.INTEGER_ONLY", "§f購買價格將向上取整。\n§f販售價格將向下取整。"); + ccLang.get().addDefault("SHOP_SETTING.PERMISSION", "§f權限"); + ccLang.get().addDefault("SHOP_SETTING.STATE", "§f狀態"); + ccLang.get().addDefault("SHOP_SETTING.STATE_ENABLE", "§a啟用"); + ccLang.get().addDefault("SHOP_SETTING.STATE_DISABLE", "§c停用"); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR", "§f輪換:"); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR_LORE", "§e點擊:編輯輪換"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE", "§f伺服器指令"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE_LORE", "§f在商店交易時執行伺服器指令。"); + 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_LORE3", "§eShift 右鍵:刪除最後一項"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI", "§f編輯交易介面"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI_LORE_2", "§e左鍵:編輯\n§e右鍵:重設"); + + ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3輪換編輯器"); + ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§a已啟用"); + ccLang.get().addDefault("ROTATION_EDITOR.DISABLED", "§c已停用"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_ENABLE", "§e左鍵:啟用"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_DISABLE", "§e左鍵:停用"); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENT_TIME", "§f當前時間:"); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENTLY_IN_USE", "§a【使用中】"); + ccLang.get().addDefault("ROTATION_EDITOR.NEXT_ROTATION", "§f下次輪換:"); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD", "§f週期"); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD_LORE_V2", "§e左鍵:-1小時,右鍵:+1小時,Shift:x10"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER", "§f計時器調整"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER_LORE_V2", "§e左鍵:-10分鐘,右鍵:+10分鐘,Shift:x6"); + ccLang.get().addDefault("ROTATION_EDITOR.HOUR", "§f{0} 小時"); + ccLang.get().addDefault("ROTATION_EDITOR.UNSAVED_CHANGES", "§c§o尚未儲存的變更"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES", "§f套用變更"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES_LORE", "§e左鍵:儲存變更\n§e右鍵:重設變更"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_ROTATION", "§e左鍵:立即套用"); + ccLang.get().addDefault("ROTATION_EDITOR.OPEN", "§e左鍵:開啟"); + ccLang.get().addDefault("ROTATION_EDITOR.CREATE", "§e左鍵:建立空白"); + ccLang.get().addDefault("ROTATION_EDITOR.COPY_AS_NEW", "§e右鍵:複製為新項目"); + ccLang.get().addDefault("ROTATION_EDITOR.DELETE", "§eShift 右鍵:§c刪除"); + ccLang.get().addDefault("ROTATION_EDITOR.REAPPLY", "§eShift 左鍵:重新套用"); + ccLang.get().addDefault("ROTATION_EDITOR.MOVE", "§e右鍵:移動"); + + ccLang.get().addDefault("ITEM_SETTING_TITLE", "§3物品設定"); + ccLang.get().addDefault("ITEM_SETTING.VALUE_BUY", "§f購買價值:"); + ccLang.get().addDefault("ITEM_SETTING.VALUE_SELL", "§f販售價值:"); + ccLang.get().addDefault("ITEM_SETTING.PRICE", "§f購買價格:"); + ccLang.get().addDefault("ITEM_SETTING.SELL_PRICE", "§f販售價格:"); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MIN", "§f最低價格:"); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MAX", "§f最高價格:"); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN", "§f中位數:"); + ccLang.get().addDefault("ITEM_SETTING.STOCK", "§f庫存:"); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK", "§f最大庫存:"); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK_LORE", "§f若庫存超過此上限,\n§f商店將拒絕收購。"); + ccLang.get().addDefault("ITEM_SETTING.INF_STOCK", "無限庫存"); + ccLang.get().addDefault("ITEM_SETTING.STATIC_PRICE", "固定價格"); + ccLang.get().addDefault("ITEM_SETTING.UNLIMITED", "無限制"); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN_HELP", "§f中位數越小,\n§f價格變化越劇烈。"); + ccLang.get().addDefault("ITEM_SETTING.TAX_IGNORED", "已忽略銷售稅設定。"); + ccLang.get().addDefault("ITEM_SETTING.RECOMMEND", "§f套用建議數值"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT", "§f折扣"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE", "§f折扣率:{num}%\n§e左鍵:+10,右鍵:-10"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE_2", "§f折扣率:{num}%\n§e左鍵:-10,右鍵:+10"); + ccLang.get().addDefault("ITEM_SETTING.DONE", "§f完成"); + ccLang.get().addDefault("ITEM_SETTING.DONE_LORE", "§f設定完成!"); + ccLang.get().addDefault("ITEM_SETTING.ROUND_DOWN", "§f向下取整"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_MEDIAN", "§f設為中位數"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_STOCK", "§f設為庫存數"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_VALUE", "§f設為數值"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE", "§f關閉"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE_LORE", "§f§n點擊:關閉"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE", "§c移除"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE_LORE", "§f從商店中移除此物品。"); + ccLang.get().addDefault("ITEM_SETTING.BUY", "§3§l購買:{num}"); + ccLang.get().addDefault("ITEM_SETTING.SELL", "§3§l販售:{num}"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL", "§f每位玩家販售上限"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL_LORE", "§f{num}\n§e左鍵:-1,右鍵:+1,Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY", "§f每位玩家購買上限"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY_LORE", "§f{num}\n§e左鍵:-1,右鍵:+1,Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL", "§f交易量限制重設週期"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL_LORE", "§f間隔時間:{interval}\n§f下次重置:{time}\n§e左鍵:-1 小時,右鍵:+1 小時,Shift = x12"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER", "§f調整計時器"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER_LORE", "§f{num}\n§f下次重置:{time}\n§e左鍵:-1 小時,右鍵:+1 小時,Shift = x12"); + + ccLang.get().addDefault("TRADE_TITLE", "§3交易"); + ccLang.get().addDefault("TRADE.TOGGLE_SELLABLE", "§e點擊:僅限販售切換"); + ccLang.get().addDefault("TRADE.TOGGLE_BUYABLE", "§e點擊:僅限購買切換"); + ccLang.get().addDefault("TRADE.BUY_ONLY_LORE", "§f此物品無法販售。"); + ccLang.get().addDefault("TRADE.SELL_ONLY_LORE", "§f此物品無法購買。"); + ccLang.get().addDefault("TRADE.BALANCE", "§3我的餘額"); + ccLang.get().addDefault("TRADE.PRICE", "§f購買:{num}"); + ccLang.get().addDefault("TRADE.SELL_PRICE", "§f販售:{num}"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED", "§f購買:§8§m{num}§r §a{num2}"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED", "§f販售:§8§m{num}§r §c{num2}"); + ccLang.get().addDefault("TRADE.PRICE_EXP", "§f購買:{num} 經驗值"); + ccLang.get().addDefault("TRADE.SELL_PRICE_EXP", "§f販售:{num} 經驗值"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_EXP", "§f購買:§8§m{num} 經驗值§r §a{num2} 經驗值"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_EXP", "§f販售:§8§m{num} 經驗值§r §c{num2} 經驗值"); + ccLang.get().addDefault("TRADE.PRICE_PP", "§f購買:{num} 積分"); + ccLang.get().addDefault("TRADE.SELL_PRICE_PP", "§f販售:{num} 積分"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_PP", "§f購買:§8§m{num} 積分§r §a{num2} 積分"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_PP", "§f販售:§8§m{num} 積分§r §c{num2} 積分"); + ccLang.get().addDefault("TRADE.PRICE_JP", "§f購買:{num} 職業點數"); + ccLang.get().addDefault("TRADE.SELL_PRICE_JP", "§f販售:{num} 職業點數"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_JP", "§f購買:§8§m{num} 職業點數§r §a{num2} 職業點數"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_JP", "§f販售:§8§m{num} 職業點數§r §c{num2} 職業點數"); + ccLang.get().addDefault("TRADE.BUY", "§c購買"); + ccLang.get().addDefault("TRADE.SELL", "§2販售"); + ccLang.get().addDefault("TRADE.STOCK", "§8庫存:"); + ccLang.get().addDefault("TRADE.STACKS", "§8{num} 組"); + ccLang.get().addDefault("TRADE.INF_STOCK", "§8無限"); + ccLang.get().addDefault("TRADE.SHOP_BAL_INF", "§f無限"); + ccLang.get().addDefault("TRADE.SHOP_BAL", "§3商店帳戶餘額 \n§f{num}"); + ccLang.get().addDefault("TRADE.CLICK_TO_BUY", "§c§n點擊:購買 {amount}"); + ccLang.get().addDefault("TRADE.CLICK_TO_SELL", "§2§n點擊:販售 {amount}"); + ccLang.get().addDefault("TRADE.PURCHASE_LIMIT_PER_PLAYER", "§a購買上限:剩餘 {num}\n§a下次重置:{time}"); + ccLang.get().addDefault("TRADE.SALES_LIMIT_PER_PLAYER", "§a販售上限:剩餘 {num}\n§a下次重置:{time}"); + ccLang.get().addDefault("TRADE.QUANTITY_LORE", "§eShift 右鍵:編輯數量"); + ccLang.get().addDefault("TRADE.WAIT_FOR_INPUT", "輸入要在交易介面中顯示的數量。\n範例:1,2,4,8,16,32,64"); + + ccLang.get().addDefault("PAGE_EDITOR_TITLE", "§3頁面編輯器"); + ccLang.get().addDefault("PAGE_EDITOR.PREV", "§f<<"); + ccLang.get().addDefault("PAGE_EDITOR.NEXT", "§f>>"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SUCCESS", "§f頁面已成功替換。"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_FAIL", "§f頁面替換失敗。"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SELECTED", "§f頁面已選取。請右鍵點擊要替換的其他頁面。"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_LORE_PREMIUM", "§e左鍵:開啟頁面\n§e右鍵:替換\n§eShift 左鍵:插入\n§eShift 右鍵:刪除"); + ccLang.get().addDefault("PAGE_EDITOR.PRICE", "§f購買:{num}"); + ccLang.get().addDefault("PAGE_EDITOR.SELL_PRICE", "§f販售:{num}"); + ccLang.get().addDefault("PAGE_EDITOR.STOCK", "§8庫存:{num}"); + ccLang.get().addDefault("PAGE_EDITOR.STACKS", "§8{num} 組"); + ccLang.get().addDefault("PAGE_EDITOR.STATIC_PRICE", "§8【固定價格】"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY", "§8(空)"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY_SLOT_LORE", "§e左鍵/右鍵:推送\n§e+Shift:拉取"); + + ccLang.get().addDefault("LOG_VIEWER_TITLE", "§3紀錄檢視器"); + ccLang.get().addDefault("LOG_VIEWER.DATE", "§f日期:"); + ccLang.get().addDefault("LOG_VIEWER.TIME", "§f時間:"); + ccLang.get().addDefault("LOG_VIEWER.CURRENCY", "§f貨幣:"); + ccLang.get().addDefault("LOG_VIEWER.PRICE", "§f價格:"); + ccLang.get().addDefault("LOG_VIEWER.EXPAND", "§f展開"); + ccLang.get().addDefault("LOG_VIEWER.COLLAPSE", "§f收合"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_TITLE", "§f{curPage}/{maxPage} 頁"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_LORE", "§e左鍵:上一頁\n§e右鍵:下一頁"); + ccLang.get().addDefault("LOG_VIEWER.FILE_LORE", "§e左鍵:開啟\n§eShift 右鍵:§c刪除"); + + ccLang.get().addDefault("LOG.LOG", "§f紀錄"); + ccLang.get().addDefault("LOG.CLEAR", "§f紀錄已刪除"); + ccLang.get().addDefault("LOG.SAVE", "§f紀錄已儲存"); + ccLang.get().addDefault("LOG.DELETE", "§4刪除紀錄"); + ccLang.get().addDefault("LOG.SELL", "§f{player} 將 {amount} 個 {item} 販售給 {shop}"); + ccLang.get().addDefault("LOG.BUY", "§f{player} 從 {shop} 購買了 {amount} 個 {item}"); + + ccLang.get().addDefault("STOCK_SIMULATOR_TITLE", "§3庫存模擬器"); + ccLang.get().addDefault("STOCK_SIMULATOR.CHANGE_SAMPLE_LORE", "§e左鍵/右鍵:變更物品"); + ccLang.get().addDefault("STOCK_SIMULATOR.SIMULATOR_BUTTON_LORE", "§e右鍵:模擬器"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_TITLE", "§f執行"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_LORE", "§e左鍵:執行模擬\n§e右鍵:將設定套用至商店\n§f物品本身不受影響。"); + ccLang.get().addDefault("STOCK_SIMULATOR.REAL_TIME", "§a(即時)"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_S", "§a{0} 秒後"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_M", "§a{0} 分鐘後"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_H", "§a{0} 小時後"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_D", "§a{0} 天後"); + ccLang.get().addDefault("STOCK_SIMULATOR.L_R_SHIFT", "§e左鍵:-1 右鍵:+1 Shift:x5"); + ccLang.get().addDefault("STOCK_SIMULATOR.PRICE", "§f購買價格:{num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.MEDIAN", "§f中位數:{num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.STOCK", "§f庫存:{num}"); + + ccLang.get().addDefault("PALETTE_TITLE", "§3選擇要販售的物品"); + ccLang.get().addDefault("PALETTE_TITLE2", "§3選擇物品"); + ccLang.get().addDefault("PALETTE.LORE_PREMIUM", "§e左鍵:新增\n§eShift 左鍵:設定後新增\n§e右鍵:新增為裝飾物\n§eShift 右鍵:搜尋「{item}」"); + ccLang.get().addDefault("PALETTE.LORE2", "§e左鍵:選擇\n§eShift 右鍵:搜尋「{item}」"); + ccLang.get().addDefault("PALETTE.SEARCH", "§f搜尋"); + ccLang.get().addDefault("PALETTE.ADD_ALL", "§f全部新增"); + ccLang.get().addDefault("PALETTE.ADD_ALL_LORE", "§e左鍵:新增全部\n§eShift 左鍵:新增全部並套用建議數值"); + ccLang.get().addDefault("PALETTE.PAGE_TITLE", "§f{curPage}/{maxPage} 頁"); + ccLang.get().addDefault("PALETTE.PAGE_LORE", "§f§n左鍵:上一頁\n§f§n右鍵:下一頁"); + ccLang.get().addDefault("PALETTE.FILTER_APPLIED", "§f篩選器已套用:"); + ccLang.get().addDefault("PALETTE.FILTER_LORE", "§e左鍵:搜尋\n§e右鍵:清除篩選\n\n§7搜尋「BLUE_WOOL」範例:\n§7 b w\n§7 wool\n§7 blue wool"); + + ccLang.get().addDefault("QUICK_SELL_TITLE", "§3快速販售"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_TITLE", "§3§l快速販售指南"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_LORE", "§a左鍵點擊要販售的物品。\n§aShift 左鍵可販售所有相同類型的物品。\n§a右鍵可前往該物品的商店。"); + + ccLang.get().addDefault("ARROW.UP", "§a⬆"); + ccLang.get().addDefault("ARROW.DOWN", "§c⬇"); + ccLang.get().addDefault("ARROW.UP_2", "§c⬆"); + ccLang.get().addDefault("ARROW.DOWN_2", "§a⬇"); + + ccLang.get().addDefault("TIME.OPEN", "開門"); + ccLang.get().addDefault("TIME.CLOSE", "關門"); + ccLang.get().addDefault("TIME.OPEN_LORE", "§f設定開店時間"); + ccLang.get().addDefault("TIME.CLOSE_LORE", "§f設定關店時間"); + ccLang.get().addDefault("TIME.SHOPHOURS", "§f營業時間"); + ccLang.get().addDefault("TIME.OPEN24", "24 小時營業"); + ccLang.get().addDefault("TIME.SHOP_IS_CLOSED", "§f商店目前關閉,將於 {time} 點開啟。現在時間 {curTime} 點。"); + ccLang.get().addDefault("TIME.SET_SHOPHOURS", "設定營業時間"); + ccLang.get().addDefault("TIME.CUR", "§f目前時間:{time} 點"); + + ccLang.get().addDefault("STOCK_STABILIZING.SS", "§f庫存穩定化"); + ccLang.get().addDefault("STOCK_STABILIZING.L_R_SHIFT", "§e左鍵:-0.1 右鍵:+0.1 Shift:x5"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_A", "§f中位數的 n%"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_B", "§f與中位數差距的 n%"); + + ccLang.get().addDefault("FLUCTUATION.FLUCTUATION", "§f庫存波動"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL", "§f間隔時間"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL_LORE", "§f1 小時 = 1000 ticks = 實際時間 50 秒"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH", "§f波動強度"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH_LORE", "§f中位數的 n%"); + + ccLang.get().addDefault("TAX.SALES_TAX", "§f銷售稅"); + ccLang.get().addDefault("TAX.USE_GLOBAL", "使用全域設定({tax}%)"); + ccLang.get().addDefault("TAX.USE_LOCAL", "單獨設定"); + + ccLang.get().addDefault("MESSAGE.SEARCH_ITEM", "§f請輸入要搜尋的物品名稱。"); + ccLang.get().addDefault("MESSAGE.SEARCH_CANCELED", "§f搜尋已取消。"); + ccLang.get().addDefault("MESSAGE.INPUT_CANCELED", "§f輸入已取消。"); + ccLang.get().addDefault("MESSAGE.DELETE_CONFIRM", "§f確定要刪除此頁面嗎?請輸入 'delete' 以確認。"); + ccLang.get().addDefault("MESSAGE.CANT_DELETE_LAST_PAGE", "§f無法刪除僅剩的最後一頁。"); + ccLang.get().addDefault("MESSAGE.SHOP_BAL_LOW", "§f商店資金不足。"); + ccLang.get().addDefault("MESSAGE.SHOP_CREATED", "§f商店已建立!"); + ccLang.get().addDefault("MESSAGE.SHOP_DELETED", "§f商店已刪除!"); + ccLang.get().addDefault("MESSAGE.OUT_OF_STOCK", "§f缺貨!"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS", "§f已購買 {item} x{amount},花費 {price}。餘額:{bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§f已販售 {item} x{amount},收入 {price}。餘額:{bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_EXP", "§f已購買 {item} x{amount},花費 {price} 經驗值。餘額:{bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_EXP", "§f已販售 {item} x{amount},收入 {price} 經驗值。餘額:{bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_JP", "§f已購買 {item} x{amount},花費 {price} 點數。剩餘:{bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_JP", "§f已販售 {item} x{amount},收入 {price} 點數。剩餘:{bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_PP", "§f已購買 {item} x{amount},花費 {price} 積分。剩餘:{bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_PP", "§f已販售 {item} x{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.NOT_ENOUGH_EXP_POINT", "§f經驗值不足。餘額:{bal}"); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§f目前沒有可販售的物品。"); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL_2", "§f無可販售的物品。"); + ccLang.get().addDefault("MESSAGE.INVENTORY_FULL", "§4你的物品欄已滿!"); + ccLang.get().addDefault("MESSAGE.IRREVERSIBLE", "§f此操作無法復原!"); + ccLang.get().addDefault("MESSAGE.ITEM_ADDED", "物品已新增!"); + ccLang.get().addDefault("MESSAGE.ITEM_UPDATED", "物品已更新!"); + ccLang.get().addDefault("MESSAGE.ITEM_DELETED", "物品已刪除!"); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED", "變更已套用。新數值:"); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED_2", "變更已套用"); + ccLang.get().addDefault("MESSAGE.RECOMMEND_APPLIED", "已套用建議值。此值基於 {playerNum} 名玩家,可於設定檔中更改。"); + ccLang.get().addDefault("MESSAGE.TRANSFER_SUCCESS", "匯款成功"); + ccLang.get().addDefault("MESSAGE.PURCHASE_REJECTED", "商店已擁有太多此物品,暫時無法販售。"); + ccLang.get().addDefault("MESSAGE.CLICK_YOUR_ITEM_START_PAGE", "點擊物品查看哪間商店提供最優惠的交易。\n左鍵:購買 右鍵:販售"); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_BUY", "已跳轉至 {item} 最低購買價的商店。"); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_SELL", "已跳轉至 {item} 最高販售價的商店。"); + ccLang.get().addDefault("MESSAGE.SHOP_IS_CLOSED_BY_ADMIN", "此商店已由伺服器管理員關閉。"); + 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("MESSAGE.Q_SEARCH_FAIL_CURRENCY", "此物品正在使用多種貨幣進行交易。"); + + ccLang.get().addDefault("HELP.TITLE", "§f說明:{command} --------------------"); + ccLang.get().addDefault("HELP.SHOP", "開啟商店"); + ccLang.get().addDefault("HELP.CMD", "切換是否顯示指令說明"); + ccLang.get().addDefault("HELP.CREATE_SHOP", "建立新商店。"); + ccLang.get().addDefault("HELP.CREATE_SHOP_2", "權限設定(可日後更改):\n true:需 dshop.user.shop.shopName 權限\n false:所有人可存取(預設)\n 自訂值:需指定權限"); + ccLang.get().addDefault("HELP.DELETE_SHOP", "刪除現有商店。"); + ccLang.get().addDefault("HELP.SHOP_ADD_HAND", "將手上物品新增至商店。"); + ccLang.get().addDefault("HELP.SHOP_ADD_ITEM", "新增物品至商店。"); + ccLang.get().addDefault("HELP.SHOP_EDIT", "編輯商店內的物品。"); + ccLang.get().addDefault("HELP.PRICE", "§7價格計算公式:中位數 * 價值 ÷ 庫存"); + ccLang.get().addDefault("HELP.INF_STATIC", "§7中位數 < 0 為固定價格,庫存 < 0 為無限庫存"); + ccLang.get().addDefault("HELP.EDIT_ALL", "一次修改商店內所有物品。"); + ccLang.get().addDefault("HELP.RELOAD", "重新載入插件。"); + ccLang.get().addDefault("HELP.RELOADED", "插件已重新載入"); + ccLang.get().addDefault("HELP.USAGE", "使用方式"); + ccLang.get().addDefault("HELP.ITEM_ALREADY_EXIST", "§7§o{item} 已在販售中。\n {info}\n 輸入指令可修改其數值。"); + ccLang.get().addDefault("HELP.ITEM_INFO", "§7§o{item} 目前設定:\n {info}"); + ccLang.get().addDefault("HELP.REMOVE_ITEM", "§f輸入參數為 0 即§4刪除§f該物品。"); + ccLang.get().addDefault("HELP.QSELL", "§f快速販售物品。"); + ccLang.get().addDefault("HELP.DELETE_OLD_USER", "刪除長期未登入的使用者資料"); + ccLang.get().addDefault("HELP.ACCOUNT", "設定商店帳戶餘額,-1 為無上限"); + ccLang.get().addDefault("HELP.SET_TO_REC_ALL", "§c重設§e 商店內所有物品為建議值"); + ccLang.get().addDefault("HELP.SHOP_ENABLE", "啟用或停用商店"); + ccLang.get().addDefault("HELP.ITEMINFO_USAGE", "§f拿著物品可查看詳細資訊。"); + ccLang.get().addDefault("HELP.ITEMINFO_REALNAME", "§7實際名稱:§3{item_realname}"); + ccLang.get().addDefault("HELP.ITEMINFO_SIGN_NAME", "§7告示牌名稱:§3{item_signname}"); + + ccLang.get().addDefault("ERR.NO_USER_ID", "§6找不到玩家 UUID。無法使用商店。"); + ccLang.get().addDefault("ERR.ITEM_NOT_EXIST", "商店中沒有此物品。"); + ccLang.get().addDefault("ERR.ITEM_FORBIDDEN", "此為禁用物品。"); + ccLang.get().addDefault("ERR.NO_PERMISSION", "§e你沒有權限。"); + ccLang.get().addDefault("ERR.WRONG_USAGE", "指令使用方式錯誤。"); + ccLang.get().addDefault("ERR.NO_EMPTY_SLOT", "商店中沒有空位。"); + ccLang.get().addDefault("ERR.WRONG_DATATYPE", "無效的參數類型"); + ccLang.get().addDefault("ERR.VALUE_ZERO", "參數值必須大於 0。"); + ccLang.get().addDefault("ERR.WRONG_ITEM_NAME", "無效的物品名稱。"); + ccLang.get().addDefault("ERR.HAND_EMPTY", "請手持物品。"); + ccLang.get().addDefault("ERR.HAND_EMPTY2", "§c§o你必須手持物品!"); + ccLang.get().addDefault("ERR.SHOP_NOT_FOUND", "§f找不到該商店。"); + ccLang.get().addDefault("ERR.SHOP_EXIST", "此商店名稱已存在。"); + ccLang.get().addDefault("ERR.SHOP_NOT_EXIST", "找不到指定商店。"); + ccLang.get().addDefault("ERR.SIGN_SHOP_REMOTE_ACCESS", "此商店僅能透過告示牌使用。"); + ccLang.get().addDefault("ERR.LOCAL_SHOP_REMOTE_ACCESS", "此商店需親訪現場。"); + ccLang.get().addDefault("ERR.MAX_LOWER_THAN_MIN", "最大價格必須高於最小價格。"); + 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", "找不到 PlayerPoints 插件。"); + ccLang.get().addDefault("ERR.SHOP_HAS_INF_BAL", "{shop} 是無限餘額商店。"); + ccLang.get().addDefault("ERR.SHOP_DIFF_CURRENCY", "兩間商店使用不同貨幣。"); + ccLang.get().addDefault("ERR.PLAYER_NOT_EXIST", "找不到該玩家。"); + ccLang.get().addDefault("ERR.SHOP_LINK_FAIL", "兩間商店必須有一間為實體帳戶。"); + ccLang.get().addDefault("ERR.SHOP_LINK_TARGET_ERR", "目標商店必須是實體帳戶。"); + ccLang.get().addDefault("ERR.NESTED_STRUCTURE", "禁止巢狀結構。(例如 aa-bb、bb-cc)"); + ccLang.get().addDefault("ERR.CREATIVE", "§e創造模式中不可使用此指令。你沒有權限。"); + ccLang.get().addDefault("ERR.FILE_CREATE_FAIL", "§e檔案建立失敗"); + ccLang.get().addDefault("ERR.INVALID_TRANSACTION", "此交易已無效。若問題持續,請聯繫伺服器管理員。"); + ccLang.get().addDefault("ERR.SIGN_WALL", "告示牌必須放置於牆上。"); + ccLang.get().addDefault("ERR.SHOP_NULL", "§e商店名稱不能為空。"); + ccLang.get().addDefault("ERR.ITEMINFO_HAND_EMPTY", "你必須手持物品。"); + ccLang.get().addDefault("ERR.SIGN_ITEM_INVALID", "無效的物品。請使用 /ds iteminfo 查詢名稱。"); + ccLang.get().addDefault("ERR.SIGN_ITEM_NOT_FOR_SALE", "請先將物品新增至商店,才能放置告示牌。"); + ccLang.get().addDefault("MESSAGE.SIGN_SHOP_CREATED", "§a已建立告示牌商店!"); + + ccLang.get().addDefault("ON", "開啟"); + ccLang.get().addDefault("OFF", "關閉"); + ccLang.get().addDefault("SET", "設定"); + ccLang.get().addDefault("UNSET", "取消設定"); + ccLang.get().addDefault("NULL", "空值"); + ccLang.get().addDefault("NULL(OPEN)", "無(對所有人開放)"); + ccLang.get().addDefault("CUR_STATE", "當前狀態"); + ccLang.get().addDefault("CLICK", "點擊"); + ccLang.get().addDefault("LMB", "左鍵"); + ccLang.get().addDefault("RMB", "右鍵"); + ccLang.get().addDefault("CLOSE", "§f關閉"); + ccLang.get().addDefault("CLOSE_LORE", "§f§n點擊:關閉"); + + ccLang.get().addDefault("EXP_POINTS", "經驗值 (EXP)"); + ccLang.get().addDefault("JOB_POINTS", "職業點數 (Job Points)"); + ccLang.get().addDefault("PLAYER_POINTS", "玩家點數 (Player Points)"); + + ccLang.get().options().copyDefaults(true); + ccLang.save(); + } + + private static void en_US() + { + ccLang.setup("Lang_V3_en-US", null); + + ccLang.get().addDefault("START_PAGE.EDITOR_TITLE", "§3Edit icon"); + ccLang.get().addDefault("START_PAGE.EDIT_NAME", "§fRename"); + ccLang.get().addDefault("START_PAGE.EDIT_LORE", "§fChange lore"); + ccLang.get().addDefault("START_PAGE.EDIT_ICON", "§fChange icon"); + ccLang.get().addDefault("START_PAGE.EDIT_ACTION", "§fChange command"); + ccLang.get().addDefault("START_PAGE.SHOP_SHORTCUT", "§fCreate shop button"); + ccLang.get().addDefault("START_PAGE.CREATE_DECO", "§fCreate decorative button"); + ccLang.get().addDefault("START_PAGE.ENTER_SHOP_NAME", "Please enter shop name"); + ccLang.get().addDefault("START_PAGE.DEFAULT_SHOP_LORE", "§f§nClick: go to shop"); + ccLang.get().addDefault("START_PAGE.ITEM_MOVE_LORE", "§eRMB: Move"); + ccLang.get().addDefault("START_PAGE.ITEM_COPY_LORE", "§eRMB: Copy"); + ccLang.get().addDefault("START_PAGE.ITEM_REMOVE_LORE", "§eShift LMB: Remove"); + ccLang.get().addDefault("START_PAGE.ITEM_EDIT_LORE", "§eShift RMB: Edit"); + ccLang.get().addDefault("START_PAGE.REMOVE", "§fRemove"); + ccLang.get().addDefault("START_PAGE.REMOVE_LORE", "§fRemove this button from the start page."); + ccLang.get().addDefault("START_PAGE.ENTER_NAME", "Enter a new name for the button."); + ccLang.get().addDefault("START_PAGE.ENTER_LORE", "Enter a new description for the button."); + ccLang.get().addDefault("START_PAGE.ENTER_ICON", "Enter the name of the item to be used as the icon for the button. (English, case insensitive)"); + ccLang.get().addDefault("START_PAGE.ENTER_ACTION", "Enter the command without '/'. This command is executed when the button is pressed."); + ccLang.get().addDefault("START_PAGE.ENTER_COLOR", "Enter a color for the decorative button. (English)"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST_TITLE", "§3Shop List"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); + ccLang.get().addDefault("START_PAGE.SHOP_LIST.PAGE_LORE", "§eLMB: Previous page\n§eRMB: Next page"); + + ccLang.get().addDefault("COLOR_PICKER_TITLE", "§3Color Picker"); + + ccLang.get().addDefault("SHOP.TRADE_LORE", "§f§nClick: Trade"); + ccLang.get().addDefault("SHOP.BUY_PRICE", "§fBuy: {num}"); + ccLang.get().addDefault("SHOP.SELL_PRICE", "§fSell: {num}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED", "§fBuy: §8§m{num}§r §a{num2}"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED", "§fSell: §8§m{num}§r §c{num2}"); + ccLang.get().addDefault("SHOP.BUY_PRICE_EXP", "§fBuy: {num}Exp"); + ccLang.get().addDefault("SHOP.SELL_PRICE_EXP", "§fSell: {num}Exp"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_EXP", "§fBuy: §8§m{num}Exp§r §a{num2}Exp"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_EXP", "§fSell: §8§m{num}Exp§r §c{num2}Exp"); + ccLang.get().addDefault("SHOP.BUY_PRICE_PP", "§fBuy: {num}PP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_PP", "§fSell: {num}PP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_PP", "§fBuy: §8§m{num}PP§r §a{num2}PP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_PP", "§fSell: §8§m{num}PP§r §c{num2}PP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_JP", "§fBuy: {num}JP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_JP", "§fSell: {num}JP"); + ccLang.get().addDefault("SHOP.BUY_PRICE_DISCOUNTED_JP", "§fBuy: §8§m{num}JP§r §a{num2}JP"); + ccLang.get().addDefault("SHOP.SELL_PRICE_DISCOUNTED_JP", "§fSell: §8§m{num}JP§r §c{num2}JP"); + ccLang.get().addDefault("SHOP.STOCK", "§8Stock: {num}"); + ccLang.get().addDefault("SHOP.STOCK_2", "§8Stock: {stock}/{max_stock}"); + ccLang.get().addDefault("SHOP.INF_STOCK", "§8Infinite"); + ccLang.get().addDefault("SHOP.STATIC_PRICE", "§8[Fixed price]"); + ccLang.get().addDefault("SHOP.STACKS", "§8{num} Stacks"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_LORE", "§eRMB: Move"); + ccLang.get().addDefault("SHOP.ITEM_COPY_LORE", "§eRMB: Copy"); + ccLang.get().addDefault("SHOP.ITEM_EDIT_LORE", "§eShiftRMB: Edit"); + ccLang.get().addDefault("SHOP.DECO_DELETE_LORE", "§eShiftRMB: Remove"); + ccLang.get().addDefault("SHOP.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); + ccLang.get().addDefault("SHOP.PAGE_LORE_V2", "§f§nLMB: Previous page\n§f§nRMB: Next page\n§7Clicking on your item will\n§7take you to the page where\n§7that item is located."); + ccLang.get().addDefault("SHOP.GO_TO_PAGE_EDITOR", "§eShift RMB: Page Editor"); + ccLang.get().addDefault("SHOP.ITEM_MOVE_SELECTED", "Item selected. Right-click on an empty field to move it."); + ccLang.get().addDefault("SHOP.PERMISSION", "§fPermission:"); + ccLang.get().addDefault("SHOP.PERMISSION_ITEM", "§7 - {permission}"); + ccLang.get().addDefault("SHOP.FLAGS", "§eFlag:"); + ccLang.get().addDefault("SHOP.FLAGS_ITEM", "§e - {flag}"); + ccLang.get().addDefault("SHOP.SHOP_BAL_INF", "§fUnlimited"); + ccLang.get().addDefault("SHOP.SHOP_BAL", "§fShop account balance"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION", "§fShop location: x {x}, y {y}, z {z}"); + ccLang.get().addDefault("SHOP.SHOP_LOCATION_B", "§fShop location: "); + ccLang.get().addDefault("SHOP.SHOP_INFO_DASH", "§7 - "); + ccLang.get().addDefault("SHOP.DISABLED", "§cDisabled§8|§f"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA", "INCOMPLETE DATA"); + ccLang.get().addDefault("SHOP.INCOMPLETE_DATA_Lore", "This item is not visible\nto non-op users.\nIndex: "); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_BUY", "§aPurchase limit: {num}left"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_SELL", "§aSales limit: {num}left"); + ccLang.get().addDefault("SHOP.TRADE_LIMIT_TIMER", "§aNext reset: {time}"); + ccLang.get().addDefault("SHOP.CLICK_TO_ADD", "§eClick: Add"); + + ccLang.get().addDefault("SHOP_SETTING_TITLE", "§3Shop Settings"); + ccLang.get().addDefault("SHOP_SETTING.LOG_TOGGLE_LORE", "§eRMB: Log Viewer"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_CONSOLE", "§fPrint log to console"); + ccLang.get().addDefault("SHOP_SETTING.LOG_PRINT_ADMIN", "§fPrint log to admin"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE", "§fMax page"); + ccLang.get().addDefault("SHOP_SETTING.MAX_PAGE_LORE", "§fSets the maximum page for the shop."); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND", "§fBackground color"); + ccLang.get().addDefault("SHOP_SETTING.BACKGROUND_LORE", "§eClick: Change color"); + ccLang.get().addDefault("SHOP_SETTING.L_R_SHIFT", "§eLMB: -1 RMB: +1 Shift: x5"); + ccLang.get().addDefault("SHOP_SETTING.FLAG", "§fFlag"); + ccLang.get().addDefault("SHOP_SETTING.SHOP_SETTINGS_LORE", "§eRMB: Shop Settings"); + ccLang.get().addDefault("SHOP_SETTING.SIGN_SHOP_LORE", "§fOnly accessible via sign."); + 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.SELECTED", "§2Selected"); + ccLang.get().addDefault("SHOP_SETTING.CURRENCY", "§fCurrency Type: "); + ccLang.get().addDefault("SHOP_SETTING.VAULT_LORE", "§fThis is the default."); + ccLang.get().addDefault("SHOP_SETTING.EXP_LORE", "§fTrade with the player's experience points."); + 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."); + ccLang.get().addDefault("SHOP_SETTING.HIDE_SHOP_BALANCE", "§fHide shop account balance."); + ccLang.get().addDefault("SHOP_SETTING.SHOW_MAX_STOCK", "§fShow max stock."); + ccLang.get().addDefault("SHOP_SETTING.HIDDEN_IN_COMMAND", "§fDon't show this store\n§fin command autocomplete."); + ccLang.get().addDefault("SHOP_SETTING.INTEGER_ONLY", "§fThe purchase price will be rounded up.\n§fThe sale price will be rounded down."); + ccLang.get().addDefault("SHOP_SETTING.PERMISSION", "§fPermission"); + ccLang.get().addDefault("SHOP_SETTING.STATE", "§fState"); + ccLang.get().addDefault("SHOP_SETTING.STATE_ENABLE", "§aEnable"); + ccLang.get().addDefault("SHOP_SETTING.STATE_DISABLE", "§cDisable"); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR", "§fRotation: "); + ccLang.get().addDefault("SHOP_SETTING.ROTATION_EDITOR_LORE", "§eClick: Rotation editor"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE", "§fCommand"); + ccLang.get().addDefault("SHOP_SETTING.COMMAND_TOGGLE_LORE", "§fExecutes server commands\n§fwhen a store transaction occurs."); + 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_LORE3", "§eShift RMB: Delete last item"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI", "§fEdit Trade UI"); + ccLang.get().addDefault("SHOP_SETTING.TRADE_UI_LORE_2", "§eLMB: Edit\n§eRMB: Reset"); + + ccLang.get().addDefault("ROTATION_EDITOR_TITLE", "§3Rotation Editor"); + ccLang.get().addDefault("ROTATION_EDITOR.ENABLED", "§aEnabled"); + ccLang.get().addDefault("ROTATION_EDITOR.DISABLED", "§cDisabled"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_ENABLE", "§eLMB: Enable"); + ccLang.get().addDefault("ROTATION_EDITOR.CLICK_TO_DISABLE", "§eLMB: Disable"); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENT_TIME", "§fCurrent time: "); + ccLang.get().addDefault("ROTATION_EDITOR.CURRENTLY_IN_USE", "§a[Currently in use]"); + ccLang.get().addDefault("ROTATION_EDITOR.NEXT_ROTATION", "§fNext rotation: "); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD", "§fPeriod"); + ccLang.get().addDefault("ROTATION_EDITOR.PERIOD_LORE_V2", "§eLMB: -1h, RMB: +1h, Shift: x10"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER", "§fTimer adjustment"); + ccLang.get().addDefault("ROTATION_EDITOR.TIMER_LORE_V2", "§eLMB: -10m, RMB: +10m, Shift: x6"); + ccLang.get().addDefault("ROTATION_EDITOR.HOUR", "§f{0}hours"); + ccLang.get().addDefault("ROTATION_EDITOR.UNSAVED_CHANGES", "§c§oUnsaved changes"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES", "§fApply changes"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_CHANGES_LORE", "§eLMB: Save changes\n§eRMB: Reset Changes"); + ccLang.get().addDefault("ROTATION_EDITOR.APPLY_ROTATION", "§eLMB: Apply now"); + ccLang.get().addDefault("ROTATION_EDITOR.OPEN", "§eLMB: Open"); + ccLang.get().addDefault("ROTATION_EDITOR.CREATE", "§eLMB: Create empty"); + ccLang.get().addDefault("ROTATION_EDITOR.COPY_AS_NEW", "§eRMB: Copy as new"); + ccLang.get().addDefault("ROTATION_EDITOR.DELETE", "§eShift RMB: §cDelete"); + ccLang.get().addDefault("ROTATION_EDITOR.REAPPLY", "§eShift LMB: Reapply"); + ccLang.get().addDefault("ROTATION_EDITOR.MOVE", "§eRMB: Move"); + + ccLang.get().addDefault("ITEM_SETTING_TITLE", "§3Item Settings"); + ccLang.get().addDefault("ITEM_SETTING.VALUE_BUY", "§fPurchase value: "); + ccLang.get().addDefault("ITEM_SETTING.VALUE_SELL", "§fSales value: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE", "§fBuy: "); + ccLang.get().addDefault("ITEM_SETTING.SELL_PRICE", "§fSell: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MIN", "§fMinimum price: "); + ccLang.get().addDefault("ITEM_SETTING.PRICE_MAX", "§fMaximum price: "); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN", "§fMedian: "); + ccLang.get().addDefault("ITEM_SETTING.STOCK", "§fStock: "); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK", "§fMax stock: "); + ccLang.get().addDefault("ITEM_SETTING.MAX_STOCK_LORE", "§fIf the stock exceeds this,\n§fthe shop will refuse to purchase."); + ccLang.get().addDefault("ITEM_SETTING.INF_STOCK", "Infinite stock"); + ccLang.get().addDefault("ITEM_SETTING.STATIC_PRICE", "Fixed price"); + ccLang.get().addDefault("ITEM_SETTING.UNLIMITED", "Unlimited"); + ccLang.get().addDefault("ITEM_SETTING.MEDIAN_HELP", "§fThe smaller the median,\n§fthe steeper the price change."); + ccLang.get().addDefault("ITEM_SETTING.TAX_IGNORED", "Sales tax settings are ignored."); + ccLang.get().addDefault("ITEM_SETTING.RECOMMEND", "§fApply recommended values"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT", "§fDiscount"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE", "§fDiscount rate: {num}%\n§eLMB: +10, RMB: -10"); + ccLang.get().addDefault("ITEM_SETTING.DISCOUNT_LORE_2", "§fDiscount rate: {num}%\n§eLMB: -10, RMB: +10"); + ccLang.get().addDefault("ITEM_SETTING.DONE", "§fDone"); + ccLang.get().addDefault("ITEM_SETTING.DONE_LORE", "§fDone!"); + ccLang.get().addDefault("ITEM_SETTING.ROUND_DOWN", "§fRound down"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_MEDIAN", "§fSet to median"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_STOCK", "§fSet to stock"); + ccLang.get().addDefault("ITEM_SETTING.SET_TO_VALUE", "§fSet to value"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE", "§fClose"); + ccLang.get().addDefault("ITEM_SETTING.CLOSE_LORE", "§f§nClick: Close"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE", "§cRemove"); + ccLang.get().addDefault("ITEM_SETTING.REMOVE_LORE", "§fRemove this item from the shop."); + ccLang.get().addDefault("ITEM_SETTING.BUY", "§3§lBuy: {num}"); + ccLang.get().addDefault("ITEM_SETTING.SELL", "§3§lSell: {num}"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL", "§fSales limit per player"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_SELL_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY", "§fPurchase limit per player"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_BUY_LORE", "§f{num}\n§eLMB: -1, RMB: +1, Shift = x10"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL", "§fTrading volume limit reset cycle"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_INTERVAL_LORE", "§fInterval: {interval}\n§fNext reset: {time}\n§eLMB: -1h, RMB: +1h, Shift = x12"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER", "§fAdjust Timer"); + ccLang.get().addDefault("ITEM_SETTING.TRADE_LIMIT_TIMER_LORE", "§f{num}\n§fNext reset: {time}\n§eLMB: -1h, RMB: +1h, Shift = x12"); + + ccLang.get().addDefault("TRADE_TITLE", "§3Trade"); + ccLang.get().addDefault("TRADE.TOGGLE_SELLABLE", "§eClick: Sale only toggle"); + ccLang.get().addDefault("TRADE.TOGGLE_BUYABLE", "§eClick: Purchase Only Toggle"); + ccLang.get().addDefault("TRADE.BUY_ONLY_LORE", "§fThis item cannot be sold."); + ccLang.get().addDefault("TRADE.SELL_ONLY_LORE", "§fThis item cannot be purchased."); + ccLang.get().addDefault("TRADE.BALANCE", "§3My balance"); + ccLang.get().addDefault("TRADE.PRICE", "§fBuy: {num}"); + ccLang.get().addDefault("TRADE.SELL_PRICE", "§fSell: {num}"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED", "§fBuy: §8§m{num}§r §a{num2}"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED", "§fSell: §8§m{num}§r §c{num2}"); + ccLang.get().addDefault("TRADE.PRICE_EXP", "§fBuy: {num}EXP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_EXP", "§fSell: {num}EXP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_EXP", "§fBuy: §8§m{num}EXP§r §a{num2}EXP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_EXP", "§fSell: §8§m{num}EXP§r §c{num2}EXP"); + ccLang.get().addDefault("TRADE.PRICE_PP", "§fBuy: {num}PP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_PP", "§fSell: {num}PP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_PP", "§fBuy: §8§m{num}PP§r §a{num2}PP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_PP", "§fSell: §8§m{num}PP§r §c{num2}PP"); + ccLang.get().addDefault("TRADE.PRICE_JP", "§fBuy: {num}JP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_JP", "§fSell: {num}JP"); + ccLang.get().addDefault("TRADE.PRICE_DISCOUNTED_JP", "§fBuy: §8§m{num}JP§r §a{num2}JP"); + ccLang.get().addDefault("TRADE.SELL_PRICE_DISCOUNTED_JP", "§fSell: §8§m{num}JP§r §c{num2}JP"); + ccLang.get().addDefault("TRADE.BUY", "§cBuy"); + ccLang.get().addDefault("TRADE.SELL", "§2Sell"); + ccLang.get().addDefault("TRADE.STOCK", "§8Stock: "); + ccLang.get().addDefault("TRADE.STACKS", "§8{num} Stacks"); + ccLang.get().addDefault("TRADE.INF_STOCK", "§8Infinite"); + ccLang.get().addDefault("TRADE.SHOP_BAL_INF", "§fUnlimited"); + ccLang.get().addDefault("TRADE.SHOP_BAL", "§3Shop account balance \n§f{num}"); + ccLang.get().addDefault("TRADE.CLICK_TO_BUY", "§c§nClick: Buy {amount}"); + ccLang.get().addDefault("TRADE.CLICK_TO_SELL", "§2§nClick: Sell {amount}"); + ccLang.get().addDefault("TRADE.PURCHASE_LIMIT_PER_PLAYER", "§aPurchase limit: {num}left\n§aNext reset: {time}"); + ccLang.get().addDefault("TRADE.SALES_LIMIT_PER_PLAYER", "§aSales limit: {num}left\n§aNext reset: {time}"); + ccLang.get().addDefault("TRADE.QUANTITY_LORE", "§eShift RMB: Edit Quantity"); + ccLang.get().addDefault("TRADE.WAIT_FOR_INPUT", "Enter the quantity that will be displayed in the Trade UI.\nExample: 1,2,4,8,16,32,64"); + + ccLang.get().addDefault("PAGE_EDITOR_TITLE", "§3Page Editor"); + ccLang.get().addDefault("PAGE_EDITOR.PREV", "§f<<"); + ccLang.get().addDefault("PAGE_EDITOR.NEXT", "§f>>"); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SUCCESS", "§fThe page has been replaced."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_FAIL", "§fPage replacement failed."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_SWAP_SELECTED", "§fPage has been selected. Right-click on the other pages to be replaced."); + ccLang.get().addDefault("PAGE_EDITOR.PAGE_LORE_PREMIUM", "§eLMB: Open page\n§eRMB: Swap\n§eShift LMB: Insert\n§eShift RMB: Delete"); + ccLang.get().addDefault("PAGE_EDITOR.PRICE", "§fBuy: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.SELL_PRICE", "§fSell: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.STOCK", "§8Stock: {num}"); + ccLang.get().addDefault("PAGE_EDITOR.STACKS", "§8{num} Stakcs"); + ccLang.get().addDefault("PAGE_EDITOR.STATIC_PRICE", "§8[Fixed price]"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY", "§8(empty)"); + ccLang.get().addDefault("PAGE_EDITOR.EMPTY_SLOT_LORE", "§eLMB,RMB: Push\n§e+Shift: Pull"); + + ccLang.get().addDefault("LOG_VIEWER_TITLE", "§3Log Viewer"); + ccLang.get().addDefault("LOG_VIEWER.DATE", "§fDate: "); + ccLang.get().addDefault("LOG_VIEWER.TIME", "§fTime: "); + ccLang.get().addDefault("LOG_VIEWER.CURRENCY", "§fCurrency: "); + ccLang.get().addDefault("LOG_VIEWER.PRICE", "§fPrice: "); + ccLang.get().addDefault("LOG_VIEWER.EXPAND", "§fExpand"); + ccLang.get().addDefault("LOG_VIEWER.COLLAPSE", "§fCollapse"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_TITLE", "§f{curPage}/{maxPage} Page"); + ccLang.get().addDefault("LOG_VIEWER.PAGE_LORE", "§eLMB: Prev\n§eRMB: Next"); + ccLang.get().addDefault("LOG_VIEWER.FILE_LORE", "§eLMB: Open\n§eShift RMB: §cDelete"); + + ccLang.get().addDefault("LOG.LOG", "§fLog"); + ccLang.get().addDefault("LOG.CLEAR", "§fLog deleted"); + ccLang.get().addDefault("LOG.SAVE", "§fLog saved"); + ccLang.get().addDefault("LOG.DELETE", "§4Delete log"); + ccLang.get().addDefault("LOG.SELL", "§f{player} sells {amount} {item} to {shop}"); + ccLang.get().addDefault("LOG.BUY", "§f{player} buys {amount} {item} from {shop}"); + + ccLang.get().addDefault("STOCK_SIMULATOR_TITLE", "§3Stock Simulator"); + ccLang.get().addDefault("STOCK_SIMULATOR.CHANGE_SAMPLE_LORE", "§eLMB, RMB: Change Item"); + ccLang.get().addDefault("STOCK_SIMULATOR.SIMULATOR_BUTTON_LORE", "§eRMB: Simulator"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_TITLE", "§fRun"); + ccLang.get().addDefault("STOCK_SIMULATOR.RUN_LORE", "§eLMB: Run simulation\n§eRMB: Apply the settings to the shop\n§fItems are not affected."); + ccLang.get().addDefault("STOCK_SIMULATOR.REAL_TIME", "§a(real time)"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_S", "§aAfter {0} seconds"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_M", "§aAfter {0} minutes"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_H", "§aAfter {0} hours"); + ccLang.get().addDefault("STOCK_SIMULATOR.AFTER_D", "§aAfter {0} days"); + ccLang.get().addDefault("STOCK_SIMULATOR.L_R_SHIFT", "§eLMB: -1 RMB: +1 Shift: x5"); + ccLang.get().addDefault("STOCK_SIMULATOR.PRICE", "§fPurchase price: {num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.MEDIAN", "§fMedian: {num}"); + ccLang.get().addDefault("STOCK_SIMULATOR.STOCK", "§fStock: {num}"); + + ccLang.get().addDefault("PALETTE_TITLE", "§3Select item to sell"); + ccLang.get().addDefault("PALETTE_TITLE2", "§3Select item"); + ccLang.get().addDefault("PALETTE.LORE_PREMIUM", "§eLMB: Add\n§eShift LMB: Add after setting\n§eRMB: Add as decoration\n§eShift RMB: Search '{item}'"); + ccLang.get().addDefault("PALETTE.LORE2", "§eLMB: Select\n§eShift RMB: Search '{item}'"); + ccLang.get().addDefault("PALETTE.SEARCH", "§fSearch"); + ccLang.get().addDefault("PALETTE.ADD_ALL", "§fAdd all"); + ccLang.get().addDefault("PALETTE.ADD_ALL_LORE", "§eLMB: Add all\n§eShift LMB: Add all and apply recommended values"); + ccLang.get().addDefault("PALETTE.PAGE_TITLE", "§f{curPage}/{maxPage} page"); + ccLang.get().addDefault("PALETTE.PAGE_LORE", "§f§nLMB: Prev\n§f§nRMB: Next"); + ccLang.get().addDefault("PALETTE.FILTER_APPLIED", "§fFilter Applied : "); + ccLang.get().addDefault("PALETTE.FILTER_LORE", "§eLMB: Search\n§eRMB: Clear filter\n\n§7Example for finding \"BLUE_WOOL\":\n§7 b w\n§7 wool\n§7 blue wool"); + + ccLang.get().addDefault("QUICK_SELL_TITLE", "§3Quick Sell"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_TITLE", "§3§lQuick Sell Guide"); + ccLang.get().addDefault("QUICK_SELL.GUIDE_LORE", "§aLeft-click the item you want to sell.\n§aShift left click to sell all items of the same type.\n§aRight-click to go to the item shop."); + + ccLang.get().addDefault("ARROW.UP", "§a⬆"); + ccLang.get().addDefault("ARROW.DOWN", "§c⬇"); + ccLang.get().addDefault("ARROW.UP_2", "§c⬆"); + ccLang.get().addDefault("ARROW.DOWN_2", "§a⬇"); + + ccLang.get().addDefault("TIME.OPEN", "Open"); + ccLang.get().addDefault("TIME.CLOSE", "Close"); + ccLang.get().addDefault("TIME.OPEN_LORE", "§fSet opening time"); + ccLang.get().addDefault("TIME.CLOSE_LORE", "§fSet closing time"); + ccLang.get().addDefault("TIME.SHOPHOURS", "§fOpening hours"); + ccLang.get().addDefault("TIME.OPEN24", "Open 24 hours"); + ccLang.get().addDefault("TIME.SHOP_IS_CLOSED", "§fThe shop is closed. It opens at {time} o'clock. {curTime} o'clock now."); + ccLang.get().addDefault("TIME.SET_SHOPHOURS", "Set business hours"); + ccLang.get().addDefault("TIME.CUR", "§fCurrent time: {time}h"); + + ccLang.get().addDefault("STOCK_STABILIZING.SS", "§fStock stabilization"); + ccLang.get().addDefault("STOCK_STABILIZING.L_R_SHIFT", "§eLMB: -0.1 RMB: +0.1 Shift: x5"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_A", "§fn% of median"); + ccLang.get().addDefault("STOCK_STABILIZING.STRENGTH_LORE_B", "§fn% of the gap with median"); + + ccLang.get().addDefault("FLUCTUATION.FLUCTUATION", "§fStock fluctuation"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL", "§fInterval"); + ccLang.get().addDefault("FLUCTUATION.INTERVAL_LORE", "§f1h = 1000ticks = real time 50s"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH", "§fStrength"); + ccLang.get().addDefault("FLUCTUATION.STRENGTH_LORE", "§fn% of median"); + + ccLang.get().addDefault("TAX.SALES_TAX", "§fSales tax"); + ccLang.get().addDefault("TAX.USE_GLOBAL", "Use global settings ({tax}%)"); + ccLang.get().addDefault("TAX.USE_LOCAL", "Set separately"); + + ccLang.get().addDefault("MESSAGE.SEARCH_ITEM", "§fEnter the name of the item you are looking for."); + ccLang.get().addDefault("MESSAGE.SEARCH_CANCELED", "§fSearch Canceled."); + ccLang.get().addDefault("MESSAGE.INPUT_CANCELED", "§fInput canceled."); + ccLang.get().addDefault("MESSAGE.DELETE_CONFIRM", "§fAre you sure you want to delete the page? Enter 'delete' to delete."); + ccLang.get().addDefault("MESSAGE.CANT_DELETE_LAST_PAGE", "§fThe last remaining page cannot be deleted."); + ccLang.get().addDefault("MESSAGE.SHOP_BAL_LOW", "§fThe shop doesn't have enough money."); + ccLang.get().addDefault("MESSAGE.SHOP_CREATED", "§fShop created!"); + ccLang.get().addDefault("MESSAGE.SHOP_DELETED", "§fShop deleted!"); + ccLang.get().addDefault("MESSAGE.OUT_OF_STOCK", "§fOut of stock!"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS", "§fBought {item} x{amount} for {price}. Balance: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS", "§fSold {item} x{amount} for {price}. Balance: {bal}"); + ccLang.get().addDefault("MESSAGE.BUY_SUCCESS_EXP", "§fBought {item} x{amount} for {price}Exp Points. Balance: {bal}"); + ccLang.get().addDefault("MESSAGE.SELL_SUCCESS_EXP", "§fSold {item} x{amount} for {price}Exp Points. 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.NOT_ENOUGH_EXP_POINT", "§fNot enough Exp points. balance: {bal}"); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL", "§fThere are no items for sale."); + ccLang.get().addDefault("MESSAGE.NO_ITEM_TO_SELL_2", "§fThere are no items available 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!"); + ccLang.get().addDefault("MESSAGE.ITEM_ADDED", "Item added!"); + ccLang.get().addDefault("MESSAGE.ITEM_UPDATED", "Item updated!"); + ccLang.get().addDefault("MESSAGE.ITEM_DELETED", "Item deleted!"); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED", "Changes applied. New values:"); + ccLang.get().addDefault("MESSAGE.CHANGES_APPLIED_2", "Changes applied"); + ccLang.get().addDefault("MESSAGE.RECOMMEND_APPLIED", "Recommended value applied. It is based on {playerNum}players. You can change this value in the config file."); + ccLang.get().addDefault("MESSAGE.TRANSFER_SUCCESS", "Remittance completed"); + ccLang.get().addDefault("MESSAGE.PURCHASE_REJECTED", "There are too many of these items in the shop. Can't sell it now."); + ccLang.get().addDefault("MESSAGE.CLICK_YOUR_ITEM_START_PAGE", "Click on an item in your inventory to find the shop with the best deal.\nLMB: Buy RMB: Sell"); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_BUY", "Moved to the shop where you can buy {item} at the lowest price."); + ccLang.get().addDefault("MESSAGE.MOVE_TO_BEST_SHOP_SELL", "Moved to the shop where you can sell {item} at the highest price."); + ccLang.get().addDefault("MESSAGE.SHOP_IS_CLOSED_BY_ADMIN", "This shop is currently closed by the server administrator."); + 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("MESSAGE.Q_SEARCH_FAIL_CURRENCY", "This item is being traded in several currencies."); + + ccLang.get().addDefault("HELP.TITLE", "§fHelp: {command} --------------------"); + ccLang.get().addDefault("HELP.SHOP", "Open shop"); + ccLang.get().addDefault("HELP.CMD", "Toggle display of command help."); + ccLang.get().addDefault("HELP.CREATE_SHOP", "Create a new shop."); + ccLang.get().addDefault("HELP.CREATE_SHOP_2", "Permissions (can be changed later)\n true: dshop.user.shop.shopName\n false: Anyone can access (default)\n Arbitrary value: Requires permission"); + ccLang.get().addDefault("HELP.DELETE_SHOP", "Remove existing stores."); + ccLang.get().addDefault("HELP.SHOP_ADD_HAND", "Adds the item in hand to the shop."); + ccLang.get().addDefault("HELP.SHOP_ADD_ITEM", "Add item to the shop."); + ccLang.get().addDefault("HELP.SHOP_EDIT", "Edit item in the store."); + ccLang.get().addDefault("HELP.PRICE", "§7Price calculation formula: median*value/stock"); + ccLang.get().addDefault("HELP.INF_STATIC", "§7median<0 == Fixed price stock<0 == Infinite stock"); + ccLang.get().addDefault("HELP.EDIT_ALL", "Modify all items in the shop at once."); + ccLang.get().addDefault("HELP.RELOAD", "Reload the plugin."); + ccLang.get().addDefault("HELP.RELOADED", "Plugin reloaded"); + ccLang.get().addDefault("HELP.USAGE", "Usage"); + ccLang.get().addDefault("HELP.ITEM_ALREADY_EXIST", "§7§o{item} is already on sale.\n {info}\n Entering a command modifies the value."); + ccLang.get().addDefault("HELP.ITEM_INFO", "§7§o{item}'s current settings:\n {info}"); + ccLang.get().addDefault("HELP.REMOVE_ITEM", "§fEntering an argument of 0 will §4remove§f this item from the store."); + ccLang.get().addDefault("HELP.QSELL", "§fSell items quickly."); + ccLang.get().addDefault("HELP.DELETE_OLD_USER", "Delete long-term inactive user data"); + ccLang.get().addDefault("HELP.ACCOUNT", "Sets the account balance of the shop. -1 = unlimited"); + ccLang.get().addDefault("HELP.SET_TO_REC_ALL", "§cResets§e all item settings in the store to the recommended values."); + ccLang.get().addDefault("HELP.SHOP_ENABLE", "Enables or disables the shop."); + + ccLang.get().addDefault("ERR.NO_USER_ID", "§6Player uuid not found. Shop unavailable."); + ccLang.get().addDefault("ERR.ITEM_NOT_EXIST", "The item does not exist in the store."); + ccLang.get().addDefault("ERR.ITEM_FORBIDDEN", "This is a prohibited item."); + ccLang.get().addDefault("ERR.NO_PERMISSION", "§eYou do not have permission."); + ccLang.get().addDefault("ERR.WRONG_USAGE", "Incorrect command usage."); + ccLang.get().addDefault("ERR.NO_EMPTY_SLOT", "There is no empty space in the shop."); + ccLang.get().addDefault("ERR.WRONG_DATATYPE", "Invalid argument type"); + ccLang.get().addDefault("ERR.VALUE_ZERO", "The argument value must be greater than 0."); + ccLang.get().addDefault("ERR.WRONG_ITEM_NAME", "Invalid item name."); + ccLang.get().addDefault("ERR.HAND_EMPTY", "You must hold the item in your hand."); + ccLang.get().addDefault("ERR.HAND_EMPTY2", "§c§oYou must have the item in your hand!"); + ccLang.get().addDefault("ERR.SHOP_NOT_FOUND", "§fThe shop could not be found."); + ccLang.get().addDefault("ERR.SHOP_EXIST", "A store with that name already exists."); + ccLang.get().addDefault("ERR.SHOP_NOT_EXIST", "No shop with that name."); + ccLang.get().addDefault("ERR.SIGN_SHOP_REMOTE_ACCESS", "The shop is only accessible via sign."); + ccLang.get().addDefault("ERR.LOCAL_SHOP_REMOTE_ACCESS", "The shop can only be used by visiting it in person."); + ccLang.get().addDefault("ERR.MAX_LOWER_THAN_MIN", "The maximum price must be greater than the minimum price."); + 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."); + ccLang.get().addDefault("ERR.SHOP_LINK_FAIL", "Either store must be a real account."); + ccLang.get().addDefault("ERR.SHOP_LINK_TARGET_ERR", "The target store must have a real account."); + ccLang.get().addDefault("ERR.NESTED_STRUCTURE", "It is forbidden to build hierarchies. (ex. aa-bb, bb-cc)"); + ccLang.get().addDefault("ERR.CREATIVE", "§eYou cannot use this command in Creative mode. You do not have permission."); + ccLang.get().addDefault("ERR.FILE_CREATE_FAIL", "§eFile creation failed"); + ccLang.get().addDefault("ERR.INVALID_TRANSACTION", "This transaction is no longer valid. If this problem recurs, contact your server administrator"); + ccLang.get().addDefault("ERR.SIGN_WALL", "Sign must be placed on wall."); + + ccLang.get().addDefault("ERR.SHOP_NULL", "§eShop name cannot be null."); + ccLang.get().addDefault("ERR.ITEMINFO_HAND_EMPTY", "You need to hold an item."); + ccLang.get().addDefault("HELP.ITEMINFO_USAGE", "§fHold an item in your hand to learn about it."); + ccLang.get().addDefault("HELP.ITEMINFO_REALNAME", "§7Real name: §3{item_realname}"); + ccLang.get().addDefault("HELP.ITEMINFO_SIGN_NAME", "§7Sign name: §3{item_signname}"); + ccLang.get().addDefault("ERR.SIGN_ITEM_INVALID", "Invalid item. Use /ds iteminfo to find the name of the item on the sign."); + ccLang.get().addDefault("ERR.SIGN_ITEM_NOT_FOR_SALE", "First you must add the item in the shop and then use it on the sign."); + ccLang.get().addDefault("MESSAGE.SIGN_SHOP_CREATED", "§aSign Shop created!"); + + ccLang.get().addDefault("ON", "ON"); + ccLang.get().addDefault("OFF", "OFF"); + ccLang.get().addDefault("SET", "SET"); + ccLang.get().addDefault("UNSET", "UNSET"); + ccLang.get().addDefault("NULL", "Null"); + ccLang.get().addDefault("NULL(OPEN)", "None (open to all)"); + ccLang.get().addDefault("CUR_STATE", "Current Status"); + ccLang.get().addDefault("CLICK", "Click"); + ccLang.get().addDefault("LMB", "LMB"); + ccLang.get().addDefault("RMB", "RMB"); + ccLang.get().addDefault("CLOSE", "§fClose"); + ccLang.get().addDefault("CLOSE_LORE", "§f§nClick: Close"); + + ccLang.get().addDefault("EXP_POINTS", "Exp Points"); + ccLang.get().addDefault("JOB_POINTS", "Job Points"); + ccLang.get().addDefault("PLAYER_POINTS", "Player Points"); + + ccLang.get().options().copyDefaults(true); + ccLang.save(); + } + public static final Pattern HEX_PATTERN = Pattern.compile("(#[A-Fa-f0-9]{6})"); public static String t(Player player, String key) diff --git a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java index ee05100..9648320 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java @@ -574,11 +574,14 @@ else if (args.length == 5) } else if (args[0].equalsIgnoreCase("deleteOldUser")) { Help.showHelp("delete_old_user", (Player) sender, args); + } else { + Help.showHelp("main", (Player) sender, args); } return autoCompleteList; } - } catch (Exception e) + } + catch (Exception e) { return null; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ec84cd3..0bc8bfd 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -15,6 +15,57 @@ commands: sell: description: "Sell items" permissions: + dshop.admin.creative: + description: Allows users to use creative mode commands. + default: op + dshop.admin.remoteaccess: + description: Allows remote access to the shop. + default: op + dshop.admin.deleteOldUser: + description: Allows deletion of old user data. + default: op + dshop.admin.setdefaultshop: + description: Allows setting the default shop. + default: op + dshop.admin.settax: + description: Allows setting taxes for the shop. + default: op + dshop.admin.reload: + description: Allows reloading the plugin. + default: op + dshop.admin.createsign: + description: Allows creating shop signs. + default: op + dshop.admin.destroysign: + description: Allows destroying shop signs. + default: op + dshop.admin.createshop: + description: Allows creating a new shop. + default: op + dshop.admin.deleteshop: + description: Allows deleting a shop. + default: op + dshop.admin.mergeshop: + description: Allows merging shops. + default: op + dshop.admin.renameshop: + description: Allows renaming a shop. + default: op + dshop.admin.copyshop: + description: Allows copying a shop. + default: op + dshop.admin.shopedit: + description: Allows editing a shop. + default: op + dshop.admin.openshop: + description: Allows opening a shop. + default: op + dshop.admin.editall: + description: Allows editing all shops. + default: op + dshop.admin.iteminfo: + description: Allows viewing item information. + default: op dshop.use: description: Allows use of the /ds command default: true From 38142182adff2b93e812b0d015ebeaad7e6dbb6e Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Wed, 19 Nov 2025 02:18:43 +0800 Subject: [PATCH 3/6] Remove redundant last page handling in ItemPalette and update .gitignore --- .gitignore | 1 + src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java | 5 ----- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 737050f..8788a6e 100644 --- a/.gitignore +++ b/.gitignore @@ -118,3 +118,4 @@ local.properties # Typically, this file would be tracked if it contains build/dependency configurations: #.project +/server/ diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java index d1c8451..c2c1c76 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java @@ -392,10 +392,6 @@ private void MovePage(boolean isLeft, boolean isRight) return; DynaShopAPI.openItemPalette(player, uiSubType, shopName, shopSlotIndex, targetPage, this.search); - - if(uiType == UI_TYPE.Shop) { - lastPage.put(player.getUniqueId(), currentPage); - } } private void AddAll(boolean applyRecommend) @@ -447,7 +443,6 @@ private void AddAll(boolean applyRecommend) ShopUtil.addItemToShop(shopName, targetSlotIdx, temp); } } - DynaShopAPI.openShopGui(player, shopName, lastPage.getOrDefault(player.getUniqueId(), 1)); } private void OnClickSearch(boolean isLeft, boolean isRight) From a2d117a98768cee1b393bb057cd4b63ebf78ea76 Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Thu, 20 Nov 2025 00:23:10 +0800 Subject: [PATCH 4/6] Revert "Remove redundant last page handling in ItemPalette and update .gitignore" This reverts commit 38142182adff2b93e812b0d015ebeaad7e6dbb6e. --- .gitignore | 1 - src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8788a6e..737050f 100644 --- a/.gitignore +++ b/.gitignore @@ -118,4 +118,3 @@ local.properties # Typically, this file would be tracked if it contains build/dependency configurations: #.project -/server/ diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java index c2c1c76..d1c8451 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java @@ -392,6 +392,10 @@ private void MovePage(boolean isLeft, boolean isRight) return; DynaShopAPI.openItemPalette(player, uiSubType, shopName, shopSlotIndex, targetPage, this.search); + + if(uiType == UI_TYPE.Shop) { + lastPage.put(player.getUniqueId(), currentPage); + } } private void AddAll(boolean applyRecommend) @@ -443,6 +447,7 @@ private void AddAll(boolean applyRecommend) ShopUtil.addItemToShop(shopName, targetSlotIdx, temp); } } + DynaShopAPI.openShopGui(player, shopName, lastPage.getOrDefault(player.getUniqueId(), 1)); } private void OnClickSearch(boolean isLeft, boolean isRight) From 62e17f8bb2b0623fb0176cbdc2b5fa3fa04ad699 Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Thu, 20 Nov 2025 01:45:34 +0800 Subject: [PATCH 5/6] Add multilingual comments to improve code clarity Added translations (Korean, Chinese) for inline comments across various files to aid developers in understanding the code. No functionality changes were introduced. --- pom.xml | 2 +- .../java/me/sat7/dynamicshop/DynaShopAPI.java | 32 ++++---- .../java/me/sat7/dynamicshop/DynamicShop.java | 23 +++--- .../sat7/dynamicshop/commands/DeleteUser.java | 2 +- .../me/sat7/dynamicshop/commands/Help.java | 2 +- .../me/sat7/dynamicshop/commands/Reload.java | 2 +- .../me/sat7/dynamicshop/commands/Root.java | 58 ++++++++----- .../me/sat7/dynamicshop/commands/Shop.java | 10 +-- .../dynamicshop/commands/shop/Account.java | 32 ++++---- .../sat7/dynamicshop/commands/shop/Add.java | 12 +-- .../dynamicshop/commands/shop/AddHand.java | 14 ++-- .../sat7/dynamicshop/commands/shop/Edit.java | 6 +- .../dynamicshop/commands/shop/EditAll.java | 6 +- .../dynamicshop/commands/shop/SellBuy.java | 4 +- .../sat7/dynamicshop/constants/Constants.java | 6 +- .../dynamicshop/economyhook/JobsHook.java | 10 +-- .../me/sat7/dynamicshop/events/OnClick.java | 10 +-- .../sat7/dynamicshop/events/OnSignClick.java | 18 ++-- .../sat7/dynamicshop/files/CustomConfig.java | 2 +- .../me/sat7/dynamicshop/guis/ItemPalette.java | 4 +- .../sat7/dynamicshop/guis/ItemSettings.java | 18 ++-- .../me/sat7/dynamicshop/guis/ItemTrade.java | 16 ++-- .../me/sat7/dynamicshop/guis/PageEditor.java | 14 ++-- .../me/sat7/dynamicshop/guis/QuickSell.java | 2 +- .../sat7/dynamicshop/guis/RotationEditor.java | 26 +++--- .../java/me/sat7/dynamicshop/guis/Shop.java | 49 ++++++----- .../sat7/dynamicshop/guis/ShopSettings.java | 82 +++++++++---------- .../me/sat7/dynamicshop/guis/StartPage.java | 12 +-- .../dynamicshop/guis/StartPageSettings.java | 32 ++++---- .../sat7/dynamicshop/guis/StockSimulator.java | 28 +++---- .../me/sat7/dynamicshop/guis/UIManager.java | 4 +- .../sat7/dynamicshop/jobshook/JobsHook.java | 10 +-- .../me/sat7/dynamicshop/transactions/Buy.java | 20 ++--- .../sat7/dynamicshop/transactions/Calc.java | 14 ++-- .../sat7/dynamicshop/transactions/Sell.java | 64 +++++++-------- .../dynamicshop/utilities/ConfigUtil.java | 5 ++ .../sat7/dynamicshop/utilities/ItemsUtil.java | 6 +- .../sat7/dynamicshop/utilities/LogUtil.java | 8 +- .../sat7/dynamicshop/utilities/SoundUtil.java | 2 +- .../utilities/TabCompleteUtil.java | 2 +- .../sat7/dynamicshop/utilities/UserUtil.java | 10 +-- src/main/resources/config.yml | 3 +- 42 files changed, 357 insertions(+), 325 deletions(-) diff --git a/pom.xml b/pom.xml index f74598b..9669be0 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.sat7 DynamicShop - 3.120.3 + 3.120.4 jar DynamicShop diff --git a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java index 1626017..f7393bd 100644 --- a/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java +++ b/src/main/java/me/sat7/dynamicshop/DynaShopAPI.java @@ -36,7 +36,7 @@ public static boolean IsShopEnable(String shopName) return shopData.get().getBoolean("Options.enable", true); } - // 상점 UI생성 후 열기 + // 상점 UI생성 후 열기 (建立商店UI後開啟) public static void openShopGui(Player player, String shopName, int page) { if(!IsShopEnable(shopName)) @@ -60,7 +60,7 @@ public static void openShopGui(Player player, String shopName, int page) } } - // 상점 설정 화면 + // 상점 설정 화면 (商店設定畫面) public static void openShopSettingGui(Player player, String shopName) { ShopSettings uiClass = new ShopSettings(); @@ -68,7 +68,7 @@ public static void openShopSettingGui(Player player, String shopName) UIManager.Open(player, inventory, uiClass); } - // 상점 로테이트 편집기 + // 상점 로테이트 편집기 (商店輪換編輯器) public static void OpenRotationEditor(Player player, String shopName) { RotationEditor uiClass = new RotationEditor(); @@ -76,7 +76,7 @@ public static void OpenRotationEditor(Player player, String shopName) UIManager.Open(player, inventory, uiClass); } - // 거래화면 생성 및 열기 + // 거래화면 생성 및 열기 (建立並開啟交易畫面) public static void openItemTradeGui(Player player, String shopName, String tradeIdx) { if(!IsShopEnable(shopName)) @@ -94,7 +94,7 @@ public static void openItemTradeGui(Player player, String shopName, String trade } - // 아이탬 파렛트 생성 및 열기 + // 아이탬 파렛트 생성 및 열기 (建立並開啟物品調色盤) public static void openItemPalette(Player player, int uiSubType, String shopName, int targetSlot, int page, String search) { ItemPalette uiClass = new ItemPalette(); @@ -114,7 +114,7 @@ public static void openItemSettingGui(Player player, String shopName, int shopSl UIManager.Open(player, inventory, uiClass); } - // 페이지 에디터 열기 + // 페이지 에디터 열기 (開啟頁面編輯器) public static void openPageEditor(Player player, String shopName, int page) { PageEditor uiClass = new PageEditor(); @@ -122,7 +122,7 @@ public static void openPageEditor(Player player, String shopName, int page) UIManager.Open(player, inventory, uiClass); } - // 로그뷰어 열기 + // 로그뷰어 열기 (開啟日誌檢視器) public static void openLogViewer(Player player, String shopName) { LogViewer uiClass = new LogViewer(); @@ -130,7 +130,7 @@ public static void openLogViewer(Player player, String shopName) UIManager.Open(player, inventory, uiClass); } - // 재고 시뮬레이터 열기 + // 재고 시뮬레이터 열기 (開啟庫存模擬器) public static void openStockSimulator(Player player, String shopName) { StockSimulator uiClass = new StockSimulator(); @@ -138,7 +138,7 @@ public static void openStockSimulator(Player player, String shopName) UIManager.Open(player, inventory, uiClass); } - // 스타트 페이지 + // 스타트 페이지 (起始頁) public static void openStartPage(Player player) { StartPage uiClass = new StartPage(); @@ -146,7 +146,7 @@ public static void openStartPage(Player player) UIManager.Open(player, inventory, uiClass); } - // 상점 목록창 + // 상점 목록창 (商店列表視窗) public static void openShopListUI(Player player, int page, int slotIndex) { ShopList uiClass = new ShopList(); @@ -154,7 +154,7 @@ public static void openShopListUI(Player player, int page, int slotIndex) UIManager.Open(player, inventory, uiClass); } - // 컬러 픽커 + // 컬러 픽커 (顏色選擇器) public static void openColorPicker(Player player, int slotIndex) { ColorPicker uiClass = new ColorPicker(); @@ -162,7 +162,7 @@ public static void openColorPicker(Player player, int slotIndex) UIManager.Open(player, inventory, uiClass); } - // 퀵셀 창 + // 퀵셀 창 (快速銷售視窗) public static void openQuickSellGUI(Player player) { QuickSell uiClass = new QuickSell(); @@ -170,13 +170,13 @@ public static void openQuickSellGUI(Player player) UIManager.Open(player, inventory, uiClass); } - // 유저 데이터를 다시 만들고 만들어졌는지 확인함. + // 유저 데이터를 다시 만들고 만들어졌는지 확인함. (重新建立使用者資料並確認是否已建立) public static boolean recreateUserData(Player player) { return UserUtil.RecreateUserData(player); } - // 스타트페이지 셋팅창 + // 스타트페이지 셋팅창 (起始頁設定視窗) public static void openStartPageSettingGui(Player player, int slotIndex) { StartPageSettings uiClass = new StartPageSettings(); @@ -245,10 +245,10 @@ public static ArrayList getShopItems(@NonNull String shopName) if (!data.get().contains(s + ".value")) { - continue; // 장식용임 + continue; // 장식용임 (裝飾用) } - String itemName = data.get().getString(s + ".mat"); // 메테리얼 + String itemName = data.get().getString(s + ".mat"); // 메테리얼 (材料) try { Material mat = Material.getMaterial(itemName); diff --git a/src/main/java/me/sat7/dynamicshop/DynamicShop.java b/src/main/java/me/sat7/dynamicshop/DynamicShop.java index 86a975b..b7d4913 100644 --- a/src/main/java/me/sat7/dynamicshop/DynamicShop.java +++ b/src/main/java/me/sat7/dynamicshop/DynamicShop.java @@ -42,7 +42,7 @@ public final class DynamicShop extends JavaPlugin implements Listener { - private static Economy econ = null; // 볼트에 물려있는 이코노미 + private static Economy econ = null; // 볼트에 물려있는 이코노미 (與Vault掛鉤的經濟系統) public static Economy getEconomy() { return econ; @@ -203,14 +203,14 @@ private void Init() RotationUtil.RestartAllRotationTask(); - // 완료 + // 완료 (完成) console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + " Enabled! :)"); CheckUpdate(); InitBstats(); } - // 볼트 이코노미 초기화 + // 볼트 이코노미 초기화 (Vault經濟系統初始化) private void SetupVault() { if (getServer().getPluginManager().getPlugin("Vault") == null) @@ -380,8 +380,8 @@ public void PeriodicRepetitiveTask() periodicRepetitiveTask.cancel(); } - // 1000틱 = 50초 = 마인크래프트 1시간 - // 20틱 = 현실시간 1초 + // 1000틱 = 50초 = 마인크래프트 1시간 (1000 tick = 50秒 = Minecraft 1小時) + // 20틱 = 현실시간 1초 (20 tick = 現實時間 1秒) periodicRepetitiveTask = Bukkit.getScheduler().runTaskTimer(DynamicShop.plugin, this::RepeatAction, 20, 20); } @@ -394,7 +394,7 @@ private void RepeatAction() //String time = sdf.format(System.currentTimeMillis()); //console.sendMessage(time + " / " + repeatTaskCount); - if (repeatTaskCount == 25) // 25초 = 500틱 = 마인크래프트 30분 + if (repeatTaskCount == 25) // 25초 = 500틱 = 마인크래프트 30분 (25秒 = 500 tick = Minecraft 30分鐘) { ShopUtil.randomChange(new Random()); repeatTaskCount = 0; @@ -458,12 +458,12 @@ private void hookIntoPlayerPoints() private void initCommands() { - // 명령어 등록 (개별 클레스로 되어있는것들) + // 명령어 등록 (개별 클레스로 되어있는것들) (指令註冊(分別在不同的類別中)) getCommand("DynamicShop").setExecutor(new Root()); getCommand("shop").setExecutor(new Optional()); getCommand("sell").setExecutor(new Sell()); - // 자동완성 + // 자동완성 (自動完成) getCommand("DynamicShop").setTabCompleter(this); getCommand("shop").setTabCompleter(this); getCommand("sell").setTabCompleter(this); @@ -484,7 +484,7 @@ private void registerEvents() private void makeFolders() { File shopFolder = new File(getDataFolder(), "Shop"); - shopFolder.mkdir(); // new 하고 같은줄에서 바로 하면 폴더 안만들어짐. + shopFolder.mkdir(); // new 하고 같은줄에서 바로 하면 폴더 안만들어짐. (如果在new的同一行直接執行,資料夾不會建立) File rotationFolder = new File(getDataFolder(), "Rotation"); rotationFolder.mkdir(); @@ -498,8 +498,9 @@ private void InitConfig() UserUtil.Init(); ShopUtil.Reload(); ConfigUtil.Load(); + DynamicShop.DEBUG_MODE = ConfigUtil.GetDebugMode(); - LangUtil.setupLangFile(ConfigUtil.GetLanguage()); // ConfigUtil.Load() 보다 밑에 있어야함. + LangUtil.setupLangFile(ConfigUtil.GetLanguage()); // ConfigUtil.Load() 보다 밑에 있어야함. (必須在 ConfigUtil.Load() 之後) LayoutUtil.Setup(); StartPage.setupStartPageFile(); @@ -518,7 +519,7 @@ private void setupSignFile() ccSign.save(); } - // 명령어 자동완성 + // 명령어 자동완성 (指令自動完成) @Override public List onTabComplete(CommandSender sender, Command cmd, String commandLabel, String[] args) { diff --git a/src/main/java/me/sat7/dynamicshop/commands/DeleteUser.java b/src/main/java/me/sat7/dynamicshop/commands/DeleteUser.java index cf1cb90..3e82f71 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/DeleteUser.java +++ b/src/main/java/me/sat7/dynamicshop/commands/DeleteUser.java @@ -62,7 +62,7 @@ public void RunCMD(String[] args, CommandSender sender) if (lastJoinLong == 0) continue; - // 마지막으로 접속한지 입력한 일보다 더 지남. + // 마지막으로 접속한지 입력한 일보다 더 지남. (最後上線時間已超過輸入的天數) long dayPassed = currentTime - lastJoinLong; if (dayPassed > target) { diff --git a/src/main/java/me/sat7/dynamicshop/commands/Help.java b/src/main/java/me/sat7/dynamicshop/commands/Help.java index b3b9059..2ab5291 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Help.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Help.java @@ -23,7 +23,7 @@ private Help() } - // 명령어 도움말 표시 + // 명령어 도움말 표시 (顯示指令說明) public static void showHelp(String helpcode, Player player, String[] args) { if (!UserUtil.ccUser.get().getBoolean(player.getUniqueId() + ".cmdHelp")) diff --git a/src/main/java/me/sat7/dynamicshop/commands/Reload.java b/src/main/java/me/sat7/dynamicshop/commands/Reload.java index 0e35da5..e862cca 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Reload.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Reload.java @@ -65,7 +65,7 @@ public void RunCMD(String[] args, CommandSender sender) QuickSell.quickSellGui.reload(); QuickSell.SetupQuickSellGUIFile(); - LangUtil.setupLangFile(ConfigUtil.GetLanguage()); // ConfigUtil.Load() 보다 밑에 있어야함. + LangUtil.setupLangFile(ConfigUtil.GetLanguage()); // ConfigUtil.Load() 보다 밑에 있어야함. (必須在 ConfigUtil.Load() 之後) RotationUtil.Reload(); diff --git a/src/main/java/me/sat7/dynamicshop/commands/Root.java b/src/main/java/me/sat7/dynamicshop/commands/Root.java index a7c8eb1..e7f6947 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Root.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Root.java @@ -18,6 +18,39 @@ public class Root implements CommandExecutor @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (args.length > 0) + { + if (args[0].equalsIgnoreCase("dbgToggle")) + { + if (sender instanceof Player && !sender.hasPermission(Constants.P_ADMIN_SHOP_EDIT)) { + sender.sendMessage(DynamicShop.dsPrefix((Player)sender) + t((Player)sender, "ERR.NO_PERMISSION")); + return true; + } + DynamicShop.DEBUG_MODE = !DynamicShop.DEBUG_MODE; + sender.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + "DebugMode " + DynamicShop.DEBUG_MODE); + return true; + } + else if (args[0].equalsIgnoreCase("dbgLog")) + { + if (sender instanceof Player && !sender.hasPermission(Constants.P_ADMIN_SHOP_EDIT)) { + sender.sendMessage(DynamicShop.dsPrefix((Player)sender) + t((Player)sender, "ERR.NO_PERMISSION")); + return true; + } + DynamicShop.DEBUG_LOG_ENABLED = !DynamicShop.DEBUG_LOG_ENABLED; + sender.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + "DebugLog " + DynamicShop.DEBUG_LOG_ENABLED); + return true; + } + else if (args[0].equalsIgnoreCase("dbg") && DynamicShop.DEBUG_MODE) + { + if (sender instanceof Player && !sender.hasPermission(Constants.P_ADMIN_SHOP_EDIT)) { + sender.sendMessage(DynamicShop.dsPrefix((Player)sender) + t((Player)sender, "ERR.NO_PERMISSION")); + return true; + } + DynamicShop.DebugLog(); + return true; + } + } + boolean senderIsPlayer = (sender instanceof Player); if(senderIsPlayer) { @@ -35,14 +68,14 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return true; } - // user.yml 에 player가 없으면 재생성 시도. 실패시 리턴. + // user.yml 에 player가 없으면 재생성 시도. 실패시 리턴. (如果 player 不在 user.yml 中,請嘗試重新建立。如果失敗,則返回。) if (!DynaShopAPI.recreateUserData(player)) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.NO_USER_ID")); return true; } - // 스타트페이지 + // 스타트페이지 (起始頁) if (args.length == 0) { DynaShopAPI.openStartPage(player); @@ -72,29 +105,12 @@ else if (args[0].equalsIgnoreCase("dummyUUID") && DynamicShop.DEBUG_MODE && play return true; } } - // 콘솔에서 실행했음. + // 콘솔에서 실행했음. (從控制台執行) else { if (args.length > 0) { - if (args[0].equalsIgnoreCase("dbgToggle")) - { - DynamicShop.DEBUG_MODE = !DynamicShop.DEBUG_MODE; - sender.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + "DebugMode " + DynamicShop.DEBUG_MODE); - return true; - } - else if (args[0].equalsIgnoreCase("dbgLog")) - { - DynamicShop.DEBUG_LOG_ENABLED = !DynamicShop.DEBUG_LOG_ENABLED; - sender.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + "DebugLog " + DynamicShop.DEBUG_LOG_ENABLED); - return true; - } - else if (args[0].equalsIgnoreCase("dbg") && DynamicShop.DEBUG_MODE) - { - DynamicShop.DebugLog(); - return true; - } - else if (args[0].equalsIgnoreCase("shop")) + if (args[0].equalsIgnoreCase("shop")) { Shop.shopCommand(args, sender); return true; diff --git a/src/main/java/me/sat7/dynamicshop/commands/Shop.java b/src/main/java/me/sat7/dynamicshop/commands/Shop.java index 6575874..80fc68c 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/Shop.java +++ b/src/main/java/me/sat7/dynamicshop/commands/Shop.java @@ -53,7 +53,7 @@ static void shopCommand(String[] args, CommandSender sender) String shopName = GetShopName(args); - // 그런 이름을 가진 상점이 있는지 확인 + // 그런 이름을 가진 상점이 있는지 확인 (檢查是否存在具有該名稱的商店) if (player != null && !ShopUtil.shopConfigFiles.containsKey(shopName)) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.SHOP_NOT_FOUND")); @@ -62,10 +62,10 @@ static void shopCommand(String[] args, CommandSender sender) CustomConfig shopData = ShopUtil.shopConfigFiles.get(shopName); - // 상점 UI 열기 + // 상점 UI 열기 (開啟商店UI) if (player != null && args.length <= 2) { - //권한 확인 + //권한 확인 (權限確認) String s = shopData.get().getString("Options.permission"); if (s != null && s.length() > 0) { @@ -76,7 +76,7 @@ static void shopCommand(String[] args, CommandSender sender) } } - // 플래그 확인 + // 플래그 확인 (旗標確認) ConfigurationSection shopConf = shopData.get().getConfigurationSection("Options"); if (shopConf.contains("flag.signshop")) { @@ -123,7 +123,7 @@ static void shopCommand(String[] args, CommandSender sender) DynaShopAPI.openShopGui(player, shopName, 1); } - // 그외 각종 상점관련 명령어 + // 그외 각종 상점관련 명령어 (其他各種商店相關指令) else if (args.length >= 3) { CMDManager.RunCMD(args[2].toLowerCase(), args, sender); 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 3fa6d80..3dfdff7 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Account.java @@ -72,19 +72,19 @@ public void RunCMD(String[] args, CommandSender sender) } break; case "linkto": - // 그런 상점(타깃) 없음 + // 그런 상점(타깃) 없음 (沒有這樣的商店(目標)) if (!ShopUtil.shopConfigFiles.containsKey(args[4])) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_NOT_FOUND")); return; } - // 타깃 상점이 연동계좌임 + // 타깃 상점이 연동계좌임 (目標商店是連結帳戶) if (targetShopData.get().contains("Options.Balance")) { try { - // temp 를 직접 사용하지는 않지만 의도적으로 넣은 코드임. 숫자가 아니면 건너뛰기 위함. + // temp 를 직접 사용하지는 않지만 의도적으로 넣은 코드임. 숫자가 아니면 건너뛰기 위함. (雖然沒有直接使用temp,但這是刻意加入的程式碼。目的是為了跳過非數字的情況。) Double temp = Double.parseDouble(targetShopData.get().getString("Options.Balance")); } catch (Exception e) { @@ -93,7 +93,7 @@ public void RunCMD(String[] args, CommandSender sender) } } - // 출발상점을 타깃으로 하는 상점이 있음 + // 출발상점을 타깃으로 하는 상점이 있음 (有以出發商店為目標的商店) for (CustomConfig tempShopData : ShopUtil.shopConfigFiles.values()) { String temp = tempShopData.get().getString("Options.Balance"); @@ -110,14 +110,14 @@ public void RunCMD(String[] args, CommandSender sender) } } - // 출발 상점과 도착 상점이 같음 + // 출발 상점과 도착 상점이 같음 (出發商店和到達商店相同) if (args[1].equals(args[4])) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_USAGE")); return; } - // 출발 상점과 도착 상점의 통화 유형이 다름 + // 출발 상점과 도착 상점의 통화 유형이 다름 (出發商店和到達商店的貨幣類型不同) if (!ShopUtil.GetCurrency(shopData).equals(ShopUtil.GetCurrency(targetShopData))) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_DIFF_CURRENCY")); @@ -129,7 +129,7 @@ public void RunCMD(String[] args, CommandSender sender) sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.CHANGES_APPLIED") + args[4]); break; case "transfer": - //[4] 대상 [5] 금액 + //[4] 대상 [5] 금액 ([4] 對象 [5] 金額) if (args.length < 6) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_USAGE")); @@ -137,7 +137,7 @@ public void RunCMD(String[] args, CommandSender sender) } double amount; - // 마지막 인자가 숫자가 아님 + // 마지막 인자가 숫자가 아님 (最後一個參數不是數字) try { amount = Double.parseDouble(args[5]); @@ -147,14 +147,14 @@ public void RunCMD(String[] args, CommandSender sender) return; } - // 출발 상점이 무한계좌임 + // 출발 상점이 무한계좌임 (出發商店是無限帳戶) if (!shopData.get().contains("Options.Balance")) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_HAS_INF_BAL").replace("{shop}", args[1])); return; } - // 출발 상점에 돈이 부족 + // 출발 상점에 돈이 부족 (出發商店金額不足) if (ShopUtil.getShopBalance(args[1]) < amount) { if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_JOBPOINT)) @@ -180,31 +180,31 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) return; } - // 다른 상점으로 송금 + // 다른 상점으로 송금 (匯款到其他商店) if (ShopUtil.shopConfigFiles.containsKey(args[4])) { - // 도착 상점이 무한계좌임 + // 도착 상점이 무한계좌임 (到達商店是無限帳戶) if (!targetShopData.get().contains("Options.Balance")) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_HAS_INF_BAL").replace("{shop}", args[4])); return; } - // 출발 상점과 도착 상점이 같음 + // 출발 상점과 도착 상점이 같음 (出發商店和到達商店相同) if (args[1].equals(args[4])) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.WRONG_USAGE")); return; } - // 출발 상점과 도착 상점의 통화 유형이 다름 + // 출발 상점과 도착 상점의 통화 유형이 다름 (出發商店和到達商店的貨幣類型不同) if (!ShopUtil.GetCurrency(shopData).equals(ShopUtil.GetCurrency(targetShopData))) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.SHOP_DIFF_CURRENCY")); return; } - // 송금. + // 송금. (匯款.) ShopUtil.addShopBalance(args[1], amount * -1); ShopUtil.addShopBalance(args[4], amount); @@ -213,7 +213,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.TRANSFER_SUCCESS")); } - // 플레이어에게 송금 + // 플레이어에게 송금 (匯款給玩家) else { try 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 2a96f3b..fb63221 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Add.java @@ -69,7 +69,7 @@ public void RunCMD(String[] args, CommandSender sender) median = Integer.parseInt(args[7]); stock = Integer.parseInt(args[8]); - // 유효성 검사 + // 유효성 검사 (有效性檢查) if (valueMax > 0 && valueMin > 0 && valueMin >= valueMax) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.MAX_LOWER_THAN_MIN")); @@ -98,14 +98,14 @@ public void RunCMD(String[] args, CommandSender sender) return; } - // 금지품목 + // 금지품목 (禁止品項) if (Material.getMaterial(args[3]) == Material.AIR) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.ITEM_FORBIDDEN")); return; } - // 상점에서 같은 아이탬 찾기 + // 상점에서 같은 아이탬 찾기 (在商店中尋找相同的物品) ItemStack itemStack; try { @@ -119,20 +119,20 @@ public void RunCMD(String[] args, CommandSender sender) int idx = ShopUtil.findItemFromShop(shopName, itemStack); DSItem temp = new DSItem(itemStack, buyValue, buyValue, valueMin, valueMax, median, stock); - // 상점에 새 아이탬 추가 + // 상점에 새 아이탬 추가 (向商店新增物品) if (idx == -1) { idx = ShopUtil.findEmptyShopSlot(shopName, 1, true); if (idx == -1) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.NO_EMPTY_SLOT")); - } else if (ShopUtil.addItemToShop(shopName, idx, temp)) // 아이탬 추가 + } else if (ShopUtil.addItemToShop(shopName, idx, temp)) // 아이탬 추가 (新增物品) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "MESSAGE.ITEM_ADDED")); ItemsUtil.sendItemInfo(sender, shopName, idx, "HELP.ITEM_INFO"); } } - // 기존 아이탬 수정 + // 기존 아이탬 수정 (修改現有物品) else { ShopUtil.editShopItem(shopName, idx, temp); 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 f03d423..019d50c 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/AddHand.java @@ -63,7 +63,7 @@ public void RunCMD(String[] args, CommandSender sender) median = Integer.parseInt(args[6]); stock = Integer.parseInt(args[7]); - // 유효성 검사 + // 유효성 검사 (有效性檢查) if (valueMax > 0 && valueMin > 0 && valueMin >= valueMax) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.MAX_LOWER_THAN_MIN")); @@ -92,14 +92,14 @@ public void RunCMD(String[] args, CommandSender sender) return; } - // 손에 뭔가 들고있는지 확인 + // 손에 뭔가 들고있는지 확인 (檢查手上是否有物品) if (player.getInventory().getItemInMainHand() == null || player.getInventory().getItemInMainHand().getType() == Material.AIR) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.HAND_EMPTY")); return; } - // 금지품목 + // 금지품목 (禁止品項) if (Material.getMaterial(player.getInventory().getItemInMainHand().getType().toString()) == Material.AIR) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.ITEM_FORBIDDEN")); @@ -108,22 +108,22 @@ public void RunCMD(String[] args, CommandSender sender) DSItem temp = new DSItem(player.getInventory().getItemInMainHand(), buyValue, buyValue, valueMin, valueMax, median, stock); - // 상점에서 같은 아이탬 찾기 + // 상점에서 같은 아이탬 찾기 (在商店中尋找相同的物品) int idx = ShopUtil.findItemFromShop(shopName, player.getInventory().getItemInMainHand()); - // 상점에 새 아이탬 추가 + // 상점에 새 아이탬 추가 (向商店新增物品) if (idx == -1) { idx = ShopUtil.findEmptyShopSlot(shopName, 1, true); if (idx == -1) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.NO_EMPTY_SLOT")); - } else if (ShopUtil.addItemToShop(shopName, idx, temp)) // 아이탬 추가 + } else if (ShopUtil.addItemToShop(shopName, idx, temp)) // 아이탬 추가 (新增物品) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.ITEM_ADDED")); ItemsUtil.sendItemInfo(player, shopName, idx, "HELP.ITEM_INFO"); } } - // 기존 아이탬 수정 + // 기존 아이탬 수정 (修改現有物品) else { ShopUtil.editShopItem(shopName, idx, temp); 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 2effd81..bba13d1 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/Edit.java @@ -66,7 +66,7 @@ public void RunCMD(String[] args, CommandSender sender) } buyValue = Double.parseDouble(args[4]); - // 삭제 + // 삭제 (刪除) if (buyValue <= 0) { ShopUtil.removeItemFromShop(shopName, idx); @@ -91,7 +91,7 @@ public void RunCMD(String[] args, CommandSender sender) else maxStock = shopData.get().getInt(idx + ".maxStock", -1); - // 유효성 검사 + // 유효성 검사 (有效性檢查) if (valueMax > 0 && valueMin > 0 && valueMin >= valueMax) { sender.sendMessage(DynamicShop.dsPrefix(sender) + t(sender, "ERR.MAX_LOWER_THAN_MIN")); @@ -115,7 +115,7 @@ public void RunCMD(String[] args, CommandSender sender) return; } - // 수정 + // 수정 (修改) int discount = shopData.get().getInt(idx + ".discount"); int sellLimit = shopData.get().getInt(idx + ".tradeLimitPerPlayer.sell"); int buyLimit = shopData.get().getInt(idx + ".tradeLimitPerPlayer.buy"); 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 838b5e5..b6fd323 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/EditAll.java @@ -85,13 +85,13 @@ public void RunCMD(String[] args, CommandSender sender) return; } - // 수정 + // 수정 (修改) for (String s : shopData.get().getKeys(false)) { try { - @SuppressWarnings("unused") int i = Integer.parseInt(s); // 의도적으로 넣은 코드임. 숫자가 아니면 건너뛰기 위함. - if (!shopData.get().contains(s + ".value")) continue; //장식용임 + @SuppressWarnings("unused") int i = Integer.parseInt(s); // 의도적으로 넣은 코드임. 숫자가 아니면 건너뛰기 위함. (這是刻意加入的程式碼。目的是為了跳過非數字的情況。) + if (!shopData.get().contains(s + ".value")) continue; //장식용임 (裝飾用) } catch (Exception e) { 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 1a22b5f..8290de4 100644 --- a/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java +++ b/src/main/java/me/sat7/dynamicshop/commands/shop/SellBuy.java @@ -54,9 +54,9 @@ public void RunCMD(String[] args, CommandSender sender) { try { - // i를 직접 사용하지는 않지만 의도적으로 넣은 코드임. + // i를 직접 사용하지는 않지만 의도적으로 넣은 코드임. (雖然沒有直接使用i,但這是刻意加入的程式碼。) int i = Integer.parseInt(s); - if (!shopData.get().contains(s + ".value")) continue; //장식용임 + if (!shopData.get().contains(s + ".value")) continue; //장식용임 (裝飾用) } catch (Exception e) { continue; diff --git a/src/main/java/me/sat7/dynamicshop/constants/Constants.java b/src/main/java/me/sat7/dynamicshop/constants/Constants.java index 8e209ef..9546cf5 100644 --- a/src/main/java/me/sat7/dynamicshop/constants/Constants.java +++ b/src/main/java/me/sat7/dynamicshop/constants/Constants.java @@ -25,9 +25,9 @@ public final class Constants public static final String P_ADMIN_ITEM_INFO = "dshop.admin.iteminfo"; // Permission_User - public static final String P_USE = "dshop.use"; // 이 권한은 기본적으로 지급됨 - public static final String P_SELL = "dshop.sell"; // 이 권한은 기본적으로 지급됨 - public static final String P_USE_QSELL = "dshop.use.qsell"; // 이 권한은 기본적으로 지급됨 + public static final String P_USE = "dshop.use"; // 이 권한은 기본적으로 지급됨 (此權限預設授予) + public static final String P_SELL = "dshop.sell"; // 이 권한은 기본적으로 지급됨 (此權限預設授予) + public static final String P_USE_QSELL = "dshop.use.qsell"; // 이 권한은 기본적으로 지급됨 (此權限預設授予) // Currency public static final String S_VAULT = "Vault"; diff --git a/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java b/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java index fc4cc40..578802a 100644 --- a/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java +++ b/src/main/java/me/sat7/dynamicshop/economyhook/JobsHook.java @@ -20,7 +20,7 @@ private JobsHook() } - // JobsReborn의 points 수정 + // JobsReborn의 points 수정 (修改JobsReborn的點數) public static boolean addJobsPoint(Player p, double amount) { if (!jobsRebornActive) @@ -30,7 +30,7 @@ public static boolean addJobsPoint(Player p, double amount) } PlayerPoints pp = JobsHook.getJobsPlayerPoints(p); - // 차감 + // 차감 (扣除) if (amount < 0.0) { if (pp.havePoints(amount * -1)) @@ -38,7 +38,7 @@ public static boolean addJobsPoint(Player p, double amount) pp.takePoints(amount * -1); return true; } - // 포인트 부족 + // 포인트 부족 (點數不足) else { p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "MESSAGE.NOT_ENOUGH_POINT") @@ -46,7 +46,7 @@ public static boolean addJobsPoint(Player p, double amount) return false; } } - // 증가 + // 증가 (增加) else { pp.addPoints(amount); @@ -54,7 +54,7 @@ public static boolean addJobsPoint(Player p, double amount) } } - // JobsReborn. 플레이어의 잔액 확인 + // JobsReborn. 플레이어의 잔액 확인 (JobsReborn. 確認玩家餘額) public static double getCurJobPoints(Player p) { JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(p); diff --git a/src/main/java/me/sat7/dynamicshop/events/OnClick.java b/src/main/java/me/sat7/dynamicshop/events/OnClick.java index 6a71415..decabc2 100644 --- a/src/main/java/me/sat7/dynamicshop/events/OnClick.java +++ b/src/main/java/me/sat7/dynamicshop/events/OnClick.java @@ -19,7 +19,7 @@ public class OnClick implements Listener @EventHandler public void OnInventoryDragEvent(InventoryDragEvent e) { - // UI 인벤토리에 드래그로 아이탬 올리는것을 막음 + // UI 인벤토리에 드래그로 아이탬 올리는것을 막음 (防止拖曳物品到UI介面) if (UIManager.IsPlayerUsingPluginGUI((Player) e.getWhoClicked())) e.setCancelled(true); } @@ -32,10 +32,10 @@ public void OnInventoryClickEvent(InventoryClickEvent e) Player player = (Player) e.getWhoClicked(); - // 위쪽 인벤토리를 클릭함 (= 내 인벤토리가 아님) + // 위쪽 인벤토리를 클릭함 (= 내 인벤토리가 아님) (點擊了上方的介面(= 不是自己的背包)) if (e.getClickedInventory() != player.getInventory()) { - // UUID 확인되지 않는 경우 플러그인 사용을 막음. (이게 실질적으로 의미가 있는지는 모르겠음) + // UUID 확인되지 않는 경우 플러그인 사용을 막음. (이게 실질적으로 의미가 있는지는 모르겠음) (如果UUID未經驗證,則阻止使用插件。(不確定這是否真的有意義)) String pUuid = player.getUniqueId().toString(); if (UserUtil.ccUser.get().getConfigurationSection(pUuid) == null) @@ -54,7 +54,7 @@ public void OnInventoryClickEvent(InventoryClickEvent e) UIManager.OnClickUpperInventory(e); } } - // 아래쪽 인벤토리를 클릭함 + // 아래쪽 인벤토리를 클릭함 (點擊了下方的介面) else { if (UIManager.GetPlayerCurrentUIType(player) == InGameUI.UI_TYPE.ItemPalette || @@ -66,7 +66,7 @@ public void OnInventoryClickEvent(InventoryClickEvent e) e.setCancelled(true); UIManager.OnClickLowerInventory(e); } - // Shift클릭으로 상단의 UI인벤토리로 아이템 올리는것을 막음 + // Shift클릭으로 상단의 UI인벤토리로 아이템 올리는것을 막음 (防止使用Shift點擊將物品放入上方的UI介面) else if (e.isShiftClick() && UIManager.IsPlayerUsingPluginGUI(player)) { e.setCancelled(true); diff --git a/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java b/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java index 06e86da..1e5dede 100644 --- a/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java +++ b/src/main/java/me/sat7/dynamicshop/events/OnSignClick.java @@ -37,7 +37,7 @@ public class OnSignClick implements Listener { - // 생성 + // 생성 (建立) @EventHandler public void onSignChange(SignChangeEvent e) { if (!e.getPlayer().hasPermission(P_ADMIN_CREATE_SIGN)) return; @@ -110,7 +110,7 @@ public void onSignChange(SignChangeEvent e) { } } - // 상호작용 + // 상호작용 (互動) @EventHandler public void onInteract(PlayerInteractEvent e) { @@ -132,12 +132,12 @@ public void onInteract(PlayerInteractEvent e) String signId = CreateID(e.getClickedBlock()); - // 정보가 없음 + // 정보가 없음 (沒有資訊) if (!DynamicShop.ccSign.get().contains(signId) && s.getLine(1).length() > 0 && ShopUtil.shopConfigFiles.containsKey(ChatColor.stripColor(s.getLine(1)))) { - // 재생성 시도 + // 재생성 시도 (嘗試重建) if (e.getPlayer().hasPermission(P_ADMIN_CREATE_SIGN)) { String shop = ChatColor.stripColor(s.getLine(1)); @@ -188,7 +188,7 @@ public void onInteract(PlayerInteractEvent e) String shopName = DynamicShop.ccSign.get().getString(signId + ".shop"); if (shopName == null || shopName.length() == 0) return; - // 상점 존재 확인 + // 상점 존재 확인 (確認商店是否存在) if (ShopUtil.shopConfigFiles.containsKey(shopName)) { if (p.getGameMode() == GameMode.CREATIVE && !p.hasPermission(Constants.P_ADMIN_CREATIVE)) @@ -207,7 +207,7 @@ public void onInteract(PlayerInteractEvent e) } - //권한 확인 + //권한 확인 (權限確認) String permission = ShopUtil.shopConfigFiles.get(shopName).get().getString("Options.permission"); if (permission != null && permission.length() > 0) { @@ -242,7 +242,7 @@ public void onInteract(PlayerInteractEvent e) } } - // 파괴 + // 파괴 (破壞) @EventHandler public void onBlockBreak(BlockBreakEvent e) { @@ -279,7 +279,7 @@ public void onBlockBreak(BlockBreakEvent e) } } - // 상점 표지판이 폭발하는것 방지 + // 상점 표지판이 폭발하는것 방지 (防止商店招牌爆炸) @EventHandler public void onEntityExplode(EntityExplodeEvent event) { @@ -298,7 +298,7 @@ public void onEntityExplode(EntityExplodeEvent event) } } - // 상점 표지판이 불타는것 방지 + // 상점 표지판이 불타는것 방지 (防止商店招牌燒毀) @EventHandler public void onBlockBurn(BlockBurnEvent e) { diff --git a/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java b/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java index f9400fd..16550bd 100644 --- a/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java +++ b/src/main/java/me/sat7/dynamicshop/files/CustomConfig.java @@ -15,7 +15,7 @@ public class CustomConfig { private File file; - protected FileConfiguration customFile; // 버킷의 데이터 타입 + protected FileConfiguration customFile; // 버킷의 데이터 타입 (Bukkit的資料型態) //Finds or generates the custom config file public void setup(String name, String folder) diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java index d1c8451..13f22ee 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemPalette.java @@ -408,7 +408,7 @@ private void AddAll(boolean applyRecommend) { if (inventory.getItem(i) != null) { - ItemStack original = inventory.getItem(i); // UI 요소가 추가된 상태임. + ItemStack original = inventory.getItem(i); // UI 요소가 추가된 상태임. (UI元素已新增的狀態) if (original == null || original.getType() == Material.AIR) continue; @@ -472,7 +472,7 @@ private void OnClickItem(boolean isLeft, boolean isRight, boolean isShift, ItemS if (item == null || item.getType() == Material.AIR) return; - // 인자로 들어오는 item은 UI요소임 + // 인자로 들어오는 item은 UI요소임 (作為參數傳入的item是UI元素) ItemStack itemStack = CreateItemStackWithRef(item); if(uiSubType == 0) diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemSettings.java b/src/main/java/me/sat7/dynamicshop/guis/ItemSettings.java index 4a9b20c..ea4d5a1 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemSettings.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemSettings.java @@ -113,7 +113,7 @@ public Inventory getGui(Player player, String shopName, int shopSlotIndex, int t CreateButton(SHIFT, Material.BLACK_STAINED_GLASS_PANE, "Shift = x5", ""); - // 조절버튼 + // 조절버튼 (調整按鈕) if (dsItem.getBuyValue() == dsItem.getSellValue()) sellValueStr = "§8" + ChatColor.stripColor(sellValueStr); if (dsItem.getMinPrice() <= 0.0001) @@ -174,7 +174,7 @@ public Inventory getGui(Player player, String shopName, int shopSlotIndex, int t if(buyPrice < 0.0001) buyPrice = 0.0001; - if (dsItem.getBuyValue() != dsItem.getSellValue()) // 판매가 별도설정 + if (dsItem.getBuyValue() != dsItem.getSellValue()) // 판매가 별도설정 (另外設定售價) { editBtnLore.add("§7" + ChatColor.stripColor(t(null, "ITEM_SETTING.TAX_IGNORED"))); sellPrice = (dsItem.getSellValue() * dsItem.getMedian()) / dsItem.getStock(); @@ -233,7 +233,7 @@ public Inventory getGui(Player player, String shopName, int shopSlotIndex, int t else if (currentTab == MAX_STOCK) CreateButton(SET_TO_OTHER, yellow, t(null, "ITEM_SETTING.SET_TO_STOCK"), editBtnLore); } - inventory.setItem(SAMPLE_ITEM, dsItem.getItemStack()); // 아이탬 견본 + inventory.setItem(SAMPLE_ITEM, dsItem.getItemStack()); // 아이탬 견본 (物品樣本) inventory.getItem(SAMPLE_ITEM).setAmount(1); double worth = TryGetWorth(dsItem.getItemStack().getType().name()); @@ -286,11 +286,11 @@ public Inventory getGui(Player player, String shopName, int shopSlotIndex, int t t(player, "ITEM_SETTING.TRADE_LIMIT_TIMER_LORE").replace("{num}", String.valueOf(timerOffset / 1000 / 60 / 60)).replace("{time}", tradeLimitNextTimerString)); } - CreateButton(RECOMMEND, Material.NETHER_STAR, t(player, "ITEM_SETTING.RECOMMEND"), recommendLore); // 추천 버튼 + CreateButton(RECOMMEND, Material.NETHER_STAR, t(player, "ITEM_SETTING.RECOMMEND"), recommendLore); // 추천 버튼 (推薦按鈕) - CreateButton(DONE, Material.STRUCTURE_VOID, t(player, "ITEM_SETTING.DONE"), t(player, "ITEM_SETTING.DONE_LORE")); // 완료 버튼 - CreateButton(CLOSE, Material.BARRIER, t(player, "ITEM_SETTING.CLOSE"), t(player, "ITEM_SETTING.CLOSE_LORE")); // 닫기 버튼 - CreateButton(REMOVE, Material.BONE, t(player, "ITEM_SETTING.REMOVE"), t(player, "ITEM_SETTING.REMOVE_LORE")); // 삭제 버튼 + CreateButton(DONE, Material.STRUCTURE_VOID, t(player, "ITEM_SETTING.DONE"), t(player, "ITEM_SETTING.DONE_LORE")); // 완료 버튼 (完成按鈕) + CreateButton(CLOSE, Material.BARRIER, t(player, "ITEM_SETTING.CLOSE"), t(player, "ITEM_SETTING.CLOSE_LORE")); // 닫기 버튼 (關閉按鈕) + CreateButton(REMOVE, Material.BONE, t(player, "ITEM_SETTING.REMOVE"), t(player, "ITEM_SETTING.REMOVE_LORE")); // 삭제 버튼 (刪除按鈕) return inventory; } @@ -318,7 +318,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) else if (e.getSlot() == TRADE_LIMIT_INTERVAL_TIMER) OnTradeLimitTimerAdjustButtonClick(e.isLeftClick(), e.isShiftClick()); else if (e.getSlot() >= TAB_START && e.getSlot() <= TAB_END) ChangeTab(e.getSlot()); else if (e.getSlot() == RESET) Reset(); - else if (e.getSlot() >= 18 && e.getSlot() < 27) PlusMinus(e.isShiftClick(), e.getCurrentItem()); // RESET 이 22인것에 주의 + else if (e.getSlot() >= 18 && e.getSlot() < 27) PlusMinus(e.isShiftClick(), e.getCurrentItem()); // RESET 이 22인것에 주의 (注意RESET是22) else if (e.getSlot() == DIVIDE) Divide(e.isShiftClick()); else if (e.getSlot() == MULTIPLY) Multiply(e.isShiftClick()); else if (e.getSlot() == ROUND_DOWN) RoundDown(); @@ -328,7 +328,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) private void SaveSetting() { - // 유효성 검사 + // 유효성 검사 (有效性檢查) if (dsItem.maxPrice > 0 && dsItem.buyValue > dsItem.maxPrice) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "ERR.DEFAULT_VALUE_OUT_OF_RANGE")); diff --git a/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java b/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java index 7ff6a90..fd641f0 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ItemTrade.java @@ -116,7 +116,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) { if (e.getSlot() == CLOSE) { - // 표지판을 클릭해서 거래화면에 진입한 경우에는 상점UI로 돌아가는 대신 인벤토리를 닫음 + // 표지판을 클릭해서 거래화면에 진입한 경우에는 상점UI로 돌아가는 대신 인벤토리를 닫음 (點擊招牌進入交易畫面時,直接關閉介面而不是返回商店UI) if (UserUtil.userTempData.get(player.getUniqueId()).equalsIgnoreCase("sign")) { UserUtil.userTempData.put(player.getUniqueId(), ""); @@ -193,17 +193,17 @@ public void OnClickUpperInventory(InventoryClickEvent e) ItemStack tempIS = new ItemStack(e.getCurrentItem().getType(), e.getCurrentItem().getAmount()); tempIS.setItemMeta((ItemMeta) data.get().get(tradeIdx + ".itemStack")); - // 무한재고&고정가격 + // 무한재고&고정가격 (無限庫存&固定價格) boolean infiniteStock = data.get().getInt(tradeIdx + ".stock") <= 0; - // 배달비 계산 + // 배달비 (運費) 계산 (運費計算) ConfigurationSection optionS = data.get().getConfigurationSection("Options"); if (optionS.contains("world") && optionS.contains("pos1") && optionS.contains("pos2") && optionS.contains("flag.deliverycharge")) { deliveryCharge = ShopUtil.CalcShipping(shopName, player); if (deliveryCharge == -1) { - player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.DELIVERY_CHARGE_NA")); // 다른 월드로 배달 불가능 + player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.DELIVERY_CHARGE_NA")); // 다른 월드로 배달 불가능 (無法配送到其他世界) return; } } @@ -302,7 +302,7 @@ private void CreateTradeButtons() private void CreateTradeButtons(boolean sell) { - // 플레이어당 거래 제한 + // 플레이어당 거래 제한 (每位玩家的交易限制) String tradeLimitString = ""; int tradeIdxInt = Integer.parseInt(tradeIdx); int tradeLimitLeft = UserUtil.GetTradingLimitLeft(player, shopName, tradeIdxInt, HashUtil.GetItemHash(new ItemStack(Material.getMaterial(material))), sell); @@ -413,7 +413,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) if (!sell) { - if (stock != -1 && stock <= amount) // stock은 1이거나 그보다 작을 수 없음. 단 -1은 무한재고를 의미함. + if (stock != -1 && stock <= amount) // stock은 1이거나 그보다 작을 수 없음. 단 -1은 무한재고를 의미함. (stock不能是1或更小。但是-1代表無限庫存。) continue; } @@ -449,7 +449,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) } } - // 플레이어당 거래 제한 + // 플레이어당 거래 제한 (每位玩家的交易限制) if (tradeLimitLeft != Integer.MAX_VALUE) { if (!stockText.isEmpty()) @@ -457,7 +457,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) stockText += tradeLimitString; } - // 배달비 + // 배달비 (運費) String deliveryChargeText = ""; if (deliveryCharge > 0) { diff --git a/src/main/java/me/sat7/dynamicshop/guis/PageEditor.java b/src/main/java/me/sat7/dynamicshop/guis/PageEditor.java index 146ebb9..3ec93d4 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/PageEditor.java +++ b/src/main/java/me/sat7/dynamicshop/guis/PageEditor.java @@ -56,17 +56,17 @@ public Inventory getGui(Player player, String shopName, int page) { try { - // 현재 페이지에 해당하는 것들만 출력 + // 현재 페이지에 해당하는 것들만 출력 (只輸出目前頁面的項目) int idx = Integer.parseInt(s); idx -= ((page - 1) * 45); if (!(idx < 45 && idx >= 0)) continue; - // 아이탬 생성 - String itemName = data.get().getString(s + ".mat"); // 메테리얼 + // 아이탬 생성 (建立物品) + String itemName = data.get().getString(s + ".mat"); // 메테리얼 (材料) ItemStack itemStack = new ItemStack(Material.getMaterial(itemName), 1); // 아이탬 생성 - itemStack.setItemMeta((ItemMeta) data.get().get(s + ".itemStack")); // 저장된 메타 적용 + itemStack.setItemMeta((ItemMeta) data.get().get(s + ".itemStack")); // 저장된 메타 적용 (套用已儲存的Meta) - // 커스텀 메타 설정 + // 커스텀 메타 설정 (自訂Meta設定) ItemMeta meta = itemStack.getItemMeta(); meta.setDisplayName("§8#" + s); ArrayList loreList = new ArrayList<>(); @@ -116,7 +116,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) int pageButtonCount = PAGE_BUTTON_END - PAGE_BUTTON_START + 1; - // 닫기 버튼 + // 닫기 버튼 (關閉按鈕) if (e.getSlot() == CLOSE) { DynaShopAPI.openShopGui(player, shopName, page); @@ -286,7 +286,7 @@ private void DeletePage(Player player, String shopName, int page) { ShopUtil.closeInventoryWithDelay(player); - UserUtil.userInteractItem.put(player.getUniqueId(), shopName + "/" + page); // 삭제 확인을 위해 필요. + UserUtil.userInteractItem.put(player.getUniqueId(), shopName + "/" + page); // 삭제 확인을 위해 필요. (刪除確認時需要。) UserUtil.userTempData.put(player.getUniqueId(), "waitforPageDelete"); OnChat.WaitForInput(player); diff --git a/src/main/java/me/sat7/dynamicshop/guis/QuickSell.java b/src/main/java/me/sat7/dynamicshop/guis/QuickSell.java index 1cd59c8..ef1e340 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/QuickSell.java +++ b/src/main/java/me/sat7/dynamicshop/guis/QuickSell.java @@ -83,7 +83,7 @@ public void OnClickLowerInventory(InventoryClickEvent e) { if (e.isLeftClick()) { - // 찾은 상점에 판매 + // 찾은 상점에 판매 (銷售到找到的商店) Sell.quickSellItem(player, e.getCurrentItem(), topShopName, tradeIdx, e.isShiftClick(), e.getSlot()); } else if (e.isRightClick()) { diff --git a/src/main/java/me/sat7/dynamicshop/guis/RotationEditor.java b/src/main/java/me/sat7/dynamicshop/guis/RotationEditor.java index 8630528..c8721cc 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/RotationEditor.java +++ b/src/main/java/me/sat7/dynamicshop/guis/RotationEditor.java @@ -39,10 +39,10 @@ public RotationEditor() private final SimpleDateFormat sdf = new SimpleDateFormat("MM.dd.yyyy HH:mm:ss"); private String timeLore; - private long period; // 밀리초 - private long period_new; // 밀리초 - private long nextTimer; // 밀리초 - private long nextTimer_new; // 밀리초 + private long period; // 밀리초 (毫秒) + private long period_new; // 밀리초 (毫秒) + private long nextTimer; // 밀리초 (毫秒) + private long nextTimer_new; // 밀리초 (毫秒) private int moveTarget; @@ -110,7 +110,7 @@ else if (e.isRightClick()) nextTimer_new += editAmount; nextTimer_new = nextTimer_new / 1000 / 60 / 10; - nextTimer_new = nextTimer_new * 1000 * 60 * 10; // 10분단위로 내림처리. + nextTimer_new = nextTimer_new * 1000 * 60 * 10; // 10분단위로 내림처리. (以10分鐘為單位進行無條件捨去) RefreshUI(); } else if (e.getSlot() == APPLY_CHANGES) { @@ -160,7 +160,7 @@ public void RefreshUI() private void UpdateToggleButton() { - // 활성화 토글 + // 활성화 토글 (啟用/禁用 切換) if (currentRotation != -1) { String lore = t(player, "ROTATION_EDITOR.CLICK_TO_DISABLE") + "\n\n" + timeLore; @@ -253,7 +253,7 @@ private void OnClickDataButton(boolean isEmptySlot, int dataIndex, boolean isLef { if (isEmptySlot) { - // 새 로테이션 파일 생성 + // 새 로테이션 파일 생성 (建立新的輪換檔案) if (isLeftClick) { RotationUtil.AddNewRotationData(shopName, dataIndex, true); @@ -261,7 +261,7 @@ private void OnClickDataButton(boolean isEmptySlot, int dataIndex, boolean isLef } else if (isRightClick) { - // 이동 + // 이동 (移動) if(moveTarget != -1) { RotationUtil.OnRotationFileSlotMoved(shopName, moveTarget, dataIndex); @@ -272,7 +272,7 @@ else if (isRightClick) } moveTarget = -1; } - // 현재 상점 복사하여 새로 만들기 + // 현재 상점 복사하여 새로 만들기 (複製目前商店以建立新商店) else { RotationUtil.AddNewRotationData(shopName, dataIndex, false); @@ -283,21 +283,21 @@ else if (isRightClick) { if (isLeftClick) { - // 로테이션 적용 + // 로테이션 적용 (套用輪換) if (currentRotation != dataIndex || isShift) { RotationUtil.ApplyRotation(shopName, currentRotation, dataIndex); currentRotation = dataIndex; RefreshUI(); } - // 로테이션 적용된 상태의 상점 UI를 연다 + // 로테이션 적용된 상태의 상점 UI를 연다 (開啟已套用輪換的商店UI) else { DynaShopAPI.openShopGui(player, shopName, 0); } } else if (isRightClick) { - // 로테이션 데이터 삭제 + // 로테이션 데이터 삭제 (刪除輪換資料) if (isShift) { RotationUtil.DeleteRotationFile(shopName, dataIndex); @@ -314,7 +314,7 @@ else if (isRightClick) } RefreshUI(); } - // 이동 + // 이동 (移動) else { if(moveTarget == -1) diff --git a/src/main/java/me/sat7/dynamicshop/guis/Shop.java b/src/main/java/me/sat7/dynamicshop/guis/Shop.java index adaf8b0..2421cc9 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/Shop.java +++ b/src/main/java/me/sat7/dynamicshop/guis/Shop.java @@ -136,21 +136,30 @@ private void ShowItems() { try { - // 현재 페이지에 해당하는 것들만 출력 + // 현재 페이지에 해당하는 것들만 출력 (只輸出目前頁面的項目) idx = Integer.parseInt(s); idx -= ((page - 1) * 45); if (!(idx < 45 && idx >= 0)) continue; - // 아이탬 생성 - String itemName = shopData.getString(s + ".mat"); // 메테리얼 - ItemStack itemStack = new ItemStack(Material.getMaterial(itemName), 1); // 아이탬 생성 - itemStack.setItemMeta((ItemMeta) shopData.get(s + ".itemStack")); // 저장된 메타 적용 + // 아이탬 생성 (建立物品) + String itemName = shopData.getString(s + ".mat"); // 메테리얼 (材料) + Material mat = Material.getMaterial(itemName); + if(mat == null) + { + if (player.hasPermission(P_ADMIN_SHOP_EDIT)) + CreateButton(idx, Material.BARRIER, t(player, "SHOP.INCOMPLETE_DATA"), t(null, "SHOP.INCOMPLETE_DATA_Lore") + s); + + DynamicShop.console.sendMessage(Constants.DYNAMIC_SHOP_PREFIX + "Invalid material '" + itemName + "' in shop '" + shopName + "' at index " + s); + continue; + } + ItemStack itemStack = new ItemStack(mat, 1); // 아이탬 생성 + itemStack.setItemMeta((ItemMeta) shopData.get(s + ".itemStack")); // 저장된 메타 적용 (套用已儲存的Meta) - // 커스텀 메타 설정 + // 커스텀 메타 설정 (自訂Meta設定) ItemMeta meta = itemStack.getItemMeta(); String lore = ""; - // 상품 + // 상품 (商品) if (shopData.contains(s + ".value")) { int tradeIdx = Integer.parseInt(s); @@ -345,7 +354,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) lore += "\n" + t(player, "SHOP.ITEM_EDIT_LORE"); } } - // 장식용 + // 장식용 (裝飾用) else { if (player.hasPermission(P_ADMIN_SHOP_EDIT)) @@ -417,7 +426,7 @@ private String CreateShopInfoText() } } - // 권한 + // 권한 (權限) String finalPermText = ""; String perm = shopData.getString("Options.permission"); if (perm != null && perm.length() > 0) @@ -426,12 +435,12 @@ private String CreateShopInfoText() finalPermText += t(player, "SHOP.PERMISSION_ITEM").replace("{permission}", perm) + "\n"; } - // 세금 + // 세금 (稅金) String finalTaxText = ""; finalTaxText += t(player, "TAX.SALES_TAX") + ":" + "\n"; finalTaxText += t(player, "SHOP.SHOP_INFO_DASH") + Calc.getTaxRate(shopName) + "%" + "\n"; - // 상점 잔액 + // 상점 잔액 (商店餘額) String finalShopBalanceText = ""; if(!shopData.contains("Options.flag.hideshopbalance")) @@ -456,7 +465,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) } } - // 영업시간 + // 영업시간 (營業時間) String finalShopHourText = ""; if (shopData.contains("Options.shophours")) { @@ -469,7 +478,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) finalShopHourText += t(player, "SHOP.SHOP_INFO_DASH") + t(player, "TIME.CLOSE") + ": " + close + "\n"; } - // 상점 좌표 + // 상점 좌표 (商店座標) String finalShopPosText = ""; if (shopData.contains("Options.pos1") && shopData.contains("Options.pos2")) { @@ -497,11 +506,11 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) if(ChatColor.stripColor(temp).startsWith("\n")) shopLore = shopLore.replaceFirst("\n",""); - // 어드민이면---------- + // 어드민이면---------- (如果是管理員----------) if (player.hasPermission(P_ADMIN_SHOP_EDIT)) shopLore += "\n"; - // 플래그 + // 플래그 (旗標) StringBuilder finalFlagText = new StringBuilder(); if (player.hasPermission(P_ADMIN_SHOP_EDIT)) { @@ -527,7 +536,7 @@ else if (ShopUtil.GetCurrency(shopData).equalsIgnoreCase(Constants.S_EXP)) private void CloseUI() { - // 표지판으로 접근한 경우에는 그냥 창을 닫음 + // 표지판으로 접근한 경우에는 그냥 창을 닫음 (透過招牌進入時直接關閉視窗) if (UserUtil.userTempData.get(player.getUniqueId()).equalsIgnoreCase("sign")) { UserUtil.userTempData.put(player.getUniqueId(), ""); @@ -603,13 +612,13 @@ else if (e.getCurrentItem().getItemMeta().getDisplayName().equals(" ") || return; } - // 거래화면 열기 + // 거래화면 열기 (開啟交易畫面) if (e.isLeftClick() && shopData.contains(idx + ".value")) { SoundUtil.playerSoundEffect(player, "tradeview"); DynaShopAPI.openItemTradeGui(player, shopName, String.valueOf(idx)); } - // 아이탬 이동, 수정, 또는 장식탬 삭제 + // 아이탬 이동, 수정, 또는 장식탬 삭제 (移動、修改物品或刪除裝飾品) else if (e.isRightClick() && player.hasPermission(P_ADMIN_SHOP_EDIT)) { if (e.isShiftClick()) @@ -656,7 +665,7 @@ else if (e.isRightClick() && player.hasPermission(P_ADMIN_SHOP_EDIT)) } else if (player.hasPermission(P_ADMIN_SHOP_EDIT)) { - // 아이탬 이동. 또는 장식 복사 + // 아이탬 이동. 또는 장식 복사 (移動物品或複製裝飾) if (e.isRightClick() && selectedSlot != -1) { shopData.set(String.valueOf(idx), shopData.get(String.valueOf(selectedSlot))); @@ -673,7 +682,7 @@ else if (player.hasPermission(P_ADMIN_SHOP_EDIT)) selectedSlot = -1; RefreshUI(); } - // 팔렛트 열기 + // 팔렛트 열기 (開啟調色盤) else { DynaShopAPI.openItemPalette(player, 0, shopName, idx, 1, ""); diff --git a/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java b/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java index d6c4272..72a6369 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java +++ b/src/main/java/me/sat7/dynamicshop/guis/ShopSettings.java @@ -92,10 +92,10 @@ public Inventory getGui(Player player, String shopName) CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); ConfigurationSection confSec_Options = data.get().getConfigurationSection("Options"); - // 닫기 버튼 + // 닫기 버튼 (關閉按鈕) CreateCloseButton(player, CLOSE); - // 활성화 버튼 + // 활성화 (啟用) 버튼 (啟用按鈕) boolean isShopEnable = confSec_Options.getBoolean("enable", true); Material enableToggleMat = isShopEnable ? Material.GREEN_STAINED_GLASS : Material.RED_STAINED_GLASS; String current = isShopEnable ? t(player, "SHOP_SETTING.STATE_ENABLE") : t(player, "SHOP_SETTING.STATE_DISABLE"); @@ -104,7 +104,7 @@ public Inventory getGui(Player player, String shopName) enableToggleLore += "\n§e" + t(player, "CLICK") + ": " + set; CreateButton(ENABLE_TOGGLE, enableToggleMat, t(player, "SHOP_SETTING.STATE"), enableToggleLore); - // 권한 버튼 + // 권한 (權限) 버튼 (權限按鈕) String permStr = confSec_Options.getString("permission"); String permNew = "dshop.user.shop." + shopName; Material permIcon; @@ -128,22 +128,22 @@ public Inventory getGui(Player player, String shopName) permLore.add("§e" + t(player, "CLICK") + ": " + permNew); CreateButton(PERMISSION, permIcon, t(player, "SHOP_SETTING.PERMISSION"), permLore); - //최대 페이지 버튼 + //최대 페이지 버튼 (最大頁數按鈕) CreateButton(MAX_PAGE, InGameUI.GetPageButtonIconMat(), t(player, "SHOP_SETTING.MAX_PAGE"), new ArrayList<>(Arrays.asList(t(player, "SHOP_SETTING.MAX_PAGE_LORE"), t(player, "SHOP_SETTING.L_R_SHIFT"))), data.get().getInt("Options.page")); - // 배경 색상 + // 배경 색상 (背景顏色) String color = confSec_Options.getString("background",""); Material mat = Material.getMaterial( color.toUpperCase() + "_CONCRETE"); if (mat == null) mat = Material.LIGHT_GRAY_CONCRETE; CreateButton(BACKGROUND, mat, t(player, "SHOP_SETTING.BACKGROUND"), t(player, "SHOP_SETTING.BACKGROUND_LORE")); - // 로테이션 에디터 + // 로테이션 에디터 (輪換編輯器) int currentRotation = confSec_Options.getInt("Rotation.Current", -1); String rotationString = currentRotation == -1 ? t(player, "ROTATION_EDITOR.DISABLED") : String.valueOf(currentRotation + 1); CreateButton(ROTATION_EDITOR, Material.CLOCK, t(player, "SHOP_SETTING.ROTATION_EDITOR") + rotationString, t(player, "SHOP_SETTING.ROTATION_EDITOR_LORE")); - // 영업시간 버튼 + // 영업시간 버튼 (營業時間按鈕) int curTime = (int) (player.getWorld().getTime()) / 1000 + 6; if (curTime > 24) curTime -= 24; if (data.get().contains("Options.shophours")) @@ -170,7 +170,7 @@ public Inventory getGui(Player player, String shopName) CreateButton(SHOP_HOUR, Material.CLOCK, t(player, "TIME.SHOPHOURS"), shopHourLore); } - // 랜덤스톡 버튼 + // 랜덤스톡 (隨機庫存) 버튼 (隨機庫存按鈕) ConfigurationSection flucConf = data.get().getConfigurationSection("Options.fluctuation"); if (flucConf != null) { @@ -205,7 +205,7 @@ public Inventory getGui(Player player, String shopName) inventory.setItem(FLUC, flucToggleBtn); } - // 재고 안정화 버튼 + // 재고 안정화 버튼 (庫存穩定按鈕) ConfigurationSection stockStableConf = data.get().getConfigurationSection("Options.stockStabilizing"); if (stockStableConf != null) { @@ -237,7 +237,7 @@ public Inventory getGui(Player player, String shopName) CreateButton(STABLE, Material.COMPARATOR, t(player, "STOCK_STABILIZING.SS"), stableLore); } - // 커맨드 버튼 + // 커맨드 버튼 (指令按鈕) boolean cmdEnabled = confSec_Options.contains("command.active") && confSec_Options.getBoolean("command.active"); ArrayList CmdToggleLore = new ArrayList<>(Arrays.asList( t(player, "SHOP_SETTING.COMMAND_TOGGLE_LORE"), @@ -291,7 +291,7 @@ public Inventory getGui(Player player, String shopName) 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); - // 세금 + // 세금 (稅金) int globalTax = ConfigUtil.getCurrentTax(); if (data.get().contains("Options.SalesTax")) { @@ -314,7 +314,7 @@ public Inventory getGui(Player player, String shopName) CreateButton(TAX_TOGGLE, Material.IRON_INGOT, t(player, "TAX.SALES_TAX"), taxLore); } - // 플래그 버튼들 + // 플래그 버튼들 (旗標按鈕) CreateFlagButton(FLAG_SIGNSHOP, confSec_Options.contains("flag.signshop"), "signShop", t(player, "SHOP_SETTING.SIGN_SHOP_LORE")); CreateFlagButton(FLAG_LOCALSHOP, confSec_Options.contains("flag.localshop"), "localShop", t(player, "SHOP_SETTING.LOCAL_SHOP_LORE")); CreateFlagButton(FLAG_DELIVERY, confSec_Options.contains("flag.deliverycharge"), "deliveryCharge", t(player, "SHOP_SETTING.DELIVERY_CHARGE_LORE")); @@ -337,7 +337,7 @@ public Inventory getGui(Player player, String shopName) CreateCurrencyButton(CURRENCY_JP, currency.equalsIgnoreCase(Constants.S_JOBPOINT), t(player, "SHOP_SETTING.CURRENCY") + "JobPoint", t(player, "SHOP_SETTING.JOB_POINT_LORE")); CreateCurrencyButton(CURRENCY_PP, currency.equalsIgnoreCase(Constants.S_PLAYERPOINT), t(player, "SHOP_SETTING.CURRENCY") + "PlayerPoint", t(player, "SHOP_SETTING.PLAYER_POINT_LORE")); - // 로그 버튼 + // 로그 버튼 (日誌按鈕) String log_cur; String log_set; if (confSec_Options.contains("log.active") && confSec_Options.getBoolean("log.active")) @@ -367,7 +367,7 @@ public Inventory getGui(Player player, String shopName) logLore_3.add("§e" + t(player, "LMB") + ": " + (printToAdminActive ? t(player, "OFF") : t(player, "ON"))); CreateButton(LOG_PRINT_ADMIN, printToAdminActive ? Material.GREEN_STAINED_GLASS_PANE : Material.BLACK_STAINED_GLASS_PANE, t(player, "SHOP_SETTING.LOG_PRINT_ADMIN"), logLore_3); - // 거래 UI 설정 + // 거래 UI 설정 (交易UI設定) ArrayList tradeUILore = new ArrayList<>(); tradeUILore.add("§9" + t(null, "CUR_STATE") + ": " + (confSec_Options.contains("tradeUI") ? confSec_Options.get("tradeUI") : t(player,"NULL"))); tradeUILore.add(t(player, "SHOP_SETTING.TRADE_UI_LORE_2")); @@ -383,12 +383,12 @@ public void OnClickUpperInventory(InventoryClickEvent e) CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); - // 닫기버튼 + // 닫기버튼 (關閉按鈕) if (e.getSlot() == CLOSE) { DynaShopAPI.openShopGui(player, shopName, 1); } - // 활성화 + // 활성화 (啟用) if (e.getSlot() == ENABLE_TOGGLE) { if (data.get().getBoolean("Options.enable", true)) @@ -400,7 +400,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) } DynaShopAPI.openShopSettingGui(player, shopName); } - // 권한 + // 권한 (權限) else if (e.getSlot() == PERMISSION) { if (data.get().getString("Options.permission").isEmpty()) @@ -412,7 +412,7 @@ else if (e.getSlot() == PERMISSION) } DynaShopAPI.openShopSettingGui(player, shopName); } - // 최대 페이지 + // 최대 페이지 (最大頁數) else if (e.getSlot() == MAX_PAGE) { int oldvalue = data.get().getInt("Options.page"); @@ -433,12 +433,12 @@ else if (e.getSlot() == MAX_PAGE) } DynaShopAPI.openShopSettingGui(player, shopName); } - // 배경 색상 변경 + // 배경 색상 변경 (變更背景顏色) else if (e.getSlot() == BACKGROUND) { DynaShopAPI.openColorPicker(player, -1); } - // 로테이션 편집기 + // 로테이션 편집기 (輪換編輯器) (輪換編輯器) else if (e.getSlot() == ROTATION_EDITOR) { DynaShopAPI.OpenRotationEditor(player, shopName); @@ -506,7 +506,7 @@ else if (e.getSlot() == SHOP_HOUR || e.getSlot() == SHOP_HOUR_OPEN || e.getSlot( } } } - // 랜덤스톡 + // 랜덤스톡 (隨機庫存) else if (e.getSlot() == FLUC || e.getSlot() == FLUC_INTERVAL || e.getSlot() == FLUC_STRENGTH) { if (data.get().contains("Options.fluctuation")) @@ -565,7 +565,7 @@ else if(e.isRightClick()) } } } - // 스톡 안정화 + // 스톡 안정화 (庫存穩定) (庫存穩定) else if (e.getSlot() == STABLE || e.getSlot() == STABLE_INTERVAL || e.getSlot() == STABLE_STRENGTH) { if (data.get().contains("Options.stockStabilizing")) @@ -624,10 +624,10 @@ else if(e.isRightClick()) } } } - // 세금 + // 세금 (稅金) else if (e.getSlot() == TAX_TOGGLE || e.getSlot() == TAX_AMOUNT) { - // 전역,지역 토글 + // 전역,지역 토글 (全域/區域 切換) if (e.getSlot() == TAX_TOGGLE) { if (data.get().contains("Options.SalesTax")) @@ -640,7 +640,7 @@ else if (e.getSlot() == TAX_TOGGLE || e.getSlot() == TAX_AMOUNT) DynaShopAPI.openShopSettingGui(player, shopName); } - // 수치설정 + // 수치설정 (數值設定) else if (data.get().contains("Options.SalesTax")) { int edit = -1; @@ -654,7 +654,7 @@ else if (data.get().contains("Options.SalesTax")) } data.save(); } - // signshop + // signshop (招牌商店) else if (e.getSlot() == FLAG_SIGNSHOP) { if (data.get().contains("Options.flag.signshop")) @@ -666,7 +666,7 @@ else if (e.getSlot() == FLAG_SIGNSHOP) } DynaShopAPI.openShopSettingGui(player, shopName); } - // localshop + // localshop (本地商店) else if (e.getSlot() == FLAG_LOCALSHOP) { if (data.get().contains("Options.flag.localshop")) @@ -678,7 +678,7 @@ else if (e.getSlot() == FLAG_LOCALSHOP) } DynaShopAPI.openShopSettingGui(player, shopName); } - // deliverycharge + // deliverycharge (運費) else if (e.getSlot() == FLAG_DELIVERY) { if (data.get().contains("Options.flag.deliverycharge")) @@ -690,7 +690,7 @@ else if (e.getSlot() == FLAG_DELIVERY) } DynaShopAPI.openShopSettingGui(player, shopName); } - // showValueChange + // showValueChange (顯示價值變化) else if (e.getSlot() == FLAG_SHOW_VALUE_CHANGE) { if (data.get().contains("Options.flag.showvaluechange")) @@ -702,7 +702,7 @@ else if (e.getSlot() == FLAG_SHOW_VALUE_CHANGE) } DynaShopAPI.openShopSettingGui(player, shopName); } - // HIDE_STOCK + // HIDE_STOCK (隱藏庫存) else if (e.getSlot() == FLAG_HIDE_STOCK) { if (data.get().contains("Options.flag.hidestock")) @@ -714,7 +714,7 @@ else if (e.getSlot() == FLAG_HIDE_STOCK) } DynaShopAPI.openShopSettingGui(player, shopName); } - // HIDE_PRICING_TYPE + // HIDE_PRICING_TYPE (隱藏價格類型) else if (e.getSlot() == FLAG_HIDE_PRICING_TYPE) { if (data.get().contains("Options.flag.hidepricingtype")) @@ -726,7 +726,7 @@ else if (e.getSlot() == FLAG_HIDE_PRICING_TYPE) } DynaShopAPI.openShopSettingGui(player, shopName); } - // HIDE_SHOP_BALANCE + // HIDE_SHOP_BALANCE (隱藏商店餘額) else if (e.getSlot() == FLAG_HIDE_SHOP_BALANCE) { if (data.get().contains("Options.flag.hideshopbalance")) @@ -738,7 +738,7 @@ else if (e.getSlot() == FLAG_HIDE_SHOP_BALANCE) } DynaShopAPI.openShopSettingGui(player, shopName); } - // SHOW_MAX_STOCK + // SHOW_MAX_STOCK (顯示最大庫存) else if (e.getSlot() == FLAG_SHOW_MAX_STOCK) { if (data.get().contains("Options.flag.showmaxstock")) @@ -750,7 +750,7 @@ else if (e.getSlot() == FLAG_SHOW_MAX_STOCK) } DynaShopAPI.openShopSettingGui(player, shopName); } - // HIDDEN_IN_COMMAND + // HIDDEN_IN_COMMAND (在指令中隱藏) else if (e.getSlot() == FLAG_HIDDEN_IN_COMMAND) { if (data.get().contains("Options.flag.hiddenincommand")) @@ -762,7 +762,7 @@ else if (e.getSlot() == FLAG_HIDDEN_IN_COMMAND) } DynaShopAPI.openShopSettingGui(player, shopName); } - // log + // log (日誌) else if (e.getSlot() == LOG_TOGGLE) { if (e.isLeftClick()) @@ -796,7 +796,7 @@ else if (e.getSlot() == LOG_PRINT_ADMIN) DynaShopAPI.openShopSettingGui(player, shopName); } - // 명령어 + // 명령어 (指令) else if (e.getSlot() == CMD_TOGGLE) { boolean active = data.get().contains("Options.command.active") && data.get().getBoolean("Options.command.active"); @@ -849,7 +849,7 @@ else if(e.isLeftClick()) OnChat.WaitForInput(player); } } - // INTEGER_ONLY + // INTEGER_ONLY (僅整數) else if (e.getSlot() == FLAG_INT_ONLY) { if (data.get().contains("Options.flag.integeronly")) @@ -865,7 +865,7 @@ else if (e.getSlot() == FLAG_INT_ONLY) } DynaShopAPI.openShopSettingGui(player, shopName); } - // vault + // vault (金庫) else if (e.getSlot() == CURRENCY_VAULT) { if (!currency.equalsIgnoreCase(Constants.S_VAULT)) @@ -874,7 +874,7 @@ else if (e.getSlot() == CURRENCY_VAULT) } DynaShopAPI.openShopSettingGui(player, shopName); } - // exp + // exp (經驗) else if (e.getSlot() == CURRENCY_EXP) { if (!currency.equalsIgnoreCase(Constants.S_EXP)) @@ -884,7 +884,7 @@ else if (e.getSlot() == CURRENCY_EXP) } DynaShopAPI.openShopSettingGui(player, shopName); } - // jobpoint + // jobpoint (職業點數) else if (e.getSlot() == CURRENCY_JP) { if (!JobsHook.jobsRebornActive) @@ -899,7 +899,7 @@ else if (e.getSlot() == CURRENCY_JP) } DynaShopAPI.openShopSettingGui(player, shopName); } - // Player point + // Player point (玩家點数) else if (e.getSlot() == CURRENCY_PP) { if (!PlayerpointHook.isPPActive) diff --git a/src/main/java/me/sat7/dynamicshop/guis/StartPage.java b/src/main/java/me/sat7/dynamicshop/guis/StartPage.java index 81e0221..c0ecf0b 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/StartPage.java +++ b/src/main/java/me/sat7/dynamicshop/guis/StartPage.java @@ -61,7 +61,7 @@ public Inventory getGui(Player player) inventory = Bukkit.createInventory(player, ccStartPage.get().getInt("Options.UiSlotCount"), ccStartPage.get().getString("Options.Title")); - //아이콘, 이름, 로어, 인덱스, 커맨드 + //아이콘, 이름, 로어, 인덱스, 커맨드 (圖示, 名稱, 描述, 索引, 指令) ConfigurationSection cs = ccStartPage.get().getConfigurationSection("Buttons"); for (String s : cs.getKeys(false)) { @@ -101,7 +101,7 @@ public Inventory getGui(Player player) if (cs.contains(s + ".itemStack")) { - ItemMeta tempMeta = (ItemMeta) cs.get(s + ".itemStack"); // 저장된 메타 적용 + ItemMeta tempMeta = (ItemMeta) cs.get(s + ".itemStack"); // 저장된 메타 적용 (套用已儲存的Meta) meta = tempMeta.clone(); } else @@ -149,7 +149,7 @@ public void OnClickUpperInventory(InventoryClickEvent e) { if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) { - // 새 버튼 추가 + // 새 버튼 추가 (新增按鈕) if (player.hasPermission(P_ADMIN_SHOP_EDIT)) { StartPage.ccStartPage.get().set("Buttons." + e.getSlot() + ".displayName", "§3New Button"); @@ -177,10 +177,10 @@ public void OnClickUpperInventory(InventoryClickEvent e) } } } - // 우클릭 + // 우클릭 (右鍵點擊) else if (player.hasPermission(P_ADMIN_SHOP_EDIT)) { - // 편집 + // 편집 (編輯) if (e.isShiftClick()) { if (e.getCurrentItem() == null || e.getCurrentItem().getType() == Material.AIR) return; @@ -188,7 +188,7 @@ else if (player.hasPermission(P_ADMIN_SHOP_EDIT)) selectedIndex = e.getSlot(); DynaShopAPI.openStartPageSettingGui(player, selectedIndex); } - // 이동 + // 이동 (移動) else { if (selectedIndex == -1) diff --git a/src/main/java/me/sat7/dynamicshop/guis/StartPageSettings.java b/src/main/java/me/sat7/dynamicshop/guis/StartPageSettings.java index 7bcfc89..f272374 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/StartPageSettings.java +++ b/src/main/java/me/sat7/dynamicshop/guis/StartPageSettings.java @@ -41,19 +41,19 @@ public Inventory getGui(Player player, int slotIndex) inventory = Bukkit.createInventory(player, 9, t(player, "START_PAGE.EDITOR_TITLE")); - CreateCloseButton(player, CLOSE); // 닫기 버튼 + CreateCloseButton(player, CLOSE); // 닫기 버튼 (關閉按鈕) - CreateButton(NAME, Material.BOOK, t(player, "START_PAGE.EDIT_NAME"), ""); // 이름 버튼 - CreateButton(LORE, Material.BOOK, t(player, "START_PAGE.EDIT_LORE"), ""); // 설명 버튼 + CreateButton(NAME, Material.BOOK, t(player, "START_PAGE.EDIT_NAME"), ""); // 이름 버튼 (名稱按鈕) + CreateButton(LORE, Material.BOOK, t(player, "START_PAGE.EDIT_LORE"), ""); // 설명 버튼 (說明按鈕) - // 아이콘 버튼 + // 아이콘 버튼 (圖示按鈕) CreateButton(ICON, Material.getMaterial(StartPage.ccStartPage.get().getString("Buttons." + slotIndex + ".icon")), t(player, "START_PAGE.EDIT_ICON"), ""); String cmdString = StartPage.ccStartPage.get().getString("Buttons." + slotIndex + ".action"); - CreateButton(CMD, Material.REDSTONE_TORCH, t(player, "START_PAGE.EDIT_ACTION"), cmdString == null || cmdString.isEmpty() ? null : "§7/" + cmdString); // 액션 버튼 - CreateButton(SHOP_SHORTCUT, Material.EMERALD, t(player, "START_PAGE.SHOP_SHORTCUT"), ""); // 상점 바로가기 생성 버튼 - CreateButton(DECO, Material.BLUE_STAINED_GLASS_PANE, t(player, "START_PAGE.CREATE_DECO"), ""); // 장식 버튼 - CreateButton(DELETE, Material.BONE, t(player, "START_PAGE.REMOVE"), t(player, "START_PAGE.REMOVE_LORE")); // 삭제 버튼 + CreateButton(CMD, Material.REDSTONE_TORCH, t(player, "START_PAGE.EDIT_ACTION"), cmdString == null || cmdString.isEmpty() ? null : "§7/" + cmdString); // 액션 버튼 (動作按鈕) + CreateButton(SHOP_SHORTCUT, Material.EMERALD, t(player, "START_PAGE.SHOP_SHORTCUT"), ""); // 상점 바로가기 생성 버튼 (建立商店捷徑按鈕) + CreateButton(DECO, Material.BLUE_STAINED_GLASS_PANE, t(player, "START_PAGE.CREATE_DECO"), ""); // 장식 버튼 (裝飾按鈕) + CreateButton(DELETE, Material.BONE, t(player, "START_PAGE.REMOVE"), t(player, "START_PAGE.REMOVE_LORE")); // 삭제 버튼 (刪除按鈕) return inventory; } @@ -64,12 +64,12 @@ public void OnClickUpperInventory(InventoryClickEvent e) Player player = (Player) e.getWhoClicked(); UUID uuid = player.getUniqueId(); - // 돌아가기 + // 돌아가기 (返回) if (e.getSlot() == CLOSE) { DynaShopAPI.openStartPage(player); } - // 버튼 삭제 + // 버튼 삭제 (刪除按鈕) else if (e.getSlot() == DELETE) { StartPage.ccStartPage.get().set("Buttons." + slotIndex, null); @@ -77,7 +77,7 @@ else if (e.getSlot() == DELETE) DynaShopAPI.openStartPage(player); } - //이름 + //이름 (名稱) else if (e.getSlot() == NAME) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "START_PAGE.ENTER_NAME")); @@ -85,7 +85,7 @@ else if (e.getSlot() == NAME) UserUtil.userTempData.put(uuid,"waitforInput" + "btnName"); OnChat.WaitForInput(player); } - //설명 + //설명 (說明) else if (e.getSlot() == LORE) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "START_PAGE.ENTER_LORE")); @@ -93,13 +93,13 @@ else if (e.getSlot() == LORE) UserUtil.userTempData.put(uuid,"waitforInput" + "btnLore"); OnChat.WaitForInput(player); } - //아이콘 + //아이콘 (圖示) else if (e.getSlot() == ICON) { UserUtil.userInteractItem.put(player.getUniqueId(), "startPage/" + slotIndex); DynaShopAPI.openItemPalette(player, 1, "", slotIndex, 1, ""); } - //액션 + //액션 (動作) else if (e.getSlot() == CMD) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "START_PAGE.ENTER_ACTION")); @@ -107,12 +107,12 @@ else if (e.getSlot() == CMD) UserUtil.userTempData.put(uuid,"waitforInput" + "btnAction"); OnChat.WaitForInput(player); } - // 상점 숏컷 + // 상점 숏컷 (商店捷徑) else if (e.getSlot() == SHOP_SHORTCUT) { DynaShopAPI.openShopListUI(player, 1, slotIndex); } - // 장식 +// 장식 (裝飾) else if (e.getSlot() == DECO) { DynaShopAPI.openColorPicker(player, slotIndex); diff --git a/src/main/java/me/sat7/dynamicshop/guis/StockSimulator.java b/src/main/java/me/sat7/dynamicshop/guis/StockSimulator.java index fc3725c..d322c8c 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/StockSimulator.java +++ b/src/main/java/me/sat7/dynamicshop/guis/StockSimulator.java @@ -113,12 +113,12 @@ public void OnClickUpperInventory(InventoryClickEvent e) { Player player = (Player) e.getWhoClicked(); - // 닫기 버튼 + // 닫기 버튼 (關閉按鈕) if (e.getSlot() == CLOSE) { DynaShopAPI.openShopSettingGui(player, shopName); } - // 샘플 아이템 변경 + // 샘플 아이템 변경 (變更範例物品) else if (e.getSlot() == ITEM_1 || e.getSlot() == ITEM_2 || e.getSlot() == ITEM_3 || e.getSlot() == ITEM_4 || e.getSlot() == ITEM_5) { if (e.isLeftClick()) @@ -129,7 +129,7 @@ else if (e.isRightClick()) sampleStartIdx = Clamp(sampleStartIdx, 0, shopItemCount - 5); CreateSampleDatas(sampleStartIdx); } - // 무작위 재고 + // 무작위 재고 (隨機庫存) else if (e.getSlot() == FLUC || e.getSlot() == FLUC_INTERVAL || e.getSlot() == FLUC_STRENGTH) { if (fluc) @@ -167,7 +167,7 @@ else if (e.getSlot() == FLUC || e.getSlot() == FLUC_INTERVAL || e.getSlot() == F UpdateBottomButtons(); } - // 스톡 안정화 + // 스톡 안정화 (庫存穩定) else if (e.getSlot() == STABLE || e.getSlot() == STABLE_INTERVAL || e.getSlot() == STABLE_STRENGTH) { if (stable) @@ -205,7 +205,7 @@ else if (e.getSlot() == STABLE || e.getSlot() == STABLE_INTERVAL || e.getSlot() UpdateBottomButtons(); } - // 시뮬레이션 실행 + // 시뮬레이션 실행 (執行模擬) else if (e.getSlot() == RUN) { if (e.isLeftClick()) @@ -235,14 +235,14 @@ private void CreateSampleDatas(int startIdx) continue; } - int i = Integer.parseInt(item); // options에 대해 적용하지 않기 위해. + int i = Integer.parseInt(item); // options에 대해 적용하지 않기 위해. (為了不套用到options) - if (!data.get().contains(item + ".value")) continue; // 장식용은 스킵 + if (!data.get().contains(item + ".value")) continue; // 장식용은 스킵 (跳過裝飾品) int stock = data.get().getInt(item + ".stock"); - if (stock < 1) continue; // 무한재고에 대해서는 스킵 + if (stock < 1) continue; // 무한재고에 대해서는 스킵 (跳過無限庫存) int oldMedian = data.get().getInt(item + ".median"); - if (oldMedian < 1) continue; // 고정가 상품에 대해서는 스킵 + if (oldMedian < 1) continue; // 고정가 상품에 대해서는 스킵 (跳過固定價格商品) SimulData simulData = new SimulData(); simulData.mat = data.get().getString(item + ".mat"); @@ -286,7 +286,7 @@ private void UpdateBottomButtons() for (int i = 47; i < 54; i++) inventory.setItem(i, null); - // 랜덤 + // 랜덤 (隨機) if (fluc) { ArrayList fluctuationLore = new ArrayList<>(Arrays.asList( @@ -318,7 +318,7 @@ private void UpdateBottomButtons() inventory.setItem(FLUC, flucToggleBtn); } - // 안정화 + // 안정화 (穩定) if (stable) { ArrayList stableLore = new ArrayList<>(Arrays.asList( @@ -359,12 +359,12 @@ private void RunSimulation() } final int[] time = new int[]{ - 48, 48 * 2, 48 * 3, //48 = 20분(마크 1일) - 144 * 2, 144 * 4, 144 * 6, // 144 = 1시간 + 48, 48 * 2, 48 * 3, //48 = 20분(마크 1일) (48 = 20分鐘(Minecraft 1天)) + 144 * 2, 144 * 4, 144 * 6, // 144 = 1시간 (144 = 1小時) 144 * 8, 144 * 10, 144 * 12, 144 * 14, 144 * 16, 144 * 18, 144 * 20, 144 * 22, 144 * 24, - 3456 * 2, 3456 * 3, 3456 * 4, // 3456 = 1일 + 3456 * 2, 3456 * 3, 3456 * 4, // 3456 = 1일 (3456 = 1天) 3456 * 5, 3456 * 6, 3456 * 7}; Random generator = new Random(); diff --git a/src/main/java/me/sat7/dynamicshop/guis/UIManager.java b/src/main/java/me/sat7/dynamicshop/guis/UIManager.java index bae7c59..485a8bb 100644 --- a/src/main/java/me/sat7/dynamicshop/guis/UIManager.java +++ b/src/main/java/me/sat7/dynamicshop/guis/UIManager.java @@ -35,7 +35,7 @@ public void OnOpen(InventoryOpenEvent e) @EventHandler public void OnClose(InventoryCloseEvent e) { - // 기존에 인벤토리가 열려있는 상태에서 다른것을 열면 close가 먼저 불림. + // 기존에 인벤토리가 열려있는 상태에서 다른것을 열면 close가 먼저 불림. (如果已經開啟一個介面,再開啟另一個介面時,會先觸發close事件。) Player player = (Player) e.getPlayer(); currentUI.remove(player); } @@ -52,7 +52,7 @@ public static void Open(Player player, Inventory inventory, InGameUI inGameUI) @Override public void run() { - player.openInventory(inventory); // 가장 먼저 불려야함. (버킷에서 새 인벤이 열릴때 기존의 것이 닫힘처리됨) + player.openInventory(inventory); // 가장 먼저 불려야함. (버킷에서 새 인벤이 열릴때 기존의 것이 닫힘처리됨) (必須最先被呼叫。(因為在Bukkit中,當新的介面開啟時,舊的介面會被處理為關閉)) currentUI.put(player, inGameUI); } diff --git a/src/main/java/me/sat7/dynamicshop/jobshook/JobsHook.java b/src/main/java/me/sat7/dynamicshop/jobshook/JobsHook.java index 1d3b36d..4729f7e 100644 --- a/src/main/java/me/sat7/dynamicshop/jobshook/JobsHook.java +++ b/src/main/java/me/sat7/dynamicshop/jobshook/JobsHook.java @@ -20,7 +20,7 @@ private JobsHook() } - // JobsReborn의 points 수정 + // JobsReborn의 points 수정 (修改JobsReborn的點數) public static boolean addJobsPoint(Player p, double amount) { if (!jobsRebornActive) @@ -30,7 +30,7 @@ public static boolean addJobsPoint(Player p, double amount) } PlayerPoints pp = JobsHook.getJobsPlayerPoints(p); - // 차감 + // 차감 (扣除) if (amount < 0.0) { if (pp.havePoints(amount * -1)) @@ -38,7 +38,7 @@ public static boolean addJobsPoint(Player p, double amount) pp.takePoints(amount * -1); return true; } - // 포인트 부족 + // 포인트 부족 (點數不足) else { p.sendMessage(DynamicShop.dsPrefix(p) + t(p, "MESSAGE.NOT_ENOUGH_POINT") @@ -46,7 +46,7 @@ public static boolean addJobsPoint(Player p, double amount) return false; } } - // 증가 + // 증가 (增加) else { pp.addPoints(amount); @@ -54,7 +54,7 @@ public static boolean addJobsPoint(Player p, double amount) } } - // JobsReborn. 플레이어의 잔액 확인 + // JobsReborn. 플레이어의 잔액 확인 (JobsReborn. 確認玩家餘額) public static double getCurJobPoints(Player p) { JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(p); diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Buy.java b/src/main/java/me/sat7/dynamicshop/transactions/Buy.java index e41c3ba..e117fcd 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Buy.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Buy.java @@ -58,7 +58,7 @@ else if (currency.equalsIgnoreCase(Constants.S_PLAYERPOINT)) playerBalance = econ.getBalance(player); } - // 플레이어 당 거래량 제한 확인 + // 플레이어 당 거래량 제한 확인 (確認每個玩家的交易限制) int tradeIdxInt = Integer.parseInt(tradeIdx); int tradeLimitPerPlayer = ShopUtil.GetBuyLimitPerPlayer(shopName, tradeIdxInt); int playerTradingVolume = UserUtil.GetPlayerTradingVolume(player, shopName, HashUtil.GetItemHash(itemStack)); @@ -92,7 +92,7 @@ else if (currency.equalsIgnoreCase(Constants.S_PLAYERPOINT)) tradeAmount++; } - // 실 구매 가능량이 0이다 = 돈이 없다. + // 실 구매 가능량이 0이다 = 돈이 없다. (實際可購買量為0 = 沒有錢) if (tradeAmount <= 0) { String message = ""; @@ -118,7 +118,7 @@ else if (currency.equalsIgnoreCase(Constants.S_EXP)) return; } - // 상점 재고 부족 + // 상점 재고 부족 (商店庫存不足) if (!infiniteStock && stockOld <= tradeAmount) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.OUT_OF_STOCK")); @@ -180,34 +180,34 @@ else if (currency.equalsIgnoreCase(Constants.S_EXP)) leftAmount -= giveAmount; } - // 플레이어 당 거래량 제한 아이템에 대한 처리. + // 플레이어 당 거래량 제한 아이템에 대한 처리. (處理每個玩家的交易限制物品) if (tradeLimitPerPlayer < Integer.MAX_VALUE) { UserUtil.OnPlayerTradeLimitedItem(player, shopName, HashUtil.GetItemHash(itemStack), tradeAmount, false); } - //로그 기록 + //로그 기록 (日誌記錄) LogUtil.addLog(shopName, itemStack.getType().toString(), tradeAmount, priceSum, currency, player.getName()); - // 메시지 출력 + // 메시지 출력 (輸出訊息) SendBuyMessage(currency, econ, player, tradeAmount, priceSum, itemStack); - // 플레이어에게 소리 재생 + // 플레이어에게 소리 재생 (向玩家播放音效) SoundUtil.playerSoundEffect(player, "buy"); - // 상점 계좌 잔액 수정 + // 상점 계좌 잔액 수정 (修改商店帳戶餘額) if (data.get().contains("Options.Balance")) { ShopUtil.addShopBalance(shopName, priceSum); } - // 커맨드 실행 + // 커맨드 실행 (執行指令) RunBuyCommand(data, player, shopName, itemStack, tradeAmount, priceSum); ShopUtil.shopDirty.put(shopName, true); DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); - // 이벤트 호출 + // 이벤트 호출 (呼叫事件) ShopBuySellEvent event = new ShopBuySellEvent(true, priceBuyOld, Calc.getCurrentPrice(shopName, tradeIdx, true), priceSellOld, DynaShopAPI.getSellPrice(shopName, itemStack), stockOld, DynaShopAPI.getStock(shopName, itemStack), DynaShopAPI.getMedian(shopName, itemStack), shopName, itemStack, 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 86f242f..3d49dac 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Calc.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Calc.java @@ -12,7 +12,7 @@ private Calc() } - // 특정 아이탬의 현재 가치를 계산 (다이나믹 or 고정가) (세금 반영) + // 특정 아이탬의 현재 가치를 계산 (다이나믹 or 고정가) (세금 반영) (計算特定物品的目前價值(動態或固定價格)(已含稅)) public static double getCurrentPrice(String shopName, String idx, boolean buy) { return getCurrentPrice(shopName, idx, buy, false); @@ -57,14 +57,14 @@ public static double getCurrentPrice(String shopName, String idx, boolean buy, b price = max; } - // 할인 + // 할인 (折扣) if (data.contains(idx + ".discount")) { int discount = data.getInt(idx + ".discount"); price = price * (100 - discount) / 100; } - // 판매세 계산 (임의 지정된 판매가치가 없는 경우에만) + // 판매세 계산 (임의 지정된 판매가치가 없는 경우에만) (計算銷售稅(僅在沒有任意指定銷售價值時)) if (!buy && !data.contains(idx + ".value2")) { double tax = ((price / 100) * getTaxRate(shopName)); @@ -84,7 +84,7 @@ public static double getCurrentPrice(String shopName, String idx, boolean buy, b } } - // 특정 아이탬의 앞으로 n개의 가치합을 계산 (다이나믹 or 고정가) ([0] 세금 반영된 값, [1] 세금) + // 특정 아이탬의 앞으로 n개의 가치합을 계산 (다이나믹 or 고정가) ([0] 세금 반영된 값, [1] 세금) (計算特定物品未來n個的價值總和(動態或固定價格)([0]含稅值,[1]稅金)) public static double[] calcTotalCost(String shopName, String idx, int amount) { FileConfiguration data = ShopUtil.shopConfigFiles.get(shopName).get(); @@ -139,14 +139,14 @@ public static double[] calcTotalCost(String shopName, String idx, int amount) } } - // 할인 + // 할인 (折扣) if (data.contains(idx + ".discount")) { int discount = data.getInt(idx + ".discount"); total = total * (100 - discount) / 100; } - // 세금 적용 (판매가 별도지정시 세금계산 안함) + // 세금 적용 (판매가 별도지정시 세금계산 안함) (套用稅金(另外指定售價時不計算稅金)) double tax = 0; if (amount < 0 && !data.contains(idx + ".value2")) { @@ -169,7 +169,7 @@ public static double[] calcTotalCost(String shopName, String idx, int amount) return new double[]{total, tax}; } - // 상점의 세율 반환 + // 상점의 세율 반환 (傳回商店的稅率) public static int getTaxRate(String shopName) { CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); diff --git a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java index 8c7efda..6146fdc 100644 --- a/src/main/java/me/sat7/dynamicshop/transactions/Sell.java +++ b/src/main/java/me/sat7/dynamicshop/transactions/Sell.java @@ -47,7 +47,7 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh double deliveryCharge = ShopUtil.CalcShipping(shopName, player); double priceSum = -deliveryCharge; - // 실제 판매 가능량 확인 + // 실제 판매 가능량 확인 (確認實際可銷售數量) int tradeAmount; if (player != null) { @@ -71,7 +71,7 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh tradeAmount = Math.max(0, tradeAmount); } - // 판매할 아이탬이 없음 + // 판매할 아이탬이 없음 (沒有可銷售的物品) if (tradeAmount == 0) { if (player != null) @@ -81,7 +81,7 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh return 0; } - // 플레이어 당 거래량 제한 확인 + // 플레이어 당 거래량 제한 확인 (確認每個玩家的交易限制) int sellLimit = ShopUtil.GetSellLimitPerPlayer(shopName, tradeIdx); if (player != null && sellLimit != 0) { @@ -93,11 +93,11 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh } } - // 비용 계산 + // 비용 계산 (計算費用) double[] calcResult = Calc.calcTotalCost(shopName, String.valueOf(tradeIdx), -tradeAmount); priceSum += calcResult[0]; - // 계산된 비용에 대한 처리 시도 + // 계산된 비용에 대한 처리 시도 (嘗試處理計算出的費用) Economy econ = DynamicShop.getEconomy(); if (!CheckTransactionSuccess(currencyType, player, priceSum)) { @@ -105,7 +105,7 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh return 0; } - // 플레이어 인벤토리에서 아이템 제거 + // 플레이어 인벤토리에서 아이템 제거 (從玩家背包中移除物品) if (player != null) { if (isShiftClick) @@ -154,43 +154,43 @@ public static double quickSellItem(Player player, ItemStack itemStack, String sh player.updateInventory(); } - // 플레이어 당 거래량 제한 아이템에 대한 처리. + // 플레이어 당 거래량 제한 아이템에 대한 처리. (處理每個玩家的交易限制物品) if (player != null & sellLimit != Integer.MIN_VALUE) { UserUtil.OnPlayerTradeLimitedItem(player, shopName, HashUtil.GetItemHash(itemStack), tradeAmount, true); } - // 로그 기록 + // 로그 기록 (日誌記錄) LogUtil.addLog(shopName, itemStack.getType().toString(), -tradeAmount, priceSum, currencyType, player != null ? player.getName() : shopName); if (player != null) { - // 플레이어에게 메시지 출력 + // 플레이어에게 메시지 출력 (向玩家輸出訊息) SendSellMessage(currencyType, econ, player, tradeAmount, priceSum, itemStack); - // 플레이어에게 소리 재생 + // 플레이어에게 소리 재생 (向玩家播放音效) if (playSound) player.playSound(player.getLocation(), Sound.valueOf("ENTITY_EXPERIENCE_ORB_PICKUP"), 1, 1); } - // 상점 계좌 잔액 수정 + // 상점 계좌 잔액 수정 (修改商店帳戶餘額) if (data.get().contains("Options.Balance")) { ShopUtil.addShopBalance(shopName, priceSum * -1); } - // 상점 재고 증가 + // 상점 재고 증가 (增加商店庫存) if (stockOld > 0) { data.get().set(tradeIdx + ".stock", MathUtil.SafeAdd(stockOld, tradeAmount)); } - // 커맨드 실행 + // 커맨드 실행 (執行指令) RunSellCommand(data, player, shopName, itemStack, tradeAmount, priceSum, calcResult[1]); - // 더티 + // 더티 (Dirty) ShopUtil.shopDirty.put(shopName, true); - // 이벤트 호출 + // 이벤트 호출 (呼叫事件) if (player != null) { ShopBuySellEvent event = new ShopBuySellEvent(false, priceBuyOld, Calc.getCurrentPrice(shopName, String.valueOf(tradeIdx), true), @@ -213,14 +213,14 @@ public static void sell(String currency, Player player, String shopName, String double priceSellOld = DynaShopAPI.getSellPrice(shopName, itemStack); 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, itemStack.getAmount())[0]) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.SHOP_BAL_LOW")); return; } - // 상점이 매입을 거절. + // 상점이 매입을 거절. (商店拒絕收購) int stock = data.get().getInt(tradeIdx + ".stock"); int maxStock = data.get().getInt(tradeIdx + ".maxStock", -1); if (maxStock != -1 && maxStock <= stock) @@ -229,7 +229,7 @@ public static void sell(String currency, Player player, String shopName, String return; } - // 실제 판매 가능량 확인 + // 실제 판매 가능량 확인 (確認實際可銷售數量) int tradeAmount = itemStack.getAmount(); int playerHas = GetPlayerItemCount(player, itemStack); if (tradeAmount > playerHas) @@ -237,7 +237,7 @@ public static void sell(String currency, Player player, String shopName, String tradeAmount = playerHas; } - // 판매할 아이탬이 없음 + // 판매할 아이탬이 없음 (沒有可銷售的物品) if (tradeAmount == 0) { player.sendMessage(DynamicShop.dsPrefix(player) + t(player, "MESSAGE.NO_ITEM_TO_SELL")); @@ -250,7 +250,7 @@ public static void sell(String currency, Player player, String shopName, String tradeAmount = Math.max(0, tradeAmount); } - // 플레이어 당 거래량 제한 확인 + // 플레이어 당 거래량 제한 확인 (確認每個玩家的交易限制) int tradeIdxInt = Integer.parseInt(tradeIdx); int tradeLimitPerPlayer = ShopUtil.GetSellLimitPerPlayer(shopName, tradeIdxInt); if (tradeLimitPerPlayer != 0) @@ -260,58 +260,58 @@ public static void sell(String currency, Player player, String shopName, String return; } - // 비용 계산 + // 비용 계산 (計算費用) double[] calcResult = Calc.calcTotalCost(shopName, tradeIdx, -tradeAmount); priceSum += calcResult[0]; - // 계산된 비용에 대한 처리 시도 + // 계산된 비용에 대한 처리 시도 (嘗試處理計算出的費用) Economy econ = DynamicShop.getEconomy(); if (!CheckTransactionSuccess(currency, player, priceSum)) return; - // 플레이어 인벤토리에서 아이템 제거 + // 플레이어 인벤토리에서 아이템 제거 (從玩家背包中移除物品) ItemStack delete = new ItemStack(itemStack); delete.setAmount(tradeAmount); player.getInventory().removeItem(delete); player.updateInventory(); - // 플레이어 당 거래량 제한 아이템에 대한 처리. + // 플레이어 당 거래량 제한 아이템에 대한 처리. (處理每個玩家的交易限制物品) if (tradeLimitPerPlayer != Integer.MIN_VALUE) { UserUtil.OnPlayerTradeLimitedItem(player, shopName, HashUtil.GetItemHash(itemStack), tradeAmount, true); } - // 로그 기록 + // 로그 기록 (日誌記錄) LogUtil.addLog(shopName, itemStack.getType().toString(), -tradeAmount, priceSum, currency, player.getName()); // 메시지 출력 SendSellMessage(currency, econ, player, tradeAmount, priceSum, itemStack); - // 플레이어에게 소리 재생 + // 플레이어에게 소리 재생 (向玩家播放音效) SoundUtil.playerSoundEffect(player, "sell"); - // 상점 계좌 잔액 수정 + // 상점 계좌 잔액 수정 (修改商店帳戶餘額) if (data.get().contains("Options.Balance")) { ShopUtil.addShopBalance(shopName, priceSum * -1); } - // 상점 재고 증가 + // 상점 재고 증가 (增加商店庫存) if (!infiniteStock) { data.get().set(tradeIdx + ".stock", MathUtil.SafeAdd(stockOld, tradeAmount)); } - // 커맨드 실행 + // 커맨드 실행 (執行指令) RunSellCommand(data, player, shopName, itemStack, tradeAmount, priceSum, calcResult[1]); - // 더티 + // 더티 (Dirty) ShopUtil.shopDirty.put(shopName, true); - // 이벤트 호출 + // 이벤트 호출 (呼叫事件) ShopBuySellEvent event = new ShopBuySellEvent(false, priceBuyOld, Calc.getCurrentPrice(shopName, tradeIdx, true), priceSellOld, DynaShopAPI.getSellPrice(shopName, itemStack), stockOld, DynaShopAPI.getStock(shopName, itemStack), DynaShopAPI.getMedian(shopName, itemStack), shopName, itemStack, player); Bukkit.getPluginManager().callEvent(event); - // UI 갱신 + // UI 갱신 (UI更新) DynaShopAPI.openItemTradeGui(player, shopName, tradeIdx); } diff --git a/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java index 6cc6374..58a7865 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/ConfigUtil.java @@ -281,6 +281,11 @@ public static boolean GetEnableInventoryClickSearch_Shop() return config.getBoolean("UI.EnableInventoryClickSearch.Shop"); } + public static boolean GetDebugMode() + { + return config.getBoolean("DebugMode"); + } + // [ Log ] ========== public static boolean GetSaveLogs() diff --git a/src/main/java/me/sat7/dynamicshop/utilities/ItemsUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/ItemsUtil.java index 0ffd079..9462d16 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/ItemsUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/ItemsUtil.java @@ -18,7 +18,7 @@ private ItemsUtil() } - // 지정된 이름,lore,수량의 아이탬 스택 생성및 반환 + // 지정된 이름,lore,수량의 아이탬 스택 생성및 반환 (建立並傳回具有指定名稱、lore和數量的物品堆疊) public static ItemStack createItemStack(Material material, ItemMeta _meta, String name, ArrayList lore, int amount) { ItemStack istack = new ItemStack(material, amount); @@ -31,7 +31,7 @@ public static ItemStack createItemStack(Material material, ItemMeta _meta, Strin return istack; } - // 아이탬 이름 정돈 + // 아이탬 이름 정돈 (整理物品名稱) public static String getBeautifiedName(Material mat) { return getBeautifiedName(mat.toString()); @@ -53,7 +53,7 @@ public static String getBeautifiedName(String matName) return finalStr.toString(); } - // 아이탬 정보 출력 + // 아이탬 정보 출력 (輸出物品資訊) public static void sendItemInfo(CommandSender sender, String shopName, int idx, String msgType) { if(sender instanceof Player) diff --git a/src/main/java/me/sat7/dynamicshop/utilities/LogUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/LogUtil.java index 557878e..d747d64 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/LogUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/LogUtil.java @@ -26,17 +26,17 @@ private LogUtil() } - // <로그파일 경로 + 이름, 로그데이타> - public static final ConcurrentHashMap> log = new ConcurrentHashMap<>(); // 아직 파일에 저장되지 않은 로그들 // todo 서버가 꺼질때 저장해야함. + // <로그파일 경로 + 이름, 로그데이타> (<日誌檔案路徑 + 名稱, 日誌資料>) + public static final ConcurrentHashMap> log = new ConcurrentHashMap<>(); // 아직 파일에 저장되지 않은 로그들 // todo 서버가 꺼질때 저장해야함. (尚未儲存到檔案的日誌 // todo 伺服器關閉時需要儲存) - // 거래 로그 기록 + // 거래 로그 기록 (交易日誌紀錄) public static void addLog(String shopName, String itemName, int amount, double value, String curr, String player) { if (ConfigUtil.GetSaveLogs()) { CustomConfig data = ShopUtil.shopConfigFiles.get(shopName); - if (data.get().contains("Options.log") && data.get().getBoolean("Options.log")) // 옛날엔 이렇게 저장했음. + if (data.get().contains("Options.log") && data.get().getBoolean("Options.log")) // 옛날엔 이렇게 저장했음. (過去是這樣儲存的) { data.get().set("Options.log.active", true); } diff --git a/src/main/java/me/sat7/dynamicshop/utilities/SoundUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/SoundUtil.java index 600d4f1..df7b91c 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/SoundUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/SoundUtil.java @@ -16,7 +16,7 @@ private SoundUtil() } - // 소리 재생 + // 소리 재생 (播放音效) public static void playerSoundEffect(Player player, String key) { try diff --git a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java index 9648320..2c999ef 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/TabCompleteUtil.java @@ -211,7 +211,7 @@ else if (cmd.getName().equalsIgnoreCase("shop") && args.length == 1) { int i = Integer.parseInt(s); if (!data.get().contains(s + ".value")) - continue; // 장식용임 + continue; // 장식용임 (裝飾用) temp.add(s + "/" + data.get().getString(s + ".mat")); } catch (Exception ignored) { diff --git a/src/main/java/me/sat7/dynamicshop/utilities/UserUtil.java b/src/main/java/me/sat7/dynamicshop/utilities/UserUtil.java index 0d56567..44f0754 100644 --- a/src/main/java/me/sat7/dynamicshop/utilities/UserUtil.java +++ b/src/main/java/me/sat7/dynamicshop/utilities/UserUtil.java @@ -12,7 +12,7 @@ public final class UserUtil { - public static CustomConfig ccUser = new CustomConfig(); // 가급적 save 호출 피할 것. onDisable 에서 처리함. + public static CustomConfig ccUser = new CustomConfig(); // 가급적 save 호출 피할 것. onDisable 에서 처리함. (盡量避免呼叫save。在onDisable中處理) public static final HashMap userTempData = new HashMap<>(); public static final HashMap userInteractItem = new HashMap<>(); @@ -36,7 +36,7 @@ private static void BackwardCompatibility() ConfigurationSection cs = ccUser.get().getConfigurationSection(s); if (cs != null) { - // 구버전에 있던 데이터를 삭제함. + // 구버전에 있던 데이터를 삭제함. (刪除舊版本中的資料) cs.set("tmpString", null); cs.set("interactItem", null); } @@ -104,9 +104,9 @@ public static void OnPluginDisable() // ---------------------------------------------------------------------- - // 구매 & 판매 수량 제한 - // - 상점의 데이터는 [상점+idx] 로 관리. - // - 유저의 데이터는 [상점+hash] 로 관리. + // 구매 & 판매 수량 제한 (購買 & 販賣 數量限制) + // - 상점의 데이터는 [상점+idx] 로 관리. (- 商店的資料以 [商店+idx] 方式管理) + // - 유저의 데이터는 [상점+hash] 로 관리. (- 使用者的資料以 [商店+hash] 方式管理) public static final HashMap>> tradingVolume = new HashMap<>(); public static void LoadTradeLimitDataFromYML() diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2a4033d..c900131 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -32,4 +32,5 @@ Log.LogCullAgeMinutes: 7200 Log.LogCullTimeMinutes: 120 ShopYmlBackup.Enable: true ShopYmlBackup.IntervalMinutes: 60 -ShopYmlBackup.CullAgeMinutes: 300 \ No newline at end of file +ShopYmlBackup.CullAgeMinutes: 300 +DebugMode: false \ No newline at end of file From a69e36f7acfe8b972266cc9678c164ccee5b0d87 Mon Sep 17 00:00:00 2001 From: creamgod45 Date: Thu, 20 Nov 2025 01:49:21 +0800 Subject: [PATCH 6/6] Update supported Minecraft version in README to 1.21.10 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 188e26e..c70c2eb 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Supported Minecraft versions: 1.16.5 ~ 1.21.5 +Supported Minecraft versions: 1.16.5 ~ 1.21.10 Free version https://www.spigotmc.org/resources/65603/