diff --git a/.gitignore b/.gitignore index de8108c..7bf9fb4 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,5 @@ buildNumber.properties # Common working directory run/ +!/src/main/java/xyz/mineconomia/mineconomiacore/commands/bed.java +!/src/main/resources/config.yml diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java index ef7afcc..42e6d3d 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java @@ -7,10 +7,7 @@ import org.bukkit.plugin.RegisteredServiceProvider; 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.events.*; import xyz.mineconomia.mineconomiacore.handlers.FHBHandler; import java.util.Objects; @@ -45,21 +42,25 @@ public final class MineconomiaCore extends JavaPlugin { logger.info("║ ║"); logger.info("╚═══════════════════════════════╝"); logger.info(""); - Objects.requireNonNull(plugin.getCommand("mcore")).setExecutor(new mcore()); PluginManager pm = getServer().getPluginManager(); pm.registerEvents(new FHBHandler(), this); pm.registerEvents(new playerAccount(), this); pm.registerEvents(new specialEvents(), this); pm.registerEvents(new shopInteract(), this); pm.registerEvents(new shopGuiInteract(), this); + pm.registerEvents(new sellClose(), this); - //BookCommand + Objects.requireNonNull(plugin.getCommand("mcore")).setExecutor(new mcore()); Objects.requireNonNull(getCommand("pomoc")).setExecutor(new BookCommand()); Objects.requireNonNull(getCommand("tpw")).setExecutor(new tpw()); 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()); + Objects.requireNonNull(getCommand("sell")).setExecutor(new sell()); + + Objects.requireNonNull(getCommand("mcore")).setTabCompleter(new mcore()); + //CustomItems ItemManager.init(); } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java index 7201cbf..5fd5779 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java @@ -40,7 +40,7 @@ public class mcore implements TabExecutor { return true; } if (Objects.equals(args[0], "setSellItem")){ - config.set("sellItems." + item.getType().name(), args[1]); + config.set("sellItems." + item.getType().name(), Double.parseDouble(args[1])); try { config.save("config.yml"); } catch (IOException e) { @@ -56,12 +56,10 @@ public class mcore implements TabExecutor { @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(); + return completetions; } } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java index 14cc4d4..55dd35f 100644 --- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java +++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/sell.java @@ -2,20 +2,49 @@ package xyz.mineconomia.mineconomiacore.commands; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; +import xyz.mineconomia.mineconomiacore.MineconomiaCore; import xyz.mineconomia.mineconomiacore.PDC; +import xyz.mineconomia.mineconomiacore.events.sellClose; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; 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; + Player player = (Player) commandSender; + if (strings.length > 0){ + Map> MapOfSellable = sellClose.sellItems.get(player); + if (strings[0].equals("cancel") && !(MapOfSellable == null)){ + NumberFormat formatter = new DecimalFormat("0.00"); + Double finalPrice = 0d; + for (String key: sellClose.sellItems.get(player).keySet()){ + Integer count = (Integer) MapOfSellable.get(key).get(0); + Double itemPrice = (Double) MapOfSellable.get(key).get(1); + player.getInventory().addItem(new ItemStack( Objects.requireNonNull(Material.getMaterial(key.toUpperCase())), count)); + finalPrice += itemPrice; + } + sellClose.sellItems.remove(player); + MineconomiaCore.getEconomy().withdrawPlayer(player,finalPrice); + player.sendMessage(ChatColor.YELLOW +"Věci ti byli navráceny"); + return true; + } + } + PDC.WritePlayerPDC(player, "sellGUIOpen", PersistentDataType.INTEGER, 1); + sellClose.sellItems.remove(player); + player.openInventory(Bukkit.createInventory(null, 36, ChatColor.DARK_GREEN + "" + ChatColor.BOLD + "Vlož itemy k prodeji")); + return true; } } diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/events/sellClose.java b/src/main/java/xyz/mineconomia/mineconomiacore/events/sellClose.java new file mode 100644 index 0000000..5cbddcd --- /dev/null +++ b/src/main/java/xyz/mineconomia/mineconomiacore/events/sellClose.java @@ -0,0 +1,83 @@ +package xyz.mineconomia.mineconomiacore.events; + +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; +import xyz.mineconomia.mineconomiacore.MineconomiaCore; +import xyz.mineconomia.mineconomiacore.PDC; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static xyz.mineconomia.mineconomiacore.publicValues.config; + +public class sellClose implements Listener { + public static HashMap>> sellItems = new HashMap<>(); + @EventHandler + public void sellItemsPrep(InventoryCloseEvent event){ + Player player = (Player) event.getPlayer(); + if (PDC.GetPlayerPDC(player, "sellGUIOpen", PersistentDataType.INTEGER) == null){ + return; + } + + Inventory inventory = event.getInventory(); + ItemStack[] itemStacks = inventory.getContents(); + PDC.DeletePlayerPDC(player, "sellGUIOpen"); + HashMap> MapOfSellable = new HashMap<>(); + for (ItemStack itemStack: itemStacks){ + if (itemStack != null){ + String type = itemStack.getType().toString(); + double price = config.getDouble("sellItems." + type); + if (price != 0){ + MapOfSellable.computeIfAbsent(type, k -> List.of(0, 0D)); + Integer finalCount = (Integer) MapOfSellable.get(type).get(0); + Double finalPrice = (Double) MapOfSellable.get(type).get(1); + int count = itemStack.getAmount(); + MapOfSellable.put(type, List.of(count+finalCount, price*count + finalPrice)); + }else { + player.getInventory().addItem(itemStack); + } + } + + } + if(MapOfSellable.isEmpty()){ + player.sendMessage(ChatColor.YELLOW + "Nic jsi neprodal"); + return; + } + sellItems.put(player, MapOfSellable); + player.sendMessage(""); + player.sendMessage(ChatColor.GREEN + "Prodal následující itemy:"); + NumberFormat formatter = new DecimalFormat("0.00"); + Double finalPrice = 0D; + for (String key: MapOfSellable.keySet()){ + Integer count = (Integer) MapOfSellable.get(key).get(0); + Double itemPrice = (Double) MapOfSellable.get(key).get(1); + finalPrice += itemPrice; + player.sendMessage(ChatColor.YELLOW + "" + count + "x " + key.toLowerCase() + " za " + formatter.format(itemPrice) + "$"); + } + TextComponent succesMessage = new TextComponent(ChatColor.GREEN + "Celkový zisk: " + formatter.format(finalPrice) + "$ "); + TextComponent cancelMessage = new TextComponent(ChatColor.RED + "" + ChatColor.BOLD + "ZRUŠIT"); + cancelMessage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(ChatColor.YELLOW + "Kliknutím se ti navratí itemy a odečtou peníze").create())); + cancelMessage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sell cancel")); + succesMessage.addExtra(cancelMessage); + player.spigot().sendMessage(succesMessage); + player.sendMessage(""); + MineconomiaCore.getEconomy().depositPlayer(player, finalPrice); + + + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8774ade..e225d4d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -22,4 +22,11 @@ commands: description: will unfuck things permission: mcore.unfuck gamble: - description: "dd" \ No newline at end of file + description: "dd" + permission: mcore.gamble + sell: + description: "ff" + spawn: + description: "na spawn s tebou" + bed: + description: "do postele s tebou" \ No newline at end of file