From d1e03fd3dcd26594f66702912e71bd6644b899d1 Mon Sep 17 00:00:00 2001 From: Krfcm Date: Sun, 2 Nov 2025 03:10:56 +0100 Subject: [PATCH] Initial commit --- pom.xml | 70 ++++++ .../github/krzysiek944/mscrole/MSCROLE.java | 101 ++++++++ .../mscrole/commands/MscroleAdminCommand.java | 222 ++++++++++++++++++ .../mscrole/commands/MscroleCommand.java | 130 ++++++++++ .../krzysiek944/mscrole/gui/AdminGUI.java | 79 +++++++ .../krzysiek944/mscrole/gui/ShopGUI.java | 133 +++++++++++ .../mscrole/listeners/GuiListener.java | 93 ++++++++ .../mscrole/listeners/PlayerJoinListener.java | 26 ++ .../mscrole/services/CurrencyManager.java | 53 +++++ .../mscrole/services/ShopManager.java | 36 +++ .../mscrole/utils/DataManager.java | 49 ++++ .../mscrole/utils/MessageManager.java | 37 +++ .../mscrole/utils/ShopDataManager.java | 49 ++++ src/main/resources/config.yml | 17 ++ src/main/resources/data.yml | 0 src/main/resources/message.yml | 66 ++++++ src/main/resources/plugin.yml | 16 ++ src/main/resources/shop.yml | 35 +++ target/MSCROLE-1.2.jar | Bin 0 -> 31698 bytes .../github/krzysiek944/mscrole/MSCROLE.class | Bin 0 -> 5378 bytes .../commands/MscroleAdminCommand.class | Bin 0 -> 8836 bytes .../mscrole/commands/MscroleCommand.class | Bin 0 -> 5468 bytes .../krzysiek944/mscrole/gui/AdminGUI.class | Bin 0 -> 3234 bytes .../krzysiek944/mscrole/gui/ShopGUI.class | Bin 0 -> 6603 bytes .../mscrole/listeners/GuiListener$1.class | Bin 0 -> 856 bytes .../mscrole/listeners/GuiListener.class | Bin 0 -> 5743 bytes .../listeners/PlayerJoinListener.class | Bin 0 -> 2278 bytes .../mscrole/services/CurrencyManager.class | Bin 0 -> 2713 bytes .../mscrole/services/ShopManager.class | Bin 0 -> 2276 bytes .../mscrole/utils/DataManager.class | Bin 0 -> 2190 bytes .../mscrole/utils/MessageManager.class | Bin 0 -> 1897 bytes .../mscrole/utils/ShopDataManager.class | Bin 0 -> 2202 bytes target/classes/config.yml | 17 ++ target/classes/data.yml | 0 target/classes/message.yml | 66 ++++++ target/classes/plugin.yml | 16 ++ target/classes/shop.yml | 35 +++ target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 13 + .../compile/default-compile/inputFiles.lst | 12 + target/original-MSCROLE-1.2.jar | Bin 0 -> 31120 bytes 41 files changed, 1374 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/github/krzysiek944/mscrole/MSCROLE.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/commands/MscroleCommand.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/gui/AdminGUI.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/gui/ShopGUI.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/listeners/GuiListener.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/services/CurrencyManager.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/services/ShopManager.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/utils/DataManager.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/utils/MessageManager.java create mode 100644 src/main/java/com/github/krzysiek944/mscrole/utils/ShopDataManager.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/data.yml create mode 100644 src/main/resources/message.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 src/main/resources/shop.yml create mode 100644 target/MSCROLE-1.2.jar create mode 100644 target/classes/com/github/krzysiek944/mscrole/MSCROLE.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/commands/MscroleCommand.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/gui/AdminGUI.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/gui/ShopGUI.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener$1.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/services/CurrencyManager.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/services/ShopManager.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/utils/DataManager.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/utils/MessageManager.class create mode 100644 target/classes/com/github/krzysiek944/mscrole/utils/ShopDataManager.class create mode 100644 target/classes/config.yml create mode 100644 target/classes/data.yml create mode 100644 target/classes/message.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/classes/shop.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 target/original-MSCROLE-1.2.jar diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d0d9972 --- /dev/null +++ b/pom.xml @@ -0,0 +1,70 @@ + + 4.0.0 + + com.github.krzysiek944 + MSCROLE + 1.2 + jar + + MSCROLE + + + 1.8 + UTF-8 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${java.version} + ${java.version} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + io.papermc.paper + paper-api + 1.21-R0.1-SNAPSHOT + provided + + + \ No newline at end of file diff --git a/src/main/java/com/github/krzysiek944/mscrole/MSCROLE.java b/src/main/java/com/github/krzysiek944/mscrole/MSCROLE.java new file mode 100644 index 0000000..a81bd2b --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/MSCROLE.java @@ -0,0 +1,101 @@ +package com.github.krzysiek944.mscrole; + +import com.github.krzysiek944.mscrole.commands.MscroleAdminCommand; +import com.github.krzysiek944.mscrole.commands.MscroleCommand; +import com.github.krzysiek944.mscrole.listeners.GuiListener; +import com.github.krzysiek944.mscrole.listeners.PlayerJoinListener; +import com.github.krzysiek944.mscrole.services.CurrencyManager; +import com.github.krzysiek944.mscrole.services.ShopManager; +import com.github.krzysiek944.mscrole.utils.DataManager; +import com.github.krzysiek944.mscrole.utils.ShopDataManager; +import com.github.krzysiek944.mscrole.utils.MessageManager; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.ChatColor; + +import java.util.logging.Logger; +import java.io.File; + +public class MSCROLE extends JavaPlugin { + + private static MSCROLE instance; + private CurrencyManager currencyManager; + private DataManager dataManager; + private ShopManager shopManager; + private ShopDataManager shopDataManager; + private MessageManager messageManager; + private Logger logger = Logger.getLogger("Minecraft"); + + @Override + public void onEnable() { + instance = this; + saveDefaultConfig(); + + this.dataManager = new DataManager(); + this.dataManager.saveDefaultConfig(); + this.currencyManager = new CurrencyManager(dataManager); + + this.shopDataManager = new ShopDataManager(); + this.shopDataManager.saveDefaultConfig(); + this.shopManager = new ShopManager(shopDataManager); + + this.messageManager = new MessageManager(this); + + getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); + getServer().getPluginManager().registerEvents(new GuiListener(), this); + + getCommand("mscroll").setExecutor(new MscroleCommand()); + getCommand("mscrolladmin").setExecutor(new MscroleAdminCommand()); + + getLogger().info("Plugin MSCROLE został włączony!"); + } + + @Override + public void onDisable() { + getLogger().info("Plugin MSCROLE został wyłączony!"); + } + + public String getPrefix() { + return ChatColor.translateAlternateColorCodes('&', getConfig().getString("prefix")); + } + + public static MSCROLE getInstance() { + return instance; + } + + public CurrencyManager getCurrencyManager() { + return currencyManager; + } + + public DataManager getDataManager() { + return dataManager; + } + + public ShopManager getShopManager() { + return shopManager; + } + + public ShopDataManager getShopDataManager() { + return shopDataManager; + } + + public MessageManager getMessageManager() { + return messageManager; + } + + public void logToFile(String message) { + try { + File dataFolder = getDataFolder(); + if (!dataFolder.exists()) { + dataFolder.mkdir(); + } + File logFile = new File(getDataFolder(), "logs/currency.log"); + if (!logFile.exists()) { + logFile.getParentFile().mkdirs(); + logFile.createNewFile(); + } + java.nio.file.Files.write(logFile.toPath(), (new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()) + " " + message + "\n").getBytes(), java.nio.file.StandardOpenOption.APPEND); + } catch (java.io.IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.java b/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.java new file mode 100644 index 0000000..3d7f3ba --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.java @@ -0,0 +1,222 @@ +package com.github.krzysiek944.mscrole.commands; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class MscroleAdminCommand implements CommandExecutor { + + private final MSCROLE plugin = MSCROLE.getInstance(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!sender.hasPermission(plugin.getConfig().getString("permissions.mscroleadmin"))) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("no-permission")); + return true; + } + + if (args.length == 0) { + sendHelp(sender); + return true; + } + + String subCommand = args[0].toLowerCase(); + + switch (subCommand) { + case "add": + addItem(sender, args); + break; + case "remove": + removeItem(sender, args); + break; + case "give": + giveCurrency(sender, args); + break; + case "take": + takeCurrency(sender, args); + break; + case "set": + setCurrency(sender, args); + break; + case "list": + listItems(sender); + break; + default: + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("unknown-command")); + break; + } + + return true; + } + + private void sendHelp(CommandSender sender) { + sender.sendMessage(""); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-header")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-add")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-remove")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-give")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-take")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-set")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-list")); + sender.sendMessage(plugin.getMessageManager().getMessage("admin-help-footer")); + sender.sendMessage(""); + } + + private void addItem(CommandSender sender, String[] args) { + if (args.length < 5) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscrolladmin add ")); + return; + } + + int slot; + int price; + Material material; + int amount = 1; + List commands = new ArrayList<>(); + + try { + slot = Integer.parseInt(args[1]); + price = Integer.parseInt(args[2]); + material = Material.getMaterial(args[3].toUpperCase()); + amount = Integer.parseInt(args[4]); + for (int i = 5; i < args.length; i++) { + commands.add(args[i]); + } + } catch (NumberFormatException e) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-amount")); + return; + } + + if (material == null) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("material-not-found").replace("{material}", args[3])); + return; + } + + if (slot < 10 || slot > 43) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-slot")); + return; + } + + plugin.getShopManager().addItem(slot, price, commands, new ItemStack(material, amount)); + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("item-added").replace("{slot}", String.valueOf(slot)).replace("{price}", String.valueOf(price))); + } + + private void removeItem(CommandSender sender, String[] args) { + if (args.length < 2) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscrolladmin remove ")); + return; + } + + int slot; + try { + slot = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-slot")); + return; + } + + plugin.getShopManager().removeItem(slot); + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("item-removed").replace("{slot}", String.valueOf(slot))); + } + + private void giveCurrency(CommandSender sender, String[] args) { + if (args.length < 3) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscrolladmin give ")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("player-not-found")); + return; + } + + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-amount")); + return; + } + + plugin.getCurrencyManager().addBalance(target, amount); + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-given").replace("{amount}", String.valueOf(amount)).replace("{receiver}", target.getName())); + target.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-received-from-admin").replace("{amount}", String.valueOf(amount))); + } + + private void takeCurrency(CommandSender sender, String[] args) { + if (args.length < 3) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscrolladmin take ")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("player-not-found")); + return; + } + + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-amount")); + return; + } + + plugin.getCurrencyManager().subtractBalance(target, amount); + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-taken").replace("{amount}", String.valueOf(amount)).replace("{player}", target.getName())); + target.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-taken-by-admin").replace("{amount}", String.valueOf(amount))); + } + + private void setCurrency(CommandSender sender, String[] args) { + if (args.length < 3) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscrolladmin set ")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("player-not-found")); + return; + } + + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-amount")); + return; + } + + plugin.getCurrencyManager().setBalance(target, amount); + sender.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("balance-set").replace("{player}", target.getName()).replace("{amount}", String.valueOf(amount))); + } + + private void listItems(CommandSender sender) { + sender.sendMessage(""); + sender.sendMessage(plugin.getMessageManager().getMessage("list-items-header")); + ConfigurationSection itemsSection = plugin.getShopManager().getItems(); + if (itemsSection == null || itemsSection.getKeys(false).isEmpty()) { + sender.sendMessage(plugin.getMessageManager().getMessage("shop-empty")); + } else { + for (String key : itemsSection.getKeys(false)) { + int slot = Integer.parseInt(key); + int price = itemsSection.getInt(key + ".price"); + ItemStack item = itemsSection.getItemStack(key + ".item"); + sender.sendMessage(plugin.getMessageManager().getMessage("list-items-format").replace("{slot}", String.valueOf(slot)).replace("{item}", item.getType().toString()).replace("{price}", String.valueOf(price)).replace("{currency}", plugin.getConfig().getString("currency-name"))); + } + } + sender.sendMessage(plugin.getMessageManager().getMessage("list-items-footer")); + sender.sendMessage(""); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleCommand.java b/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleCommand.java new file mode 100644 index 0000000..061ae7c --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/commands/MscroleCommand.java @@ -0,0 +1,130 @@ +package com.github.krzysiek944.mscrole.commands; + +import com.github.krzysiek944.mscrole.MSCROLE; +import com.github.krzysiek944.mscrole.gui.AdminGUI; +import com.github.krzysiek944.mscrole.gui.ShopGUI; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class MscroleCommand implements CommandExecutor { + + private final MSCROLE plugin = MSCROLE.getInstance(); + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage(plugin.getMessageManager().getMessage("only-player")); + return true; + } + + Player player = (Player) sender; + + if (!player.hasPermission(plugin.getConfig().getString("permissions.mscrole"))) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("no-permission")); + return true; + } + + if (args.length == 0) { + sendHelp(player); + return true; + } + + String subCommand = args[0].toLowerCase(); + + switch (subCommand) { + case "balans": + case "balance": + case "bal": + showBalance(player); + break; + case "wyslij": + case "send": + case "pay": + sendMoney(player, args); + break; + + case "sklep": + case "shop": + new ShopGUI().openShop(player); + break; + + case "admin": + if (player.hasPermission(plugin.getConfig().getString("permissions.mscroleadmin"))) { + new AdminGUI().openAdminPanel(player); + } else { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("no-permission")); + } + break; + default: + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("unknown-command")); + break; + } + + return true; + } + + private void sendHelp(Player player) { + player.sendMessage(""); + player.sendMessage(plugin.getMessageManager().getMessage("help-header")); + player.sendMessage(plugin.getMessageManager().getMessage("help-balance")); + player.sendMessage(plugin.getMessageManager().getMessage("help-send")); + player.sendMessage(plugin.getMessageManager().getMessage("help-shop")); + player.sendMessage(plugin.getMessageManager().getMessage("help-admin")); + player.sendMessage(plugin.getMessageManager().getMessage("help-footer")); + player.sendMessage(""); + } + + private void showBalance(Player player) { + int balance = plugin.getCurrencyManager().getBalance(player); + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-check").replace("{amount}", String.valueOf(balance))); + } + + private void sendMoney(Player player, String[] args) { + if (args.length < 3) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-usage").replace("{usage}", "/mscroll send ")); + return; + } + + Player target = Bukkit.getPlayer(args[1]); + if (target == null) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("player-not-found")); + return; + } + + if (target == player) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("cannot-send-to-self")); + return; + } + + int amount; + try { + amount = Integer.parseInt(args[2]); + } catch (NumberFormatException e) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("invalid-amount")); + return; + } + + if (amount <= 0) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("amount-must-be-positive")); + return; + } + + int playerBalance = plugin.getCurrencyManager().getBalance(player); + if (playerBalance < amount) { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("not-enough-currency").replace("{amount}", String.valueOf(playerBalance))); + return; + } + + plugin.getCurrencyManager().subtractBalance(player, amount); + plugin.getCurrencyManager().addBalance(target, amount); + + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-sent").replace("{amount}", String.valueOf(amount)).replace("{receiver}", target.getName())); + target.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("currency-received").replace("{amount}", String.valueOf(amount)).replace("{sender}", player.getName())); + + plugin.logToFile("[Currency] " + player.getName() + " sent " + amount + " to " + target.getName()); + } + +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/gui/AdminGUI.java b/src/main/java/com/github/krzysiek944/mscrole/gui/AdminGUI.java new file mode 100644 index 0000000..20c25a9 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/gui/AdminGUI.java @@ -0,0 +1,79 @@ +package com.github.krzysiek944.mscrole.gui; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class AdminGUI { + + public void openAdminPanel(Player player) { + Inventory gui = Bukkit.createInventory(null, 27, "§c§lPanel Administratora"); + + // Frame + ItemStack frame = new ItemStack(Material.RED_STAINED_GLASS_PANE); + ItemMeta frameMeta = frame.getItemMeta(); + frameMeta.setDisplayName(" "); + frame.setItemMeta(frameMeta); + for (int i = 0; i < 27; i++) { + if (i < 9 || i > 17) { + gui.setItem(i, frame); + } + } + + // Options + ItemStack addItem = new ItemStack(Material.EMERALD); + ItemMeta addItemMeta = addItem.getItemMeta(); + addItemMeta.setDisplayName("§a§lDodaj Przedmiot"); + List addItemLore = new ArrayList<>(); + addItemLore.add("§7Kliknij aby dodać"); + addItemLore.add("§7przedmiot do sklepu"); + addItemMeta.setLore(addItemLore); + addItem.setItemMeta(addItemMeta); + gui.setItem(10, addItem); + + ItemStack giveCurrency = new ItemStack(Material.DIAMOND); + ItemMeta giveCurrencyMeta = giveCurrency.getItemMeta(); + giveCurrencyMeta.setDisplayName("§b§lDaj Walutę"); + List giveCurrencyLore = new ArrayList<>(); + giveCurrencyLore.add("§7Kliknij aby dać"); + giveCurrencyLore.add("§7graczowi MSCROLE"); + giveCurrencyMeta.setLore(giveCurrencyLore); + giveCurrency.setItemMeta(giveCurrencyMeta); + gui.setItem(12, giveCurrency); + + ItemStack takeCurrency = new ItemStack(Material.GOLD_INGOT); + ItemMeta takeCurrencyMeta = takeCurrency.getItemMeta(); + takeCurrencyMeta.setDisplayName("§e§lZabierz Walutę"); + List takeCurrencyLore = new ArrayList<>(); + takeCurrencyLore.add("§7Kliknij aby zabrać"); + takeCurrencyLore.add("§7graczowi MSCROLE"); + takeCurrencyMeta.setLore(takeCurrencyLore); + takeCurrency.setItemMeta(takeCurrencyMeta); + gui.setItem(14, takeCurrency); + + ItemStack listItems = new ItemStack(Material.PAPER); + ItemMeta listItemsMeta = listItems.getItemMeta(); + listItemsMeta.setDisplayName("§f§lLista Przedmiotów"); + List listItemsLore = new ArrayList<>(); + listItemsLore.add("§7Kliknij aby zobaczyć"); + listItemsLore.add("§7wszystkie przedmioty w sklepie"); + listItemsMeta.setLore(listItemsLore); + listItems.setItemMeta(listItemsMeta); + gui.setItem(16, listItems); + + ItemStack closeButton = new ItemStack(Material.BARRIER); + ItemMeta closeMeta = closeButton.getItemMeta(); + closeMeta.setDisplayName("§c§lZamknij"); + closeMeta.setLore(new ArrayList<>()); + closeButton.setItemMeta(closeMeta); + gui.setItem(22, closeButton); + + player.openInventory(gui); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/gui/ShopGUI.java b/src/main/java/com/github/krzysiek944/mscrole/gui/ShopGUI.java new file mode 100644 index 0000000..d423313 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/gui/ShopGUI.java @@ -0,0 +1,133 @@ +package com.github.krzysiek944.mscrole.gui; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.ChatColor; + + +import java.util.ArrayList; +import java.util.List; + +public class ShopGUI { + + private final MSCROLE plugin = MSCROLE.getInstance(); + + public void openShop(Player player) { + Inventory gui = Bukkit.createInventory(null, 54, "§6§lSklep MSCROLE"); + + // Decorative frame + ItemStack frame = new ItemStack(Material.GRAY_STAINED_GLASS_PANE); + ItemMeta frameMeta = frame.getItemMeta(); + frameMeta.setDisplayName(" "); + frame.setItemMeta(frameMeta); + + for (int i : new int[]{0, 1, 2, 3, 5, 6, 7, 8, 45, 46, 47, 48, 50, 51, 52, 53}) { + gui.setItem(i, frame); + } + + // Balance info + ItemStack balanceItem = new ItemStack(Material.PLAYER_HEAD); + SkullMeta balanceMeta = (SkullMeta) balanceItem.getItemMeta(); + balanceMeta.setOwningPlayer(player); + balanceMeta.setDisplayName("§e§lTwój Balans"); + List balanceLore = new ArrayList<>(); + balanceLore.add("§7Posiadasz: §a" + (int) plugin.getCurrencyManager().getBalance(player) + " MSCROLE"); + balanceLore.add(""); + balanceLore.add("§7Kliknij przedmioty poniżej"); + balanceLore.add("§7aby je kupić!"); + balanceMeta.setLore(balanceLore); + balanceItem.setItemMeta(balanceMeta); + gui.setItem(4, balanceItem); + + // Close button + ItemStack closeButton = new ItemStack(Material.BARRIER); + ItemMeta closeMeta = closeButton.getItemMeta(); + closeMeta.setDisplayName("§c§lZamknij"); + List closeLore = new ArrayList<>(); + closeLore.add("§7Kliknij aby zamknąć sklep"); + closeMeta.setLore(closeLore); + closeButton.setItemMeta(closeMeta); + gui.setItem(49, closeButton); + + // Load items + ConfigurationSection itemsSection = plugin.getShopManager().getItems(); + if (itemsSection == null) { + ItemStack empty = new ItemStack(Material.BARRIER); + ItemMeta emptyMeta = empty.getItemMeta(); + emptyMeta.setDisplayName("§c§lSklep jest pusty!"); + List emptyLore = new ArrayList<>(); + emptyLore.add("§7Administrator nie dodał"); + emptyLore.add("§7jeszcze żadnych przedmiotów!"); + emptyMeta.setLore(emptyLore); + empty.setItemMeta(emptyMeta); + gui.setItem(22, empty); + } else { + for (String key : itemsSection.getKeys(false)) { + int slot = Integer.parseInt(key); + ItemStack item = null; + ConfigurationSection itemSection = itemsSection.getConfigurationSection(key + ".item"); + + if (itemSection != null && itemSection.isString("material")) { + // New format + String materialName = itemSection.getString("material").toUpperCase(); + Material material = Material.getMaterial(materialName); + if (material == null) { + plugin.getLogger().warning("Invalid material in shop.yml: " + materialName + " for slot " + key); + continue; + } + int amount = itemSection.getInt("amount", 1); + item = new ItemStack(material, amount); + ItemMeta itemMeta = item.getItemMeta(); + if (itemMeta != null) { + if (itemSection.isString("name")) { + itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', itemSection.getString("name"))); + } + if (itemSection.isList("lore")) { + List newLore = new ArrayList<>(); + for (String line : itemSection.getStringList("lore")) { + newLore.add(ChatColor.translateAlternateColorCodes('&', line)); + } + itemMeta.setLore(newLore); + } + item.setItemMeta(itemMeta); + } + } else { + // Old format + item = itemsSection.getItemStack(key + ".item"); + } + + if (item == null) { + plugin.getLogger().warning("Could not load item in shop.yml for slot " + key); + continue; + } + + int price = itemsSection.getInt(key + ".price"); + + ItemMeta itemMeta = item.getItemMeta(); + List lore; + if (itemMeta.hasLore()) { + lore = itemMeta.getLore(); + } else { + lore = new ArrayList<>(); + } + lore.add(""); + lore.add("§7Cena: §e" + price + " MSCROLE"); + lore.add(""); + lore.add("§eKliknij aby kupić!"); + itemMeta.setLore(lore); + item.setItemMeta(itemMeta); + + gui.setItem(slot, item); + } + } + + player.openInventory(gui); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/listeners/GuiListener.java b/src/main/java/com/github/krzysiek944/mscrole/listeners/GuiListener.java new file mode 100644 index 0000000..c1dd76b --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/listeners/GuiListener.java @@ -0,0 +1,93 @@ +package com.github.krzysiek944.mscrole.listeners; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class GuiListener implements Listener { + + private final MSCROLE plugin = MSCROLE.getInstance(); + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + if (event.getView().getTitle().equals("§6§lSklep MSCROLE")) { + event.setCancelled(true); + Player player = (Player) event.getWhoClicked(); + ItemStack clickedItem = event.getCurrentItem(); + + if (clickedItem == null || clickedItem.getType() == Material.AIR) { + return; + } + + if (clickedItem.getType() == Material.BARRIER) { + player.closeInventory(); + return; + } + + int slot = event.getSlot(); + int price = plugin.getShopManager().getItems().getInt(slot + ".price"); + List commands = plugin.getShopManager().getItems().getStringList(slot + ".commands"); + + if (price > 0) { + int balance = plugin.getCurrencyManager().getBalance(player); + if (balance >= price) { + plugin.getCurrencyManager().subtractBalance(player, price); + for (String command : commands) { + plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), command.replace("%player%", player.getName())); + } + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("item-purchased").replace("{price}", String.valueOf(price)).replace("{currency}", plugin.getConfig().getString("currency-name"))); + player.playSound(player.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 1); + } else { + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("not-enough-currency-shop").replace("{currency}", plugin.getConfig().getString("currency-name")).replace("{price}", String.valueOf(price))); + player.playSound(player.getLocation(), Sound.ENTITY_VILLAGER_NO, 1, 1); + } + } + } else if (event.getView().getTitle().equals("§c§lPanel Administratora")) { + event.setCancelled(true); + Player player = (Player) event.getWhoClicked(); + ItemStack clickedItem = event.getCurrentItem(); + + if (clickedItem == null || clickedItem.getType() == Material.AIR) { + return; + } + + player.closeInventory(); + + switch (clickedItem.getType()) { + case EMERALD: + player.sendMessage(""); + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("admin-add-item-help-header")); + player.sendMessage(plugin.getMessageManager().getMessage("admin-add-item-help-command")); + player.sendMessage(""); + player.sendMessage(plugin.getMessageManager().getMessage("admin-add-item-help-example-command")); + player.sendMessage(plugin.getMessageManager().getMessage("admin-add-item-help-example-description")); + player.sendMessage(""); + break; + case DIAMOND: + player.sendMessage(""); + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("admin-give-currency-help-header")); + player.sendMessage(plugin.getMessageManager().getMessage("admin-give-currency-help-command")); + player.sendMessage(""); + break; + case GOLD_INGOT: + player.sendMessage(""); + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("admin-take-currency-help-header")); + player.sendMessage(plugin.getMessageManager().getMessage("admin-take-currency-help-command")); + player.sendMessage(""); + break; + case PAPER: + player.performCommand("mscrolladmin list"); + break; + case BARRIER: + break; + } + } + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.java b/src/main/java/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.java new file mode 100644 index 0000000..76ad650 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.java @@ -0,0 +1,26 @@ +package com.github.krzysiek944.mscrole.listeners; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class PlayerJoinListener implements Listener { + + private final MSCROLE plugin; + + public PlayerJoinListener(MSCROLE plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + Player player = event.getPlayer(); + if (!player.hasPlayedBefore()) { + int startingBalance = plugin.getConfig().getInt("starting-balance", 1000); + plugin.getCurrencyManager().setBalance(player, startingBalance); + player.sendMessage(plugin.getPrefix() + plugin.getMessageManager().getMessage("player-join").replace("{player}", player.getName()).replace("{amount}", String.valueOf(startingBalance))); + } + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/services/CurrencyManager.java b/src/main/java/com/github/krzysiek944/mscrole/services/CurrencyManager.java new file mode 100644 index 0000000..ece8dcd --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/services/CurrencyManager.java @@ -0,0 +1,53 @@ +package com.github.krzysiek944.mscrole.services; + +import com.github.krzysiek944.mscrole.MSCROLE; +import com.github.krzysiek944.mscrole.utils.DataManager; +import org.bukkit.entity.Player; + +import java.util.UUID; + +public class CurrencyManager { + + private final MSCROLE plugin = MSCROLE.getInstance(); + private final DataManager dataManager; + + public CurrencyManager(DataManager dataManager) { + this.dataManager = dataManager; + } + + public int getBalance(Player player) { + return getBalance(player.getUniqueId()); + } + + public int getBalance(UUID uuid) { + return dataManager.getConfig().getInt("balances." + uuid.toString(), 0); + } + + public void setBalance(Player player, int amount) { + setBalance(player.getUniqueId(), amount); + } + + public void setBalance(UUID uuid, int amount) { + dataManager.getConfig().set("balances." + uuid.toString(), amount); + dataManager.saveConfig(); + plugin.logToFile("[Currency] Set balance of " + uuid.toString() + " to " + amount); + } + + public void addBalance(Player player, int amount) { + addBalance(player.getUniqueId(), amount); + } + + public void addBalance(UUID uuid, int amount) { + setBalance(uuid, getBalance(uuid) + amount); + plugin.logToFile("[Currency] Added " + amount + " to " + uuid.toString()); + } + + public void subtractBalance(Player player, int amount) { + subtractBalance(player.getUniqueId(), amount); + } + + public void subtractBalance(UUID uuid, int amount) { + setBalance(uuid, getBalance(uuid) - amount); + plugin.logToFile("[Currency] Subtracted " + amount + " from " + uuid.toString()); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/services/ShopManager.java b/src/main/java/com/github/krzysiek944/mscrole/services/ShopManager.java new file mode 100644 index 0000000..71aea41 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/services/ShopManager.java @@ -0,0 +1,36 @@ +package com.github.krzysiek944.mscrole.services; + +import com.github.krzysiek944.mscrole.MSCROLE; +import com.github.krzysiek944.mscrole.utils.ShopDataManager; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; + +public class ShopManager { + + private final MSCROLE plugin = MSCROLE.getInstance(); + private final ShopDataManager shopDataManager; + + public ShopManager(ShopDataManager shopDataManager) { + this.shopDataManager = shopDataManager; + } + + public void addItem(int slot, int price, List commands, ItemStack item) { + String path = "items." + slot; + shopDataManager.getConfig().set(path + ".price", price); + shopDataManager.getConfig().set(path + ".commands", commands); + shopDataManager.getConfig().set(path + ".item", item); + shopDataManager.saveConfig(); + } + + public void removeItem(int slot) { + shopDataManager.getConfig().set("items." + slot, null); + shopDataManager.saveConfig(); + } + + public ConfigurationSection getItems() { + return shopDataManager.getConfig().getConfigurationSection("items"); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/utils/DataManager.java b/src/main/java/com/github/krzysiek944/mscrole/utils/DataManager.java new file mode 100644 index 0000000..97b82ef --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/utils/DataManager.java @@ -0,0 +1,49 @@ +package com.github.krzysiek944.mscrole.utils; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +public class DataManager { + + private final MSCROLE plugin = MSCROLE.getInstance(); + private FileConfiguration dataConfig = null; + private File configFile = null; + + public void reloadConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "data.yml"); + } + dataConfig = YamlConfiguration.loadConfiguration(configFile); + } + + public FileConfiguration getConfig() { + if (dataConfig == null) { + reloadConfig(); + } + return dataConfig; + } + + public void saveConfig() { + if (dataConfig == null || configFile == null) { + return; + } + try { + getConfig().save(configFile); + } catch (IOException e) { + plugin.getLogger().severe("Could not save config to " + configFile); + } + } + + public void saveDefaultConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "data.yml"); + } + if (!configFile.exists()) { + plugin.saveResource("data.yml", false); + } + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/utils/MessageManager.java b/src/main/java/com/github/krzysiek944/mscrole/utils/MessageManager.java new file mode 100644 index 0000000..c35cf20 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/utils/MessageManager.java @@ -0,0 +1,37 @@ +package com.github.krzysiek944.mscrole.utils; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +public class MessageManager { + + private final MSCROLE plugin; + private FileConfiguration messageConfig; + + public MessageManager(MSCROLE plugin) { + this.plugin = plugin; + setupMessages(); + } + + private void setupMessages() { + File messageFile = new File(plugin.getDataFolder(), "message.yml"); + if (!messageFile.exists()) { + plugin.saveResource("message.yml", false); + } + messageConfig = YamlConfiguration.loadConfiguration(messageFile); + } + + public String getMessage(String path) { + return ChatColor.translateAlternateColorCodes('&', messageConfig.getString(path, "&cMessage not found: " + path)); + } + + public void reloadMessages() { + File messageFile = new File(plugin.getDataFolder(), "message.yml"); + messageConfig = YamlConfiguration.loadConfiguration(messageFile); + } +} diff --git a/src/main/java/com/github/krzysiek944/mscrole/utils/ShopDataManager.java b/src/main/java/com/github/krzysiek944/mscrole/utils/ShopDataManager.java new file mode 100644 index 0000000..a2bc0d6 --- /dev/null +++ b/src/main/java/com/github/krzysiek944/mscrole/utils/ShopDataManager.java @@ -0,0 +1,49 @@ +package com.github.krzysiek944.mscrole.utils; + +import com.github.krzysiek944.mscrole.MSCROLE; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +public class ShopDataManager { + + private final MSCROLE plugin = MSCROLE.getInstance(); + private FileConfiguration shopConfig = null; + private File configFile = null; + + public void reloadConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "shop.yml"); + } + shopConfig = YamlConfiguration.loadConfiguration(configFile); + } + + public FileConfiguration getConfig() { + if (shopConfig == null) { + reloadConfig(); + } + return shopConfig; + } + + public void saveConfig() { + if (shopConfig == null || configFile == null) { + return; + } + try { + getConfig().save(configFile); + } catch (IOException e) { + plugin.getLogger().severe("Could not save config to " + configFile); + } + } + + public void saveDefaultConfig() { + if (configFile == null) { + configFile = new File(plugin.getDataFolder(), "shop.yml"); + } + if (!configFile.exists()) { + plugin.saveResource("shop.yml", false); + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..4ef0758 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,17 @@ +# ================================ +# Konfiguracja MSCROLE v1.2 +# ================================ + +# Prefix wiadomości +prefix: "&6[MSCROLE] &7" + +# Nazwa waluty +currency-name: "MSCROLE" + +# Startowa ilość waluty dla nowych graczy +starting-balance: 1000 + +# Uprawnienia +permissions: + mscrole: "mscrole.command.mscrole" + mscroleadmin: "mscrole.command.mscroleadmin" diff --git a/src/main/resources/data.yml b/src/main/resources/data.yml new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/message.yml b/src/main/resources/message.yml new file mode 100644 index 0000000..1f214af --- /dev/null +++ b/src/main/resources/message.yml @@ -0,0 +1,66 @@ +# {player} - nazwa gracza +# {amount} - ilość waluty +# {sender} - nazwa nadawcy +# {receiver} - nazwa odbiorcy +# {usage} - użycie komendy +# {material} - nazwa materiału +# {slot} - numer slotu +# {price} - cena przedmiotu + +only-player: "&cTa komenda może być użyta tylko przez gracza." +no-permission: "&cNie masz uprawnień do tego." +unknown-command: "&cNieznana komenda. Użyj /mscroll aby zobaczyć pomoc." +invalid-usage: "&cNieprawidłowe użycie. Użycie: {usage}" +player-not-found: "&cGracz nie znaleziony." +cannot-send-to-self: "&cNie możesz wysłać pieniędzy samemu sobie." +invalid-amount: "&cNieprawidłowa ilość." +amount-must-be-positive: "&cIlość musi być większa od 0." +not-enough-currency: "&cNie masz wystarczająco waluty. Posiadasz: {amount}" +currency-sent: "&aWysłałeś {amount} do {receiver}." +currency-received: "&aOtrzymałeś {amount} od {sender}." +currency-check: "&aPosiadasz {amount} waluty." +currency-given: "&aDano {amount} do {receiver}." +currency-received-from-admin: "&aOtrzymałeś {amount} od administratora." +currency-taken: "&aZabrano {amount} od {player}." +currency-taken-by-admin: "&cAdministrator zabrał Ci {amount}." +balance-set: "&aBalans gracza {player} został ustawiony na {amount}." +material-not-found: "&cMateriał {material} nie znaleziony." +invalid-slot: "&cSlot musi być pomiędzy 10 a 43." +item-added: "&aPrzedmiot został dodany do slotu {slot} za {price}." +item-removed: "&aPrzedmiot został usunięty ze slotu {slot}." +shop-empty: "&cSklep jest pusty." + +help-header: "&6&l════════ MSCROLE ════════" +help-balance: "&e/mscroll balans &7- Sprawdź swój stan konta" +help-send: "&e/mscroll wyslij &7- Wyślij walutę" +help-shop: "&e/mscroll sklep &7- Otwórz sklep" +help-admin: "&e/mscroll admin &7- Panel administratora" +help-footer: "&6&l═══════════════════════" + +admin-help-header: "&c&l════ Panel Administratora ════" +admin-help-add: "&e/mscrolladmin add +&7- Add item with multiple commands" +admin-help-remove: "&e/mscrolladmin remove &7- Usuń przedmiot" +admin-help-give: "&e/mscrolladmin give &7- Daj walutę" +admin-help-take: "&e/mscrolladmin take &7- Zabierz walutę" +admin-help-set: "&e/mscrolladmin set &7- Ustaw balans" +admin-help-list: "&e/mscrolladmin list &7- Lista przedmiotów" +admin-help-footer: "&c&l══════════════════" + +list-items-header: "&6&l════ Lista Przedmiotów w Sklepie ════" +list-items-footer: "&6&l═══════════════════════════════" +list-items-format: "&7[Slot {slot}] &e{item} &7- &a{price} {currency}" + +item-purchased: "&aZakupiono przedmiot za &e{price} {currency}!" +not-enough-currency-shop: "&cNie masz wystarczająco {currency}! Potrzebujesz: &e{price}" + +admin-add-item-help-header: "&aAby dodać przedmiot do sklepu, użyj:" +admin-add-item-help-command: "&e/mscrolladmin add [ilość]" +admin-add-item-help-example-command: "&7Przykład: &e/mscrolladmin add 20 500 diamond 1" +admin-add-item-help-example-description: "&7To doda diament do slotu 20 za 500 MSCROLE" + +admin-give-currency-help-header: "&aAby dać walutę graczowi, użyj:" +admin-give-currency-help-command: "&e/mscrolladmin give " + +admin-take-currency-help-header: "&aAby zabrać walutę graczowi, użyj:" +admin-take-currency-help-command: "&e/mscrolladmin take " \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..8adea97 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,16 @@ +name: MSCROLE +version: 1.2 +main: com.github.krzysiek944.mscrole.MSCROLE +api-version: '1.21' +author: Gemini +commands: + mscroll: + description: Główna komenda pluginu MSCROLE. + aliases: [msc] + mscrolladmin: + description: Komendy administracyjne dla MSCROLE. + permission: mscrole.admin +permissions: + mscrole.admin: + description: Dostęp do komend administracyjnych MSCROLE. + default: op diff --git a/src/main/resources/shop.yml b/src/main/resources/shop.yml new file mode 100644 index 0000000..9478482 --- /dev/null +++ b/src/main/resources/shop.yml @@ -0,0 +1,35 @@ +items: + '20': + price: 500 + commands: + - 'give %player% diamond 1' + - 'eco give %player% 100' + item: + material: DIAMOND + amount: 1 + name: '&bDiament' + lore: + - '&7Bardzo rzadki diament.' + - '&7Kup go już teraz!' + '22': + price: 100 + commands: + - 'give %player% iron_ingot 16' + item: + ==: org.bukkit.inventory.ItemStack + v: 3901 + type: IRON_INGOT + amount: 16 + name: '&fSztabka Żelaza' + lore: + - '&7Podstawowy materiał do craftingu.' + - '&7Przydatny w wielu przepisach.' + '24': + price: 1000 + commands: + - 'give %player% netherite_ingot 1' + item: + ==: org.bukkit.inventory.ItemStack + v: 3901 + type: NETHERITE_INGOT + amount: 1 diff --git a/target/MSCROLE-1.2.jar b/target/MSCROLE-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..fad6bc362f6b65394f8b201b9cd3aa8c798ba561 GIT binary patch literal 31698 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/MSCROLE.class b/target/classes/com/github/krzysiek944/mscrole/MSCROLE.class new file mode 100644 index 0000000000000000000000000000000000000000..b1b1832634ef2d7b27f195aef0baed223f076ac1 GIT binary patch literal 5378 zcma)Ac|a7`8UH;2XIV!aU&0ur$pG)Xh;4lrSNhRn_)*u&N| zO?n^pOz);`dc;;uSTr>072DL__i69@zE7Lv_hx37-F0=@KjzJQ^PRuH?+aeWDm0-?K>Z8V1V?a;E z-8S1AFb5SpO<+|CQPSn4wpDlaPTkUJa2T~HlTO#GSd6O$=ESBy3al<=+XVt?Wi1vd zxJF=I31gCmGipYSq}G;l9K(u^XKh-F^5I`^-XQ^kxT&d(_Ajt@ttkxVj>v+iuh z7U@o_z>1RY1gAG}V5^FDY!jH5$P+mOABtJxoz@*Hc4C*Gka`&HGC?eCXza+zg#L15 z4m!}Opi9MWbn|#$Kp{}gtmfy*EV@hbWd&I^kBC_A5r~usjkuX~4a;znT6bI@H=JFz zX>|l^VcdW%bMS2RD%hvuM)V2P<=9tDD^YZeK`Fp#A2lpDDX_jF*KI?tY8e%g+)sJ( zxHk$8ls{B!s|p?cEKkI<%}ykAE5^fDv`pl9NdP4! z@sX7);3K$_w*aMigaX3}Q%usp2*a3)Gj=D9@MSwvQRnlxs7Zmgk`w zXwm`=88U(xLP9_dP|#xu(^6oUj*CLmw@A*c{g$-98jh^U+~HbA*oIcwgG=n8AHo-q3cTFm+n*X0l73c z>KFv6%Q%=J{*a0f<9-smcDL>h30$6W*rEkqbjWokfR6}VQP^R&rc4P_7{_D-e1ct} zN8uV{uGV8FM&bssG`87JLU%)WKw!Z*f6bkp&9PYhjvX5liH%7bcpMYb`*8)6OsLaG zOEQO%mZ$GH9#S!dkI~WrPn^Kg04Z6OWUFUn`rZ7!J%&eAd>o%3r#>=b$RyZ2qaX~N z<5~EWfT$1QQ4V40>t|Ga7LT#Hb#1@XW`t&7%U6CDpI7h&6<@@c7)yolQ3AuQb=;NF zTHerjpjE+FG97;w|J^it_lP{LmG~OIuHYLgzKL%!iF)#~bUo~|W4aTYrl-qWy1U!E zwlX96adZh{M)r5`T?OA$@qPS&Ta_Mit|2=kE5gsNwk<#yR|0#ZTlVplXEI8JGS=hxahWIPG37j1EO&=Y+8(m4cFQNLw5_dXGI*E$hL`DBbojnAdt+(hrm`~3 z;9?Y^X0jGE_^dmnC1e}J0%nSwN0BlaW&5C((&GFcEr%V!xCGd|^i z5*&)=gj|rof<2h4^a>+O8f@D z4aC%XR6zMjER?(=hj%k)zr*hXN{yqGSiwDMEL78)qoyKj?H};RBFuG#%-f1G{|SFC z!o0DNc~?>9zu>P$m{%1tcNJy+8~$E|xvh|SPf_N7VBBXGP27TV0(O}D^Qz8k(|FxI z2yuAxz9}5-lZ!QPoy6O_n!PX89Nv}2z56)6Up_uKg<}lSk51uuU(Lx$JUE3k=cm#* zoyNm8pX6hOeEBpVX`D&pbL9`?%Y9`h@ztJF`1Zd05RyuNbb{spqcrOrLq`eCxw}9AKc|#K69pfqV-y#jT`|l0(NK^t1bqd9JpQqXM_%pZFJJtd0`?&9^er zl;c16ua_MT2b)i~@jslW?*CI)9m>zkzXp$<$6`L8;GYGv6jUoX3!&hgOcsxmY!;q) E68Z@H6951J literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.class b/target/classes/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..a6c2b524a814700211c448a6f3ad5a10b7013cd6 GIT binary patch literal 8836 zcmd5>dtg)Nb^je((!I7XFF6LBKw?M$V_Oyw#|}1e0EdUc28sy;lh?I;Z41kiD_sE& zWocTHu4%VE(ryh~(go6b3rP!UVxXifThpXXx4zc(v98^tUAtvno2`2^DGmL7_g>kO zEXU-ZZ3bE2`#b0S&iQ@k`~317pS=K}K?X`ugklXo1AYVqv-g_^%y7(%_lLLl?6)Ge zAh0GHkJ_z*;_BtQOQEAgL#cr>7=opd#89|DY7eA)!h^|sMp990aCJjNcqkP~CSq2& zv#V|A_KppLvVO~MkEd)i9^GN?fI3fq{j%S`dDVtGnWL z*~w^};w`Q2m;lmkY*{|JsSH(Eq+zjvYjK^RDrZl}kYUeuT~@r;N(yESn5iA(8VD*1 zZPcw{sbF5d1nbk$7#AtU5)>=DE;mqvT37HLNvkh{; z+qf0oWuPt5%a|v7wCmWxg4x@v#_TlEgW5~YAz zKBa>;nU#(Y#uEqQA&=N}qy_ZlgLGquHbMgglD|wwmW~m@%&cbWuH$g-(2OOIaPh36 zu2JvJZFKE>U+$ugso$MDPzkN${@k7V5(!%g^&Un@G=9L0MSDYO6?Hn^OJEK=F^Fy@xp_hK2p-k&aRYyZ$0$P< zGk2P_YSfImhw4OadA7!x4YI>KGqj})C-At2PZ-#t0&wPpf=V|Hqk?NDl-ZUZ>amg= z6Uiad-f$>l4XZOw$DeRw22~dn9VZ1rj&j5c#S?a@k6_USpJLz~&U6s*PcvdNa}~^r zolhHh8lT~!WWKI}#PD08=9HB@Krcy!vnIA^cvf(Amf^Ug6}J<~k+6!dF58R@mf{(l zQK`>aL1hj^2bIT5O*_y+z;!#555HNM3# z$wFkklRbGEfHO@{Kb;#B!>BzH-rM+d#Kh-+Km5{DCnQSYa@ z@8PY~8|q6Yl>0GBRcqd?<3A=ruTF|W(EkAcY2d$oH!#fB`^swU4jq*AV=hE$!Gm;^K8xtUDd*@bF5?c8dCEY##`L#|O<1t+%34B>vv z`nFkzY&CX~A&cc&(ny>Q`T4z<@(6}$PLoyg0O33n9({f7yt3o zq7;u{jV`NIBxXGKh%PMzB~uN>RjA2L`5UWbNt2rei*sBfCneu-$cm&LczkYFJ*y)c zx7-tYm)R4eWWkO^#Ek7WnIf?6HTvv8`z*q^i*MnL3mtChpRGIeg_!%)Kt= zoNsv}vePgxSt*o!Gs_RC>x#OgEzUkJ^Oke(rxa21I!I)1GMoebF|)^F5*5tK2R%XP zt!A>H_9`zRl8T*lPg~|mVTR*=o#wD-X^9G?ohzs#n!7ko&A`fJKRlqbk%KkN?7JQ7hBh|)~x#ZZPc8B)SQL(EM}Z$y-3#aw|W@^X2ZvKr}b)- zJ677{7S=>I$VPXaqJ12rv+4fYnrAR$4CTRjW2iibYl?6T^|j}*WbYX)bNi~tQ0JCb z1RKWC$m$qc&Y`skz9%bv7mlH{ruGcht4i^zF>Gx1SNfX+MU7fzU<_MNa%)~UfWQ~G z{PHNjw?Ga(#_wjxb3OdN2P+2W@VgtUPCd%+2hrH@9)9ny3eM&-RDCV$dz^ZsU)5KzzSpTQ4XAn*>-(JgTus$yvwnwD59p0rh4uvZxQie4~u?gquA`0qN8YaOR-TjC|e{(Q8%>_lleyE zM#T<*-I&YrTt42-Lo4R_utaLGOje>=8c-uGOqW^_ zk`1Vr%~&DZu~K&O;b;%vOS{o1??$uZ5Uq41g6=tlDsAF;IuuLovPHQMOIxJ_#ZIYH zw$V{`OIWtE%`ZDBT@~j13Turwuua1z{+C(m$5>jTezez6%~kkl<2mfFxe`~!W3@rs zaT(9yRs;{w3b`$ZCbir%spTD$T7GL%%R48vylYa+(eV~fu8AnB=R+}QejPXSfpabD zu#UC$ym_{vhpO3B?g7H`F>K;hce7*Ixvr8K!}0>`8n%e{uO2Vve##X~XjZ%Kf_@wg zQ~SpQlr8w%!3W3i{;XI#?Q0C2#|IggA8yv_e5=mlq1HOT`fBvm1sHb^pT!?G`|C8P zi7u{J=yey4qoPu)tI$`S!|@{QIjYO(rB_A~Zq}#X|BtzU_QsX|mvF<>!=F&%KIw>% zBk#i5rH`Rx;q2PS5t@4Tr}8#)nda2O3SXsm9?$Hp^j8GVU~CNMre5QMlHmD;XYuDW zS@6XQpIge-fll6r`*0MWgwF}JK2#Frtqh0`G%~oF__WuIT^zNC40RiJVlVC>Ct28s z1a8M+e&0tlkK#_Ee-}QDyKxE;Jd0lZn4^BeXSH7-Dhse*7Gg-65SJ7Zj&~fz4E9#a z+ZdEOS8tXsmWsK@D%r)7k2@`sTV*$S=mCcF9=Xk7XFKChVvh%^Eh;FBxc3X*DyrnJ zqDt;6&C)D;xpDw)vQoNbA2hk0`l=JbZMlOjDx7yiZ@PpP>Q5vyHB@PGr-+6}_&Gsd zcpdXEaWj3qlQUG8`t`|6sLkpbp9VCRE$1Y@KDwSyit#%Pd$R6=|8hM4i+P^!dAo93 z-_%|(l_!ni<*6tAWwz_&IZPA7ejOdgU&_Txf^T>dtTgDnoHoJFR_DU5Sh6M;WXB zkTz9xzPRo};Bu_`)k0SN`nJ$ZZx){4&I`{B<0vfrQ=2uPLfokSZm7aHhVM^3?S~4D zf6Byf@F$^j_!mL0+@UFxlb_|x&Vc!95l++VV}$JBIGF31C4sRV!2JaC0fPBn0`(wS z{(XD}e?Lcmh~q!X86PIh58*f;PERn4IYrk086K8JIOYJn85+kGJF({DNH=zwP4Eio zW?ib3Ib;`m0Jq{ta+lmq1~`Fx-MJ3bbKq;bhz1R>Y?%O@kMdp^y;Z>fJ=bujoiO@8 z0Q?tI1ODGRkOhDF)&PG!XZB?P{s;kolz@MnfFCE|CkXiC1pE^O{0Rd2DFS|yFh0rN zr`UUn|4tL|rwRCH{D{uU=+^U;KXp_#0CKUM`|Ao4|P@+B5L+S}{3Z zTQQ6AI!5@;5Wcg7?>ymqj_`es@LeE$pC^1T5xy4)-xmnqi-hk>gzshi9AAEO=G(8%H>j#nJ|h|(uM zXI)uZgvLN#=kiQvZ4sKaiG9Ngs^=^GZZ=geD=W1zxqeKV=w{5a0-5$3T}8^vrJ0vV zb~@UPUW!aCwI-uN#vCf$cF)yjUV4GA&{|*RZRcxPim&qu_6=;uH!;iy_=ETs$@klI zitpexd>0q-J(zKd9`NomDJ7@912om?T($DShT{|$1_ASM6+ literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/commands/MscroleCommand.class b/target/classes/com/github/krzysiek944/mscrole/commands/MscroleCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..f64fda8d2e2232295b053ca15e7931325ee20f31 GIT binary patch literal 5468 zcmb7H3wRt=89jHio0)7TX}WD_0|inZwMn{JY)cB+Hb_Gsfut=B6lnpSY$nMxo0)WX zwk2&N2!h}P74gvmDn$tLP(awW6blFn;sc8yf+&jkM8zkHRzA+1ncZyOHD6}u{`cPh z{^y?iKjuFD_Cp5&EXLbm1W=?Ps3C-6fr`!gRy~%~t?t;`j?G5G5hz}2TBg$^P&B`0 zLl`Pb6ofUDLKB#mu=`@&rqh$@i1ntn52Q___w>b!V}0pF%1#=ww)W=rYg<P*MlJOs_2%w6;+Gu@^oF#kv` zE0`%T+fH@IIx@YzrV}$P$8-i_>yr9_k&;9lrC}Ck3ry$c+KhBs?>5?Wi@zy>B~x!P zi$o-#0V|$0|5Z!||vVSTqFz<1H!>9!AJRo8LNo%I!|dw7TOp zW4lUm0!~zLl7^EpPoTPh37_Sd&u+V6b;>=LrrGfKBTzY>8P|d4Yp6l3KnYPb+g6v^ z&3%!t5f)^3CZ#*3ZN<7w`qE1Nc(eU(a8Caw-Qce{p>(SHe^42EU;YI~Z1ZIt9czMQ5lB6&iP$Ye)Q9~R{Jxl9S zMwfZ1z)W&5S}!g&nlzk&_t1&;{(e#{5FL-(F}l7@^0b`bEjv0)m0a~K4J#xB)v<^7 zdSaLXw^~CB&gO_b(A7q=U*OpJg~u}@6yh>1w4zPH8VzgZiUnE3TbaJ$*sb<9Bh{>@ z4LSQ<4eQZP6Xdj~+3sXkV18*)aXz=%p)&)e<+KYlycZX;%h;09lj%{Mdnqbjvr)w+ z0mW5I7%DF2ViZ)okDA*C(n)i(3SA&5_oE`g;eLHU1&xN%y-A~A1zj+h?y=c2*{OH- znU-XtS3^=VQOdDx%O$J?;g`eGV1u-jxGry7#(=;nlTfs2%;AtV1q_I-%@bTs&!QF_0?E-a2VCPJ^ZP(C%G&F!g4Ihw( z%B3N9be(P)B=&NFX&I~6vbR}LKO3mHLV%wAA+ps&pNaMuIz3*+)dHH^kw2enNSxc_ zoySM=qPvxkF<-f(E_fB!2Qda9iPMb?aX zfn$#7A7^P5w=<8J77>`8(TuEjD(;|}9d3J2#hn7j`^7(5Ef2SPsaM6Cs+W3uX$s?R z+@s*D8oq{mSvw1I^K!S&`Z>`peggG{!1KkbKxt$uQgJ`ik7qM#*-o^J1Ty3wV4+Cp zmh6$RqK?gXvMY=%_A1z?VLu)snBnZ(VmXFe$kl#5l{P4j$~`$OEeamyu7@?(WcoUc z)Ji+mr#mYyO&I;MgsC{lGtN=xQK8~d77DK&?aQQ{XonH)x6`I$ZY8nbBxH%#uAR9=DysM~<9AcD@7@j$H7&zCs`K=YBts<9YA5vM20dj;+3yTGJtnKpX;XbP z`sPM|cgBg)wwiMvpWJ<;2y_xnd7 zTDXiCEdqiEHn#x9xIst6#ST#!jNLL1Kt52y?RF-WFr@Dg^T^vmz1$t0A*QJMyj$nW13-{tQZ}9XimgQDBlPgfnqIo}7%5|!O2X~{iwkot2tE5!4FpF~rzo zl|X}9rDU=0F2cjBd`j+qqH90j>kqxLcMjiIy#AE+GT$8#JInY^LEL)>-+OTCGuQBa zJx+b;O}-xwU0t-6@8^oIe(n*z@2^rK=Vh^B7p^U8P=|0O<&Ca95R`J7@_x}*s9^1k73?<$f+>Tre^&7WY*e|lNngt5Mh$Ran+*@v66xTPTI zhXIzm%bm+4w4T7)T_Dw-i9C=qd>|SYVH4gYpn$yU_^E2PoBj}(wcud!9xR?1%xx0P zP~Z{yxP;=YC&(c$oE(Y zejxZMTX^cx3H{{INbMihjiW7r_zOgy=UL?DEQ`EANy2+E@-kaF%d)~`@$>uWCO7i# zaXSvstz;EUK~|0p4Dt)mz`OhsI#m-cVhXt!y|{$lt}_XBu#6?B*+bnVwN2cC%{asv z&%(kBu$fi*g+N-A!x5Fph}GCCS}-6sFpVUzQ`~|<@d_>r9EHnWw_eXEypo@t9;Bsk2C2JpXk08C!s%>V!Z literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/gui/AdminGUI.class b/target/classes/com/github/krzysiek944/mscrole/gui/AdminGUI.class new file mode 100644 index 0000000000000000000000000000000000000000..256ee49a773b61a5ed799af8300ec37dcebb5567 GIT binary patch literal 3234 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener$1.class b/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5047882921b092bb046142a4864e355ddcbbb4b8 GIT binary patch literal 856 zcmbVK+iuf95IviuabjE=dZD3(wm@hTE;U7=5(0rj<3w5JLF?J_<2wB87)MA$fM@9L;#n?9Q*>KPCXmI8c#5Qb9_?0@4gCo zyCBvy@-&MKvIF*Nx7_# z1Kal;t~(+Kxy$`PuSLR~g2DmAR-yY|g!Zsuy(>_k!e1$cnUus?Jxh`=Ygj^#K`|Oe zr(#wa*5>Mx<1K4g!7Al?eqXq9o@B99S8$bK)q17TYE~t;so}ch)LP4|zO6TFtrJOaY1o$ZLc7v7I+D4m;Z|JyveN0)jgEo> zLvGfv)jQ{Q$dGwvJHi#=^H|p@L+Z%ubA}~TxV#ySd)z;l0G1Vz^FlVFot{ zrf2X5L1hMa2xemVnf5n}RjgwTd6Kb9eh-iEnEW9ssFF9(MwfgNMUs(@#k@d?;sn`U hvQ4OO6v}AKIjHPjoO&M*$fvMR=R-0zo|A%H<`2XDzrz3k literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener.class b/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener.class new file mode 100644 index 0000000000000000000000000000000000000000..2f839addab63a34584e2994bd89dd70d79f30ffd GIT binary patch literal 5743 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 GI`Cf$Rg)F~ literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.class b/target/classes/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.class new file mode 100644 index 0000000000000000000000000000000000000000..30319aaeb26d459c001df116731c943b9353dbb7 GIT binary patch literal 2278 zcmbVNYgZdZ7=9)J7Q#|W3bbIM)=QfN=!!+LrbSB%HZ_4tYP7XpHk-+2$YwX)3rFlGgML*Ri-}3D4&?cRlUCrSEe0o+Io+XN{0sR$vO7Ayqg5r&!8uZ5GzD37o;G zg0m{dkYu>(xTaPK8V%uVe23e<)(XvZSzD9K3_~XOBMJ-`Q|UtYLE9JpZs$mL7~_~w zFsb4^E-+j;Y9qsFUH3xB>ME}}E)NBIl)yAzQ*cqm3}zXwoX)X`V9v2?!eqGKOV9|H z16TKjV{0`*x~|g@?d~jR2k|;Z&+~QH7q+=j(J6)oPv8x_so*UYZ{rGs*5%DTrYU2Yq@Mcvj-?ox)3FDGc=ad$@;+|v#m zrfAP&LBTZ@8s1@8{+~Du36J}$ks=JUsiUKxPnQ+E%W(dnud9Kus@zRr5pn7Bdn(?? zawo4`UK8IljFYPe&yf#{xS`@hWJyfD)#7%QVc`%lUp?EgNf6VxrD6piF^rMMMecbd z?w-WUCrcdo!t%7SH@Ff}A(XD`Q))*#I`9n_1h(A*Cm83uDI}tzW z)7L7#!M7y2M@i6$g#_th)hR5Qg*wAjSGh**ZNGQUow{eH%M5)vr%K9<7KF_=f@X!g z5A=#fE6IXm=vG;Gg`9U5`~14_7;c?ZxW{#ON_W+v)m%VJS za2X{@f2adPZwEgPE4*gp-NP__bm23MlziQ26!lg|gsCkGylC>W@B~S7+qNA)?7*bV zr5>QrdU(&=)$OXqUGhCqast=jvQJYt*_YvE0I$hLfy;E8#=!6$JxO_^(w!{l{ix7r z&}^ONF?uI5&%rWt&!GGq?y1sv25}lk&_`cG7zL-U*H_WPk5a91xg!J$xCDLzuUOH63ws9&$KZ&|2q~RKF9TFZK;h9qOY6D zkK0&H-X)NG3~dyXrI}yxIepNUHXgpf;}|64I3(j~4A6Lv?2i-Y3Ct4T3|+J)rb6}^ v;x&srw$TWEtMB?p literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/services/CurrencyManager.class b/target/classes/com/github/krzysiek944/mscrole/services/CurrencyManager.class new file mode 100644 index 0000000000000000000000000000000000000000..c228a2000d53263e7bdb1cf0b1c42048bb63d89b GIT binary patch literal 2713 zcmb7FZBrXn6n-v2HYD2sfkMT!O|gZ%Shf;si>bu|twwn%37{3LY&M&)knGZZVFrJT zKfy1~*tFFde}F&A@!Z`_vIGcrGP5r?=RW6oo^$TmfByaRZvgXfBIrX%K);9&Fu*W; zARo(8UDj*TM)^QhY=(hHny%T88A7S_P6S~L3W$h^LS&d$jD}Rx?0u&!9h$$KSekmc zFh4IfEX6eHs?Moh+#;;u!s@F86I4+%~H){ zO;Igr*)dI3S5DSsU9PDn$vCPzHBDzoy-(^f5mzxz{4268x3T6fgK%uEZb>VhJ^3iE z;X?tFB0fTb;hJIAq_T5(sM(UL+nRkMJ+I3roG7-n+(eQgLcvQi)r;FYn(7Ws7b2L##{zDPxPxhidzbikhB(6@rC2ufs#asj5t{&W z#a(tx+13nQs%lj6XLRwR{pGxX6vITPuS&M5>9r+Ct5;Mrf*FLu$WofJC&QZMYj;J= zLZYh4M@OnoKHT-Sxvl9zH>ai)w6Gv`qAy2$mz8v=QreG020 z*7%T!Sn{!7?Pap0+DX5XNu!z!W0RpjX&XsyX^B^Liy?8E-KmZsj$!PG z_zvGwQ`C*xmce_9;p#a|Ij&ouE#wuyUmYvQv|6A!v`OayXFwR22ChvDW}#F3w4opOYTmFN>r zH1S2p3jU1;eRrZrxQIzFwv8zItZ6@9!K7%$hmw!|tB+mm$v^QHPn!73i}{vrS6VvP zJ38af>6y3{NpKU}9fn@9ZsIn%mZdJ(q-n#83GJ`Yn zn{>ve9i8z9_@f-3ySs$|k=QSHchBo{o^#IKzyJB;F8~XurZ9w90&xSw7!jCwE<4g} zNV{&XSDsr{UtnZe*~(uLh-K$DQb=Mnfs}z0Fa$DHr)k!eztygo+wRXhp0c)=78cB= zS9P6+Wv-Q1pRAW23Y@50e$n=PX;&?QTz0EpTgqn`gNlRkb{` zyydjkq%G@~%Mx0Rc3s&5**8gh+Q1o135E*THynze2NRe!{EW0LfBU?J`Uzk54ib582h|4;} z6@j^I@p!|l2Hr+SAn7|HFoDzT(~)#3WHFyW&cJoNBd{=_BYmk580A2$I`*cjv#Ctu zxOKDA-riQeSq;Q(SNh7a%}vEQdc-5Nj>Lr|@}wo-a@p+^-o?!X-ZO9u3j&k-kc+l& z1rw0y$VS^*-xQcS$U|g7s_tMhf%gq8;jV!BhIqIgp2cOk)~7!`6oxxhnBPcZnH=QF zT~pdMFA46~a9%fF)BB-;kMuUCJlTorPGXf7!DMKt4-GuR$DF1;8Y5!L+*#5lu-XU7 zF*F}wHwsb^SQ@x7ef!G_1>&ntjmth>QnvND-K<#dQ(0+Hk}f$_+1QY-(%+FV?r$ki z;P#-^>bKzpnvk_xk@PV_wpa`)*U-$8^87;YcqzMM*}miMnA*PV%j$Lr*K0WJpeT~( zV63)xNtaK#9G>L3|At=EKHJ(O|zsP_u}N6V^i zOTX=s*y7RB`+5yRth<+Tt)|nlLQdmc8p@LT7H84y)6L^{_CJOxRd(8L)zZsMLVIrL zyygX$dDRc`uQY_TzU=vy))z3Jaj+-&glCaoU(iC^P3B%g(l>ZeIrj=?7q|Oa6haFc_Emons%PSR`g^*TSWwGsfaXkq zbdeYO2F{{`8T^9Tpr(}&?Osj0_?#564D8}bK$d;cL?Rj8Y@A zFXJ0peM`v@zN74W{J>L_UZGr*o;g@vFFE2M`mhrxgRJNI54ynL%f+59WcCneBE$ke o;-@IzBD3il#-e=b`&~TvH2|g?JQ66c1mQyPV^KH(8CX^R1?KZn`Tzg` literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/utils/DataManager.class b/target/classes/com/github/krzysiek944/mscrole/utils/DataManager.class new file mode 100644 index 0000000000000000000000000000000000000000..d4047ea600eeb49efbf5e63632c53922cbaf22e3 GIT binary patch literal 2190 zcmb7FTT|Os5dMzsL?8qhL%7rlHH83n3L*);P^WPc11*gmTAb2Cud*$SVp(EjnMwLn z`q-DgmYK$6nwdV9nf|CwcO?PhGI9HIbaeLYe*5k1{Qb`#e*##9AtQpQgqVUWxGE5T zrtNF0saZ93z5GnCxB^%28J6MR7l_WLH)V98TY{{h2a3RS#crrI!`*F_)w=W3i>9I1 zmlhY*MziABrmhxC`Hl6$ia<|Ich{_@t63FYATygT{5Q>PH~P>oA+BHm34w(UYAx3= zo9eRWYDLY`YPv)I@0qQdVF}FsAIu>I*Dx#~SIJi1wswq~!0m$V)YNjTUN>B|;vKde z%{6RG-7$#nDlPuq;MjA2RKXbDB2&HwUlQmmc#$@2Pbn+mx_}Zs;z*AxcpE8!UWy)b zTD8q8Q;Jjk!gsS>ct@a%U7df?Fl8h$#RMg0wa{q@r8s91tmNc81*<`5)z`()c19Vf`9EY8dTOvY%2H)U(;3n zxzTi+-Vod71Z*q#2H#R)ahNvrrrmOQG7Vp1X*<11Y0leKlJ^%3OMlX8ly&E+R^~=d z6zqy-ZfcIf|G{C*-8Bg8PN#`;VO(XY*-NfgsTZ}qz?RG&9+$XawkI7ODk@SO;ET)p zj@B|yT0$;)#Qd2P56#7S4l5?8lOpsGM3Lb6O1lV;J?~31i@sMN_+_B=JNhe-T+nwo za|n@n1?eSvGvXx%c^NtI^uDJxff%hat^82*B2G9z(23$}<40)pC%Cr*%R3$tFq8Qm zBS#p?yhd`1_PuS~NK71JlI&+#_6pO4$52t6LJdG7&?JU1O$1J%W&)_PcV8q4jmAcR z`Ix@UCQfz-k052*c$c@oofz*U5MY#yj}eb#$Z-6u;T|$nIU(~4sc~3yZ0#?|?Dr93 z2Lzz`Omw<8d472V}ILvTy@S0oif#1oS5KAw`l& zl1-Cz3gftm`!vOw_%K0_le`MuW0wng+KpHriV~JmB-%Og*A0Td;5&MG@IAl3{FxF? tZYL(9ZET%pVVEp{o(~DPC`@zY&OB5sgaWn@awCRFa*#Zzkxm4={{k_D5b6K` literal 0 HcmV?d00001 diff --git a/target/classes/com/github/krzysiek944/mscrole/utils/MessageManager.class b/target/classes/com/github/krzysiek944/mscrole/utils/MessageManager.class new file mode 100644 index 0000000000000000000000000000000000000000..8741b5fa61d94bddc781f1d5babef3080dc87bac GIT binary patch literal 1897 zcmb7EeRC2=82@dc9^iq1n#5>rh&J+~Ijz{LSlfuE)k4w+rH%hBupuYM9dozm)Xwya z^i#Aml{oE8KY*X9)9JIvB|QT(vBS)A`|R%T<=JPSxBvX{7l0~$NMQ~!4RIYG-~>bV z1%Js6i`#u;tMfv1CBun(rftgm46$OVokRjj4JjQbp)=gd1>i7uDlmqdj=}9lh>T@M|MaLyv zCNCa;DYk{@_-=O-LAS9D}Cr?j1oj4c8eK{;SAI zA|Lpsx}X#c#1gp4aCWsDR>QLG$mLzfw|jS&)%qE>=o!u&6h`C-?fo40HGHAtOROJzAyZx%l2m>N47X>04SYpPBllO|2lk%xD@M_6s}Dl!Ajlf3985|#ribzbe1S7mG^$Y zr8Yxc;WM0Sn6}vThaKTQaq6tQJGk4&JHCG(%=$ zDC`iloNh_p9W?nUWJ^)@!y=-VF(dsm{l`aK?kW98Ym^u=u24@b1SKb_R`8@Jf=-9= zuqUo502Ju;%u!pOLteGl;ESFT{l~$m&3sMcW14N!4z({+-UlmJUPGgg^l!obCp6}1 zKd9HlkwcPZX=*RuP-K2`3Jo-AM&|<-Mp0_4A@6t@jQuCV-5>gq~8jbP{#QPc_k#z(aI*ai1b@JkpTM} zD;h~=_zv5llxKvdq!hBNL|P$5#?C%&0@8|T4oxPX=eIZX8NN#-Iat9mkI65(b3tn`|Y>4^Y=f0{0U$IhKw#mBt#Wl!Bv6S zGi_f}P0gyQ8|7zu#TB@E&#(;lzCa|MDaq(Yj|5pkFBF04id|Q0hP&G;t9#B*FPetF zx45vN)|(Z_Hg$EqxU{)ZSP|&0>F%1YQh+Kpw+)z&pjtLYALXqc^{nrqmWx?>RKRa*SJ!LdhSRKXbDB2&HwUlQmqc+oa&Pbnwix_}Zs;%JX6cpE8! zK8hf7TD8q8Q;Jax!*_Gtct@a{U7dSTH)SL-#Yw#>FquAm)Bp35Ty!17s^vJbGe}Fw zD9GZLfcj>VTUy;bMN(kUw6*G)vxjGZGnd5foY|aA>7P|F$F-?A`UwUL<`vw=djdTa z8XsBU4u$2-zMoH!OpWlqgu4npz=xM|Kc_DcZEE|J&%v{FOAb*!_ZC^9uF)aaOsIRg+FBJ*qFI0(l@X;#mtN?@`O(ija{5q#` zGz$vW@r26Mwf)Ky7(Qkk0wa{q@r8s<1w}j+81*<`5E7!%)c19Vf`9EI8dTOvloWi0 zuj#7(+-SN@Z;)+s0=5-=gKw#@I82**({4FDoe~#V+Rl_H%}aKbxKII?oo@I_av?5%5!z@E%r9+$ab#+|MX6&5KD z^2KF+M{Aj#wvdY+Ie+d9pP7$y99~RNM|IJo5J8-0E$zB^{CQuRUG%*I!LJ0Z-_c)z z>)(<6{MHw%Zis6;$`H()BB#*IHI)5wDP0ThZy1fKqrc?jUS=WpWq%3Ebn+o zz)bdcj2vMk`x?nD+V{0_BR+A6NwS}1*(*#F9z#WN0yPMUK$958G!Zy~nhBuF-hGiI zG#VcP=41LYn;6+0I)apK<6YkV)-m2sAiyXYA0r;gkm1;A!@Xpv(joH;sc~5IZ0#?| z?Dr9(2Lzz`Omw<8d1s2V``BvTy^70oif#1oSra zBSn%)l1-Cz3gftm`!vm&c!HqENnVBSvCD@%?Lo93>k<}IB--it>juG}_Z_`B_@3Wi x{!9rcx8oC$HnvW(kRS`7XGFp+3ezmPGY1v(p@7YY+=!wpIYb`RNT& &7- Wyślij walutę" +help-shop: "&e/mscroll sklep &7- Otwórz sklep" +help-admin: "&e/mscroll admin &7- Panel administratora" +help-footer: "&6&l═══════════════════════" + +admin-help-header: "&c&l════ Panel Administratora ════" +admin-help-add: "&e/mscrolladmin add +&7- Add item with multiple commands" +admin-help-remove: "&e/mscrolladmin remove &7- Usuń przedmiot" +admin-help-give: "&e/mscrolladmin give &7- Daj walutę" +admin-help-take: "&e/mscrolladmin take &7- Zabierz walutę" +admin-help-set: "&e/mscrolladmin set &7- Ustaw balans" +admin-help-list: "&e/mscrolladmin list &7- Lista przedmiotów" +admin-help-footer: "&c&l══════════════════" + +list-items-header: "&6&l════ Lista Przedmiotów w Sklepie ════" +list-items-footer: "&6&l═══════════════════════════════" +list-items-format: "&7[Slot {slot}] &e{item} &7- &a{price} {currency}" + +item-purchased: "&aZakupiono przedmiot za &e{price} {currency}!" +not-enough-currency-shop: "&cNie masz wystarczająco {currency}! Potrzebujesz: &e{price}" + +admin-add-item-help-header: "&aAby dodać przedmiot do sklepu, użyj:" +admin-add-item-help-command: "&e/mscrolladmin add [ilość]" +admin-add-item-help-example-command: "&7Przykład: &e/mscrolladmin add 20 500 diamond 1" +admin-add-item-help-example-description: "&7To doda diament do slotu 20 za 500 MSCROLE" + +admin-give-currency-help-header: "&aAby dać walutę graczowi, użyj:" +admin-give-currency-help-command: "&e/mscrolladmin give " + +admin-take-currency-help-header: "&aAby zabrać walutę graczowi, użyj:" +admin-take-currency-help-command: "&e/mscrolladmin take " \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..8adea97 --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,16 @@ +name: MSCROLE +version: 1.2 +main: com.github.krzysiek944.mscrole.MSCROLE +api-version: '1.21' +author: Gemini +commands: + mscroll: + description: Główna komenda pluginu MSCROLE. + aliases: [msc] + mscrolladmin: + description: Komendy administracyjne dla MSCROLE. + permission: mscrole.admin +permissions: + mscrole.admin: + description: Dostęp do komend administracyjnych MSCROLE. + default: op diff --git a/target/classes/shop.yml b/target/classes/shop.yml new file mode 100644 index 0000000..9478482 --- /dev/null +++ b/target/classes/shop.yml @@ -0,0 +1,35 @@ +items: + '20': + price: 500 + commands: + - 'give %player% diamond 1' + - 'eco give %player% 100' + item: + material: DIAMOND + amount: 1 + name: '&bDiament' + lore: + - '&7Bardzo rzadki diament.' + - '&7Kup go już teraz!' + '22': + price: 100 + commands: + - 'give %player% iron_ingot 16' + item: + ==: org.bukkit.inventory.ItemStack + v: 3901 + type: IRON_INGOT + amount: 16 + name: '&fSztabka Żelaza' + lore: + - '&7Podstawowy materiał do craftingu.' + - '&7Przydatny w wielu przepisach.' + '24': + price: 1000 + commands: + - 'give %player% netherite_ingot 1' + item: + ==: org.bukkit.inventory.ItemStack + v: 3901 + type: NETHERITE_INGOT + amount: 1 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..c45dbbe --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=MSCROLE +groupId=com.github.krzysiek944 +version=1.2 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..2346667 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,13 @@ +com\github\krzysiek944\mscrole\services\CurrencyManager.class +com\github\krzysiek944\mscrole\MSCROLE.class +com\github\krzysiek944\mscrole\utils\MessageManager.class +com\github\krzysiek944\mscrole\utils\DataManager.class +com\github\krzysiek944\mscrole\utils\ShopDataManager.class +com\github\krzysiek944\mscrole\gui\ShopGUI.class +com\github\krzysiek944\mscrole\listeners\GuiListener$1.class +com\github\krzysiek944\mscrole\gui\AdminGUI.class +com\github\krzysiek944\mscrole\commands\MscroleAdminCommand.class +com\github\krzysiek944\mscrole\commands\MscroleCommand.class +com\github\krzysiek944\mscrole\listeners\PlayerJoinListener.class +com\github\krzysiek944\mscrole\listeners\GuiListener.class +com\github\krzysiek944\mscrole\services\ShopManager.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..a36b74f --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,12 @@ +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\commands\MscroleAdminCommand.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\commands\MscroleCommand.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\gui\ShopGUI.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\utils\DataManager.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\listeners\PlayerJoinListener.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\listeners\GuiListener.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\utils\MessageManager.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\MSCROLE.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\utils\ShopDataManager.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\services\ShopManager.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\services\CurrencyManager.java +C:\Users\Krfcm\Documents\visual studio\skript — kopia\src\main\java\com\github\krzysiek944\mscrole\gui\AdminGUI.java diff --git a/target/original-MSCROLE-1.2.jar b/target/original-MSCROLE-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..1b45970581c3fd859e267c19b79bf94d0cde0b7d GIT binary patch literal 31120 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%0A}|mt)Fq^-=r#L137Ca6%~)`p0dk6aFdn! zFf5|JZnz-Zyy$=#fCwGy=2OZFS#+6)(Is6th)9+8ZQ? z!v{zZ$oFE{d@bwn$K%-u(G@2>Mn}=AGXnMXIURULzsotDz?t#Q!S{#L!KLqA@_5N} zGonr&l(co8q(swA28QL|a?Cc}DU2pGbBL&=eF3Tp!Xun*Bj{?vKQOCKLAy;hDJf>En}Ecv9hd>FR5X=lK6ud$t&P`uJ?| zZxOk_Hhh+m`_-Neubw{s!SHuIvA+g+mX-U}o+$!fzb5ql2>JTqc$Teufoyw%eDxszU&hZeb}z;U|J(TKp#NOd?&X5K z?$EQW-3uoDQ)Kh1Lw|w!uaWgve_!gYzLvTB7kaLb#}oG7T$QJ ziu*TL<>e9lld2T2nO@f%cwstb{QoiiT59;3=k->y7akw(|AObQHkQ4nd%cO|h3=C7 zZ|Q#9Qt}%4^@7Y7WDv=}MgF%N`_tu_uc=W`<3FVN)7Lw%d0x-mzVIyTJoEf(Cik`7 z^Y5O9fq%5;jPzeE*JnxhWeW7Q)$1wH7b{S`-zG#~8@`?lcrj!$1^{@O8hCB@I&prn z<289nqyK32XDQ!{RkP`TJ52pE0sJGy^GNtQs{R9o#s7!mCC2_B0s2&R8~}je`R^&t KRJMHn?|%TsSWQg; literal 0 HcmV?d00001