package de.iani.treasurechest; import java.util.List; import java.util.Set; import java.util.UUID; import org.bukkit.ChatColor; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.block.Block; 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 de.iani.playerUUIDCache.CachedPlayer; public class PriceChestCommandExecutor implements CommandExecutor { private TreasureChest plugin; public PriceChestCommandExecutor(TreasureChest plugin) { this.plugin = plugin; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (args.length == 0) { displayHelp(sender, label); } else { String subcommand = args[0].toLowerCase(); if (subcommand.equals("setchest")) { if (!checkPlayer(sender) || !checkPermission(sender, "pricechest.setchest")) { return true; } Player player = ((Player) sender); Block target = player.getTargetBlock((Set<Material>) null, 5); plugin.setChestLocation(target.getLocation()); player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null); player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null); player.playEffect(target.getLocation(), Effect.MOBSPAWNER_FLAMES, null); plugin.sendMessage(sender, "Treasurechest location set!"); } else if (subcommand.equals("create")) { if (!checkPlayer(sender) || !checkPermission(sender, "pricechest.create")) { return true; } Player player = ((Player) sender); ItemStack inHand = player.getInventory().getItemInMainHand(); if (inHand == null || inHand.getType() == Material.AIR || inHand.getAmount() == 0) { plugin.sendMessage(sender, "You have to hold the display item in hand!", true); return true; } TreasureChestItem newItem = new TreasureChestItem(inHand.clone(), null, 0); plugin.getData().setActiveItem(player.getUniqueId(), newItem); plugin.sendMessage(sender, "Created a new Treasurechest item!"); } else if (subcommand.equals("addmoney")) { if (!checkPlayer(sender) || !checkPermission(sender, "pricechest.create")) { return true; } if (args.length < 2) { plugin.sendMessage(sender, "/" + label + " addmoney <amount>", true); return true; } int amount = getIntArgument(args[1], 0); Player player = ((Player) sender); TreasureChestItem activeItem = plugin.getData().getActiveItem(player.getUniqueId()); if (activeItem == null) { plugin.sendMessage(sender, "You have no active item!", true); return true; } activeItem.setPriceMoney(activeItem.getPriceMoney() + amount); plugin.sendMessage(sender, "Set the money to " + activeItem.getPriceMoney()); } else if (subcommand.equals("additem")) { if (!checkPlayer(sender) || !checkPermission(sender, "pricechest.create")) { return true; } Player player = ((Player) sender); ItemStack inHand = player.getInventory().getItemInMainHand(); if (inHand == null || inHand.getType() == Material.AIR || inHand.getAmount() == 0) { plugin.sendMessage(sender, "You have to hold the item in hand!", true); return true; } TreasureChestItem activeItem = plugin.getData().getActiveItem(player.getUniqueId()); if (activeItem == null) { plugin.sendMessage(sender, "You have no active item!", true); return true; } activeItem.addPriceItem(inHand.clone()); plugin.sendMessage(sender, "Item added: " + inHand.getAmount() + " " + TreasureChest.capitalize(inHand.getType().name(), true)); } else if (subcommand.equals("give")) { if (!checkPlayer(sender) || !checkPermission(sender, "pricechest.give")) { return true; } if (args.length < 2) { plugin.sendMessage(sender, "/" + label + " give <player>", true); return true; } Player player = ((Player) sender); TreasureChestItem activeItem = plugin.getData().getActiveItem(player.getUniqueId()); if (activeItem == null) { plugin.sendMessage(sender, "You have no active item!", true); return true; } for (int arg = 1; arg < args.length; arg++) { String nameOrId = args[arg].replace(",", "").trim(); UUID targetuuid = null; try { targetuuid = UUID.fromString(nameOrId); } catch (Exception e) { CachedPlayer target = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(nameOrId, true); if (target != null) { targetuuid = target.getUUID(); nameOrId = target.getName(); } } if (targetuuid == null) { plugin.sendMessage(sender, "Unknown player!", true); } else { PlayerTreasureChestContent content = plugin.getData().getChestContent(targetuuid); content.addItem(activeItem); plugin.sendMessage(sender, "Item given to: " + nameOrId + " (" + targetuuid.toString() + ")"); } } return true; } else if (subcommand.equals("list")) { if (!checkPermission(sender, "pricechest.list")) { return true; } if (args.length < 2) { plugin.sendMessage(sender, "/" + label + " list <player>", true); return true; } String nameOrId = args[1]; UUID targetuuid = null; try { targetuuid = UUID.fromString(nameOrId); } catch (Exception e) { CachedPlayer target = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(nameOrId, true); if (target != null) { targetuuid = target.getUUID(); nameOrId = target.getName(); } } if (targetuuid == null) { plugin.sendMessage(sender, "Unknown player!", true); return true; } PlayerTreasureChestContent content = plugin.getData().getChestContent(targetuuid); plugin.sendMessage(sender, ChatColor.GRAY + "Preise von " + nameOrId + " (" + targetuuid.toString() + "):"); List<TreasureChestItem> items = content.getItems(); if (items.isEmpty()) { plugin.sendMessage(sender, "keine Preise vorhanden"); } else { int nr = 1; for (TreasureChestItem i : items) { plugin.sendMessage(sender, nr + ": " + i.getDisplayItem().getItemMeta().getDisplayName()); nr++; } } } else if (subcommand.equals("remove")) { if (!checkPermission(sender, "pricechest.remove")) { return true; } if (args.length < 3) { plugin.sendMessage(sender, "/" + label + " remove <player> <nr>", true); return true; } String nameOrId = args[1]; UUID targetuuid = null; try { targetuuid = UUID.fromString(nameOrId); } catch (Exception e) { CachedPlayer target = plugin.getPlayerUUIDCache().getPlayerFromNameOrUUID(nameOrId, true); if (target != null) { targetuuid = target.getUUID(); nameOrId = target.getName(); } } if (targetuuid == null) { plugin.sendMessage(sender, "Unknown player!", true); return true; } int nr = getIntArgument(args[2], -1); PlayerTreasureChestContent content = plugin.getData().getChestContent(targetuuid); if (!content.removeItem(nr - 1)) { plugin.sendMessage(sender, "Ungültige ID", true); return true; } plugin.sendMessage(sender, "Der Preis wurde entfernt!"); } else { plugin.sendMessage(sender, "Unknown subcommand!", true); return true; } } return true; } private void displayHelp(CommandSender sender, String label) { plugin.sendMessage(sender, ChatColor.GREEN + "Commands"); if (checkPlayer(sender, true) && checkPermission(sender, "pricechest.setchest", true)) { plugin.sendMessage(sender, "/" + label + " setchest"); plugin.sendMessage(sender, ChatColor.GREEN + " Set the treasure chest location to the location you are looking at."); } if (checkPlayer(sender, true) && checkPermission(sender, "pricechest.create", true)) { plugin.sendMessage(sender, "/" + label + " create"); plugin.sendMessage(sender, ChatColor.GREEN + " Creates a price with the item in hand as display item."); plugin.sendMessage(sender, "/" + label + " additem"); plugin.sendMessage(sender, ChatColor.GREEN + " Adds the item in hand to the price."); plugin.sendMessage(sender, "/" + label + " addmoney <amount>"); plugin.sendMessage(sender, ChatColor.GREEN + " Adds money to a price."); } if (checkPlayer(sender, true) && checkPermission(sender, "pricechest.give", true)) { plugin.sendMessage(sender, "/" + label + " give <player>"); plugin.sendMessage(sender, ChatColor.GREEN + " Gives a price to a player."); } if (checkPermission(sender, "pricechest.list")) { plugin.sendMessage(sender, "/" + label + " list <player>"); plugin.sendMessage(sender, ChatColor.GREEN + " Gives price for a player."); } if (checkPermission(sender, "pricechest.remove")) { plugin.sendMessage(sender, "/" + label + " remove <player> <id>"); plugin.sendMessage(sender, ChatColor.GREEN + " Removes a price from a players chest."); } } private int getIntArgument(String value, int defaultValue) { try { return Integer.parseInt(value); } catch (Exception e) { // ignore - return default } return defaultValue; } private boolean checkPermission(CommandSender sender, String perm) { return checkPermission(sender, perm, false); } private boolean checkPermission(CommandSender sender, String perm, boolean silent) { boolean hasPermission = sender.hasPermission(perm); if (!silent && !hasPermission) { plugin.sendMessage(sender, "No permission!", true); } return hasPermission; } private boolean checkPlayer(CommandSender sender) { return checkPlayer(sender, false); } private boolean checkPlayer(CommandSender sender, boolean silent) { boolean isPlayer = sender instanceof Player; if (!isPlayer && !silent) { plugin.sendMessage(sender, "You must be a player!", true); } return isPlayer; } }