From 339371125f00def7b5ebb50d2cfe340a1eae8b8d Mon Sep 17 00:00:00 2001 From: jakub Date: Tue, 21 May 2024 09:18:20 +0200 Subject: [PATCH] tak tak --- .../mineconomiacore/MineconomiaCore.java | 3 + .../mineconomiacore/commands/gamble.java | 61 ++++++++++++ .../mineconomiacore/commands/mcore.java | 37 ++++++- .../mineconomiacore/commands/sell.java | 21 ++++ .../events/shopGuiInteract.java | 97 ++++++++++++++++++- .../mineconomiacore/events/shopInteract.java | 25 ++--- src/main/resources/plugin.yml | 4 +- 7 files changed, 230 insertions(+), 18 deletions(-) create mode 100644 src/main/java/xyz/mineconomia/mineconomiacore/commands/gamble.java create mode 100644 src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java index 07d09c9..ef7afcc 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java @@ -8,6 +8,7 @@ import org.bukkit.plugin.java.JavaPlugin; import xyz.mineconomia.mineconomiacore.CustomItems.ItemManager; import xyz.mineconomia.mineconomiacore.commands.*; import xyz.mineconomia.mineconomiacore.events.playerAccount; +import xyz.mineconomia.mineconomiacore.events.shopGuiInteract; import xyz.mineconomia.mineconomiacore.events.shopInteract; import xyz.mineconomia.mineconomiacore.events.specialEvents; import xyz.mineconomia.mineconomiacore.handlers.FHBHandler; @@ -50,6 +51,7 @@ public final class MineconomiaCore extends JavaPlugin { pm.registerEvents(new playerAccount(), this); pm.registerEvents(new specialEvents(), this); pm.registerEvents(new shopInteract(), this); + pm.registerEvents(new shopGuiInteract(), this); //BookCommand Objects.requireNonNull(getCommand("pomoc")).setExecutor(new BookCommand()); @@ -57,6 +59,7 @@ public final class MineconomiaCore extends JavaPlugin { Objects.requireNonNull(getCommand("fhb")).setExecutor(new funHarvestBall()); Objects.requireNonNull(getCommand("shop")).setExecutor(new shop()); Objects.requireNonNull(getCommand("sample")).setExecutor(new sample()); + Objects.requireNonNull(getCommand("gamble")).setExecutor(new gamble()); //CustomItems ItemManager.init(); } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/gamble.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/gamble.java new file mode 100644 index 0000000..908d628 --- /dev/null +++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/gamble.java @@ -0,0 +1,61 @@ +package xyz.mineconomia.mineconomiacore.commands; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; +import xyz.mineconomia.mineconomiacore.MineconomiaCore; +import xyz.mineconomia.mineconomiacore.events.shopInteract; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class gamble implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { + Inventory gambleGui = Bukkit.createInventory(null, 27, "GAMBLE GAMBLE GAMBLE"); + for (int i = 0; i<9; i++){ + gambleGui.setItem( i,shopInteract.newItemStack(" ", Material.BLACK_STAINED_GLASS_PANE)); + gambleGui.setItem( i + 18,shopInteract.newItemStack(" ", Material.BLACK_STAINED_GLASS_PANE)); + } + gambleGui.setItem(4, shopInteract.newItemStack(" ", Material.LIME_STAINED_GLASS_PANE)); + gambleGui.setItem(22, shopInteract.newItemStack(" ", Material.LIME_STAINED_GLASS_PANE)); + Player p = (Player) commandSender; + + List itemStackList = new ArrayList<>(); + for (Material m : Material.values()){ + gambleGui.setItem(15, new ItemStack(m)); + if (gambleGui.getItem(15) != null){ + itemStackList.add(new ItemStack(m)); + } + } + p.openInventory(gambleGui); + Collections.shuffle(itemStackList); + for(int i = 0; i < 100; i++){ + + Bukkit.getScheduler().scheduleSyncDelayedTask(MineconomiaCore.getPlugin(MineconomiaCore.class), new Runnable() { + public void run() { + ItemStack itemStackToEnd = itemStackList.get(0); + itemStackList.remove(0); + itemStackList.add(itemStackToEnd); + for (int i = 0; i<9; i++){ + gambleGui.setItem(i+9, itemStackList.get(i)); + if (gambleGui.getItem(i+9) == null){ + gambleGui.setItem(i+9, new ItemStack(Material.STICK)); + } + } + p.playSound(p, Sound.BLOCK_NOTE_BLOCK_BANJO, 100, 1); + } + }, Long.parseLong(String.valueOf(i+1))); + } + return true; + } +} diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java index 8fe7ec8..7201cbf 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java @@ -2,27 +2,31 @@ package xyz.mineconomia.mineconomiacore.commands; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import xyz.mineconomia.mineconomiacore.PDC; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; import static xyz.mineconomia.mineconomiacore.publicValues.config; -public class mcore implements CommandExecutor { +public class mcore implements TabExecutor { @Override public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] args) { - + Player player = (Player) commandSender; + PlayerInventory inventory= player.getInventory(); + ItemStack item = inventory.getItemInMainHand(); if (Objects.equals(args[0], "setSpecial")){ - Player player = (Player) commandSender; - PlayerInventory inventory= player.getInventory(); - ItemStack item = inventory.getItemInMainHand(); + ItemMeta meta = item.getItemMeta(); assert meta != null; PDC.WriteItemMetaPDC(meta, "special", PersistentDataType.INTEGER,1); @@ -35,6 +39,29 @@ public class mcore implements CommandExecutor { } return true; } + if (Objects.equals(args[0], "setSellItem")){ + config.set("sellItems." + item.getType().name(), args[1]); + try { + config.save("config.yml"); + } catch (IOException e) { + throw new RuntimeException(e); + } + player.sendMessage("Nastaveno"); + return true; + } return false; } + + @Nullable + @Override + public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { + List completetions = new ArrayList<>(); + switch (strings.length){ + case 0: + completetions.add("setSpecial"); + completetions.add("setSellItem"); + + } + return List.of(); + } } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java new file mode 100644 index 0000000..14cc4d4 --- /dev/null +++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java @@ -0,0 +1,21 @@ +package xyz.mineconomia.mineconomiacore.commands; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.persistence.PersistentDataType; +import org.jetbrains.annotations.NotNull; +import xyz.mineconomia.mineconomiacore.PDC; + +public class sell implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) { + Player p = (Player) commandSender; + PDC.WritePlayerPDC(p, "sellGUIOpen", PersistentDataType.INTEGER, 1); + p.openInventory(Bukkit.createInventory(null, 36, ChatColor.GREEN + "" + ChatColor.BOLD + "Vlož itemy, které chceš prodat")); + return false; + } +} diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/events/shopGuiInteract.java b/src/main/java/xyz/mineconomia/mineconomiacore/events/shopGuiInteract.java index 2722a48..5ac5233 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/events/shopGuiInteract.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/events/shopGuiInteract.java @@ -1,26 +1,117 @@ package xyz.mineconomia.mineconomiacore.events; +import net.milkbowl.vault.economy.Economy; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import xyz.mineconomia.mineconomiacore.MineconomiaCore; +import xyz.mineconomia.mineconomiacore.invTools; +import xyz.mineconomia.mineconomiacore.serialization; +import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Objects; public class shopGuiInteract implements Listener { public static HashMap> storeDatas = new HashMap<>(); @EventHandler - public void clickEvent(InventoryClickEvent event){ + public void clickEvent(InventoryClickEvent event) throws IOException, ClassNotFoundException { Player player = (Player) event.getWhoClicked(); Map storeData = storeDatas.get(player); + if (storeData == null) return; + event.setCancelled(true); + if (!event.getAction().equals(InventoryAction.PICKUP_ALL)) return; + String noSpaceMessage; + String noMoneyMessage; + String successUserMessage; + String successUserMessageEight; + String successOwnerMessage; + String successOwnerMessageEight; + String noItemsMessage; + String count = (String) storeData.get("count"); + String price = (String) storeData.get("price"); + String countEight = (String) storeData.get("countEight"); + String priceEight = (String) storeData.get("priceEight"); + String itemType = ((String) storeData.get("itemType")).toLowerCase(); + ItemStack item = (ItemStack) serialization.stringToBukkitObject((String) storeData.get("item")); + Inventory buyerInventory = (Inventory) storeData.get("buyerInventory"); + Inventory sellerInventory = (Inventory) storeData.get("sellerInventory"); + OfflinePlayer buyer = (OfflinePlayer) storeData.get("buyer"); + OfflinePlayer seller = (OfflinePlayer) storeData.get("seller"); + OfflinePlayer owner = Bukkit.getOfflinePlayer((String) storeData.get("owner")); + Economy eco = MineconomiaCore.getEconomy(); + + if (storeData.get("regime").equals("buy")){ + noSpaceMessage = ChatColor.RED + "Nemáš dost místa v inventáři"; + noMoneyMessage = ChatColor.RED + "Nemáš dost peněz"; + noItemsMessage = ChatColor.RED + "Prodejce nemá dost itemů ve skladišti"; + successUserMessage = ChatColor.GREEN + "Koupil jsi" + count + "x " + itemType + "za" + price; + successUserMessageEight = ChatColor.GREEN + "Koupil jsi" + countEight + "x " + itemType + " za " + priceEight + "$"; + successOwnerMessage = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "si koupil " + count + "x " + itemType + " za " + price + "%"; + successOwnerMessageEight = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "si koupil " + countEight + "x " + itemType + " za " + priceEight + "%"; + }else{ + noSpaceMessage = ChatColor.RED + "Prodejce nemá dost místa ve skladišti"; + noMoneyMessage = ChatColor.RED + "Prodejce nemá dost peněz"; + noItemsMessage = ChatColor.RED + "Nemáš dost itemů"; + successUserMessage = ChatColor.GREEN + "Prodal jsi" + count + "x " + itemType + "za" + price; + successUserMessageEight = ChatColor.GREEN + "Prodal jsi" + countEight + "x " + itemType + " za " + priceEight + "$"; + successOwnerMessage = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "ti prodal " + count + "x " + itemType + " za " + price + "%"; + successOwnerMessageEight = ChatColor.GREEN + "Hráč " + player.getDisplayName() + "ti prodal " + countEight + "x " + itemType + " za " + priceEight + "%"; + + } + double finalPrice = Double.parseDouble(price); + int finalCount = Integer.parseInt(count); + int slot = event.getSlot(); + if (slot == 1){ + finalCount = Integer.parseInt(countEight); + finalPrice = Double.parseDouble(priceEight); + } + if (slot == 0 || slot == 1){ + if (seller.equals(buyer)){ + player.sendMessage(ChatColor.RED + "Sám sobě nic prodat nemůžeš"); + return; + } + if(invTools.getFreeSpaceForItem(buyerInventory, item) < finalCount){ + player.sendMessage(noSpaceMessage); + return; + } + if (finalPrice > eco.getBalance(buyer)){ + player.sendMessage(noMoneyMessage); + return; + } + if (invTools.itemAmount(sellerInventory, item) < finalCount){ + player.sendMessage(noItemsMessage); + return; + } + + item.setAmount(finalCount); + sellerInventory.removeItem(item); + buyerInventory.addItem(item); + eco.withdrawPlayer(buyer, finalPrice); + eco.depositPlayer(seller, finalPrice); + if (slot == 0){ + player.sendMessage(successUserMessage); + sendIfOnline(owner, successOwnerMessage); + }else{ + player.sendMessage(successUserMessageEight); + sendIfOnline(owner, successOwnerMessageEight); + } + + } } @EventHandler @@ -29,4 +120,8 @@ public class shopGuiInteract implements Listener { storeDatas.remove(player); } + public static void sendIfOnline(OfflinePlayer player, String message){ + if (player.isOnline()) Objects.requireNonNull(player.getPlayer()).sendMessage(message); + } + } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/events/shopInteract.java b/src/main/java/xyz/mineconomia/mineconomiacore/events/shopInteract.java index a81db11..254d1b5 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/events/shopInteract.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/events/shopInteract.java @@ -41,7 +41,6 @@ public class shopInteract implements Listener { if (collection.documentExists(shopid)){ BaseDocument baseDocument = collection.getDocument(shopid, BaseDocument.class); Map shopData = baseDocument.getProperties(); - List> placeholders = new ArrayList<>(); NumberFormat formatInteger = new DecimalFormat("0"); NumberFormat formatter = new DecimalFormat("0.00"); String regime = (String) shopData.get("regime"); @@ -49,24 +48,24 @@ public class shopInteract implements Listener { if (((String) shopData.get("type")).contains("group")){ ownerPrefix = "Skupina "; } - placeholders.add(new ArrayList<>(List.of("%%owner%%", ownerPrefix + shopData.get("owner")))); String count = (String) formatInteger.format(shopData.get("count")); String price = formatter.format( shopData.get("price")); String countEight = formatInteger.format(Math.multiplyExact((Long) shopData.get("count"), 8)); String priceEight = formatter.format(Math.multiplyExact((Long) shopData.get("price"),8)); Inventory inventory; - Inventory invetoryToCheck; - Inventory inventoryToAddTo; + Inventory sellerInventory; + Inventory buyerInventory; String shopPrefix; OfflinePlayer buyer; OfflinePlayer seller; + String shopErrorMoney; String shopErrorProduct; Material shopMaterial; Material shopErrorMaterial; if (shopData.get("regime").equals("buy")) { - invetoryToCheck = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); - inventoryToAddTo = player.getInventory(); + sellerInventory = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); + buyerInventory = player.getInventory(); shopPrefix = "&aKoupit "; shopMaterial = Material.LIME_WOOL; shopErrorMaterial = Material.LIME_STAINED_GLASS; @@ -77,8 +76,8 @@ public class shopInteract implements Listener { seller = Bukkit.getOfflinePlayer((String) shopData.get("owner")); }else{ - invetoryToCheck = player.getInventory();; - inventoryToAddTo = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); + sellerInventory = player.getInventory();; + buyerInventory = ((Container) ((Location) serialization.stringToBukkitObject((String) shopData.get("containerLocation"))).getBlock().getState()).getInventory(); shopPrefix = "&eProdat "; shopMaterial = Material.YELLOW_WOOL; shopErrorMaterial = Material.YELLOW_STAINED_GLASS; @@ -92,11 +91,15 @@ public class shopInteract implements Listener { inventory.setItem(0, newItemStack(shopPrefix + count + "ks za " + price + "$", shopMaterial)); inventory.setItem(1, newItemStack(shopPrefix + countEight + "ks za " + priceEight + "$", shopMaterial)); inventory.setItem(7, (ItemStack) serialization.stringToBukkitObject((String) shopData.get("item"))); - inventory.setItem(8, newItemStack("&l&bInformace o obchodu:", Material.PLAYER_HEAD, List.of("&eMajitel: " + shopData.get("owner")))); - shopData.put("inventoryToAddTo", inventoryToAddTo); - shopData.put("inventoryToCheck", invetoryToCheck); + inventory.setItem(8, newItemStack("&l&bInformace o obchodu:", Material.PLAYER_HEAD, List.of("&eMajitel: " + ownerPrefix + shopData.get("owner")))); + shopData.put("buyerInventory", buyerInventory); + shopData.put("sellerInventory", sellerInventory); shopData.put("seller", seller); shopData.put("buyer", buyer); + shopData.put("price", price); + shopData.put("priceEight", priceEight); + shopData.put("count", count); + shopData.put("countEight", countEight); shopGuiInteract.storeDatas.put(player, shopData); player.openInventory(inventory); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index d93ead9..8774ade 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -20,4 +20,6 @@ commands: description: "mgg nesnáším vysvětlování věcí, proč vůbec používáš help?" sample: description: will unfuck things - permission: mcore.unfuck \ No newline at end of file + permission: mcore.unfuck + gamble: + description: "dd" \ No newline at end of file