commit d1e03fd3dcd26594f66702912e71bd6644b899d1 Author: Krfcm Date: Sun Nov 2 03:10:56 2025 +0100 Initial commit 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 0000000..fad6bc3 Binary files /dev/null and b/target/MSCROLE-1.2.jar differ 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 0000000..b1b1832 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/MSCROLE.class differ 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 0000000..a6c2b52 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/commands/MscroleAdminCommand.class differ 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 0000000..f64fda8 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/commands/MscroleCommand.class differ 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 0000000..256ee49 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/gui/AdminGUI.class differ diff --git a/target/classes/com/github/krzysiek944/mscrole/gui/ShopGUI.class b/target/classes/com/github/krzysiek944/mscrole/gui/ShopGUI.class new file mode 100644 index 0000000..e0530c5 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/gui/ShopGUI.class differ 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 0000000..5047882 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener$1.class differ 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 0000000..2f839ad Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/listeners/GuiListener.class differ 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 0000000..30319aa Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/listeners/PlayerJoinListener.class differ 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 0000000..c228a20 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/services/CurrencyManager.class differ diff --git a/target/classes/com/github/krzysiek944/mscrole/services/ShopManager.class b/target/classes/com/github/krzysiek944/mscrole/services/ShopManager.class new file mode 100644 index 0000000..def6268 Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/services/ShopManager.class differ 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 0000000..d4047ea Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/utils/DataManager.class differ 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 0000000..8741b5f Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/utils/MessageManager.class differ diff --git a/target/classes/com/github/krzysiek944/mscrole/utils/ShopDataManager.class b/target/classes/com/github/krzysiek944/mscrole/utils/ShopDataManager.class new file mode 100644 index 0000000..6608dcd Binary files /dev/null and b/target/classes/com/github/krzysiek944/mscrole/utils/ShopDataManager.class differ diff --git a/target/classes/config.yml b/target/classes/config.yml new file mode 100644 index 0000000..4ef0758 --- /dev/null +++ b/target/classes/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/target/classes/data.yml b/target/classes/data.yml new file mode 100644 index 0000000..e69de29 diff --git a/target/classes/message.yml b/target/classes/message.yml new file mode 100644 index 0000000..1f214af --- /dev/null +++ b/target/classes/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/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 0000000..1b45970 Binary files /dev/null and b/target/original-MSCROLE-1.2.jar differ