From 5aac4d2d72fe696c4fddac0723f1314a1caa2e3a Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 16 Jun 2025 12:33:16 +0200 Subject: [PATCH] PDC Upgrade --- .../ecoCraftCore/commands/MoneyCommand.java | 24 ++++++- .../ecoCraftCore/commands/RulerCommand.java | 3 +- .../soukup/ecoCraftCore/events/ShopLogic.java | 63 ++++++++++++++----- .../events/VirtualChestLogic.java | 4 -- .../ecoCraftCore/utilities/Messages.java | 39 +++++++++--- src/main/resources/messages.yml | 27 +++++--- 6 files changed, 121 insertions(+), 39 deletions(-) diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java index a2400f0..1af3e0b 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/MoneyCommand.java @@ -51,7 +51,9 @@ public class MoneyCommand { } private static int getBalance(CommandContext context){ - if (!(context.getSource().getSender() instanceof Player player)){ + CommandSender commandSender = context.getSource().getSender(); + if (!(commandSender instanceof Player player)){ + Messages.send(commandSender, "generic.error.not-player"); return 0; } Account account = Account.getOrCreate(player); @@ -77,8 +79,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount,"player", sender.getName(), "player", receiver.getName(), "player"); transaction.process(); + Messages.send(sender, "money.send.player", PHHM.get(transaction)); - Messages.send(receiver, "money.receiver.player", PHHM.get(transaction)); + Messages.send(receiver, "money.receive.player", PHHM.get(transaction)); return 1; } @@ -94,6 +97,8 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount,"admin", commandSender.getName(), "player", receiver.getName(), "admin"); transaction.process(); + Messages.send(commandSender, "money.give.player", PHHM.get(transaction)); + return 1; } @@ -103,6 +108,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount,"admin", player.getName(), "player", player.getName(), "admin"); transaction.process(); + + Messages.send(player, "money.give.self", PHHM.get(transaction)); + return 1; } @@ -114,6 +122,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount,"admin", commandSender.getName(), type, owner, "admin"); transaction.process(); + + Messages.send(commandSender, "money.give.other", PHHM.get(transaction)); + return 1; } private static int removeMoneyPlayer(CommandContext context) throws CommandSyntaxException { @@ -126,6 +137,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount, "player", sender.getName(),"admin", commandSender.getName(), "admin"); transaction.process(); + + Messages.send(commandSender, "money.remove.player", PHHM.get(transaction)); + return 1; } private static int removeMoneySelf(CommandContext context){ @@ -134,6 +148,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount,"player", player.getName(),"admin", player.getName(), "admin"); transaction.process(); + + Messages.send(player, "money.remove.self", PHHM.get(transaction)); + return 1; } private static int removeMoneyOther(CommandContext context){ @@ -144,6 +161,9 @@ public class MoneyCommand { Transaction transaction = new Transaction(amount, type, owner,"admin", commandSender.getName(), "admin"); transaction.process(); + + Messages.send(commandSender, "money.remove.other", PHHM.get(transaction)); + return 1; } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java b/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java index ad1b6bb..3240456 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/commands/RulerCommand.java @@ -8,6 +8,7 @@ import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import xyz.soukup.ecoCraftCore.utilities.Messages; import xyz.soukup.ecoCraftCore.utilities.PDC; public class RulerCommand { @@ -21,7 +22,7 @@ public class RulerCommand { CommandSender commandSender = context.getSource().getSender(); if (!(commandSender instanceof Player)){ - commandSender.sendPlainMessage("Musíš být hráč"); + Messages.send(commandSender, "generic.error.not-player"); return 0; } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java index 1e18ac6..1e1f9c5 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/events/ShopLogic.java @@ -20,8 +20,11 @@ import xyz.soukup.ecoCraftCore.objects.Transaction; import xyz.soukup.ecoCraftCore.objects.VirtualChest; import xyz.soukup.ecoCraftCore.utilities.Converter; import xyz.soukup.ecoCraftCore.utilities.InventoryUtils; +import xyz.soukup.ecoCraftCore.utilities.Messages; import xyz.soukup.ecoCraftCore.utilities.PDC; +import java.util.HashMap; + public class ShopLogic implements Listener { @EventHandler @@ -52,12 +55,13 @@ public class ShopLogic implements Listener { event.setCancelled(true); + Player player = event.getPlayer(); + if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){ - event.getPlayer().sendPlainMessage("to by neslo"); + Messages.send(player, "shop.error.chest-open"); return; } - Player player = event.getPlayer(); Gui gui = buildShopGui(player, shop); @@ -78,18 +82,26 @@ public class ShopLogic implements Listener { int amount = shop.getAmount(); if (buyPrice != 0){ + HashMap hashMap = new HashMap<>(); + + hashMap.put("amount", Integer.toString(amount)); + hashMap.put("price", String.format("%.2f", buyPrice)); + GuiItem one = ItemBuilder .from(Material.LIME_WOOL) - .name(Converter.toComponent("&aKoupit " + amount + "ks za " + String.format("%.2f", buyPrice))) + .name(Messages.get("menu.shop.buy", hashMap)) .asGuiItem(); one.setAction(event -> { event.setCancelled(true); ShopLogic.buy(shop, player, 1); }); + hashMap.put("amount", Integer.toString(amount*8)); + hashMap.put("price", String.format("%.2f", buyPrice*8)); + GuiItem eight = ItemBuilder .from(Material.LIME_WOOL) - .name(Converter.toComponent("&aKoupit " + amount*8 + "ks za " + String.format("%.2f", buyPrice*8))) + .name(Messages.get("menu.shop.buy", hashMap)) .asGuiItem(); eight.setAction(event -> { event.setCancelled(true); @@ -102,9 +114,14 @@ public class ShopLogic implements Listener { } if (sellPrice != 0){ + HashMap hashMap = new HashMap<>(); + + hashMap.put("amount", Integer.toString(amount)); + hashMap.put("price", String.format("%.2f", sellPrice)); + GuiItem one = ItemBuilder .from(Material.YELLOW_WOOL) - .name(Converter.toComponent("&eProdat " + amount + "ks za " + String.format("%.2f", sellPrice))) + .name(Messages.get("menu.shop.sell", hashMap)) .asGuiItem(); one.setAction(event -> { @@ -112,9 +129,13 @@ public class ShopLogic implements Listener { ShopLogic.sell(shop, player, 1); }); + + hashMap.put("amount", Integer.toString(amount*8)); + hashMap.put("price", String.format("%.2f", sellPrice*8)); + GuiItem eight = ItemBuilder .from(Material.YELLOW_WOOL) - .name(Converter.toComponent("&eProdat " + amount*8 + "ks za " + String.format("%.2f", sellPrice*8))) + .name(Messages.get("menu.shop.sell", hashMap)) .asGuiItem(); eight.setAction(event -> { @@ -140,7 +161,7 @@ public class ShopLogic implements Listener { public static void buy(Shop shop, Player player, int multiplier){ if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){ - player.sendPlainMessage("to by neslo"); + Messages.send(player, "shop.error.chest-open"); return; } @@ -152,7 +173,7 @@ public class ShopLogic implements Listener { Account account = Account.getOrCreate(player); if (price > account.getBalance()){ - player.sendPlainMessage("nemaš dost mony"); + Messages.send(player, "generic.error.no-money.self"); return; } @@ -165,12 +186,12 @@ public class ShopLogic implements Listener { Inventory playerInventory = player.getInventory(); if (InventoryUtils.getSpaceLeft(playerInventory, itemStack) < amount){ - player.sendPlainMessage("Nemáš dost místa v invu"); + Messages.send(player, "generic.error.no-space.self"); return; } if (!virtualChest.removeItem(itemStack)){ - player.sendPlainMessage("není dost věcí v chestce"); + Messages.send(player, "generic.error.no-item.shop"); return; } @@ -182,12 +203,19 @@ public class ShopLogic implements Listener { transaction.process(); + HashMap hashMap = new HashMap<>(); + hashMap.put("count", Integer.toString(amount)); + hashMap.put("price", String.format("%.2f", price)); + hashMap.put("item", itemStack.displayName().toString()); + + Messages.send(player, "shop.buy", hashMap); + } public static void sell(Shop shop, Player player, int multiplier){ if (VirtualChestLogic.openedChests.containsKey(shop.getVirtualChestID())){ - player.sendPlainMessage("to by neslo"); + Messages.send(player, "shop.error.chest-open"); return; } @@ -199,7 +227,7 @@ public class ShopLogic implements Listener { Account account = Account.getOrCreate(shop.getOwnerType(), shop.getOwner()); if (price > account.getBalance()){ - player.sendPlainMessage("shop nemá mony"); + Messages.send(player, "generic.error.no-money.self"); return; } @@ -212,12 +240,12 @@ public class ShopLogic implements Listener { Inventory playerInventory = player.getInventory(); if (InventoryUtils.getCount(playerInventory, itemStack) < amount){ - player.sendPlainMessage("nemáš prodejní itemy"); + Messages.send(player, "generic.error.no-item.self"); return; } if (!virtualChest.addItem(itemStack)){ - player.sendPlainMessage("není dost místa v chestce"); + Messages.send(player, "generic.error.no-space.shop"); return; } @@ -228,5 +256,12 @@ public class ShopLogic implements Listener { Transaction transaction = new Transaction(price, "player", shop.getOwner(), "player", player.getName(), "playerShop", shop.getItemName() ,Integer.toString(amount)); transaction.process(); + HashMap hashMap = new HashMap<>(); + hashMap.put("count", Integer.toString(amount)); + hashMap.put("price", String.format("%.2f", price)); + hashMap.put("item", itemStack.displayName().toString()); + + Messages.send(player, "shop.sell", hashMap); + } } diff --git a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java index 7c9d93d..5ac6fc7 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/events/VirtualChestLogic.java @@ -45,13 +45,9 @@ public class VirtualChestLogic implements Listener { Integer count = openedChests.get(id); count++; openedChests.put(id, count); - player.sendPlainMessage(Integer.toString(count)); return; } - player.sendPlainMessage(Integer.toString(id)); - - VirtualChest virtualChest = VirtualChest.findById(id); if (virtualChest == null){ diff --git a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java index 63f9b09..03bf012 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/utilities/Messages.java @@ -12,16 +12,16 @@ import org.bukkit.entity.Player; import java.io.File; import java.io.IOException; import java.util.HashMap; +import java.util.List; import java.util.Objects; import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin; public class Messages { - private static File messagesFile; private static YamlConfiguration messages; public static void init() throws IOException { - messagesFile = new File(plugin.getDataFolder(), "messages.yml"); + File messagesFile = new File(plugin.getDataFolder(), "messages.yml"); plugin.saveResource("messages.yml", true); @@ -36,18 +36,12 @@ public class Messages { } public static Component get(String key) { - String string = messages.getString(key); - if (string == null){ - return Component.text(key); - } + String string = getString(key); return MiniMessage.miniMessage().deserialize(string); } public static Component get(String key, HashMap placeholders){ - String string = messages.getString(key); - if (string == null){ - return Component.text(key); - } + String string = getString(key); TagResolver.Builder resolverBuilder = TagResolver.builder(); placeholders.forEach((k, value) -> resolverBuilder.resolver(Placeholder.unparsed(k, value))); @@ -63,4 +57,29 @@ public class Messages { public static void send(CommandSender sender, String key, HashMap placeholders){ sender.sendMessage(get(key, placeholders)); } + + private static String getString(String key){ + StringBuilder string = new StringBuilder(); + + if (messages.isString(key)){ + string = new StringBuilder(Objects.requireNonNull(messages.getString(key))); + } else if (messages.isList(key)) { + + boolean isFirst = true; + + List list = messages.getStringList(key); + for (String s : list){ + if (isFirst){ + isFirst = false; + string.append(s); + }else { + string.append("\n").append(s); + } + } + }else { + string = new StringBuilder(key); + } + + return string.toString(); + } } diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index d372e74..3479051 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -1,5 +1,6 @@ generic: error: + not-player: "Na tuto akci musíš být hráč" no-funds: self: "Nemáš dost pěněz" shop: "Obchod nemá dost peněz" @@ -14,25 +15,35 @@ shop: already-shop: "Tato cedule již je obchod" not-marked: "Musíš označit ceduly a chestku, aby jsi mohl vytvořit obchod" empty-hand: "Nedržíš v ruce žádný item" - buy: "Koupil jsi x za " - sell: "Prodal jsi x za " + chest-open: "Nelze obchodovat, když je chestka obchodu otevřena." + buy: "Koupil jsi x za $" + sell: "Prodal jsi x za $" created: "Obchod vytvořen." money: error: self-send: "Nemůžeš poslat peníze sám sobě" balance: self: "Tvůj zůstatek: " - player: "Zůstatek hráče : " + player: "Zůstatek hráče : $" give: - self: "Dal sis " - player: "Dal jsi hráči " + self: "Dal sis $" + player: "Dal jsi $ hráči " + other: "Na účet typu jsi poslal $" send: - player: "Poslal jsi hráči " + player: "Poslal jsi $ hráči " receive: - player: "Obdržel jsi od hráče " + player: "Obdržel jsi $ od hráče " + remove: + self: "Odebral sis $" + player: "Hráči jsi odebral $" + other: "Z účtu typu jsi odebral $" marker: marked: chest: "Truhla označena (,,)" sign: "Cedule označena (,,)" primary: "První pozice označena (,,)" - secondary: "Druhá pozice označena (,,)" \ No newline at end of file + secondary: "Druhá pozice označena (,,)" +menu: + shop: + buy: "Koupit ks za $" + sell: "Prodat ks za $" \ No newline at end of file