package tv.mineinthebox.essentials.commands; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import tv.mineinthebox.essentials.xEssentials; import tv.mineinthebox.essentials.enums.PermissionKey; import tv.mineinthebox.essentials.instances.Home; import tv.mineinthebox.essentials.interfaces.CommandTemplate; import tv.mineinthebox.essentials.interfaces.XOfflinePlayer; import tv.mineinthebox.essentials.interfaces.XPlayer; public class CmdHome extends CommandTemplate { private final xEssentials pl; public CmdHome(xEssentials pl, Command cmd, CommandSender sender) { super(pl, cmd, sender); this.pl = pl; } private List<String> getPlayers(String p) { List<String> players = new ArrayList<String>(); for(XOfflinePlayer off : pl.getManagers().getPlayerManager().getOfflinePlayers()) { if(off.getName().toUpperCase().startsWith(p.toUpperCase())) { players.add(off.getName()); } } return players; } private List<String> getHomes(String sender, String homename) { List<String> homes = new ArrayList<String>(); XOfflinePlayer xp = pl.getManagers().getPlayerManager().getOfflinePlayer(sender); for(Home home : xp.getAllHomes()) { if(home.getHomeName().toUpperCase().startsWith(homename.toUpperCase())) { homes.add(home.getHomeName()); } } return homes; } public List<String> onTabComplete(CommandSender sender, Command cmd, String[] args) { if(cmd.getName().equalsIgnoreCase("home")) { if(args.length == 1) { if(!sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { if(sender.hasPermission(PermissionKey.MULTIPLE_HOMES.getPermission())) { return getHomes(sender.getName(), args[0]); } } else { return getPlayers(args[0]); } } else if(args.length == 2) { if(!args[0].equalsIgnoreCase("list")) { if(args[0].equalsIgnoreCase("remove")) { if(sender.hasPermission(PermissionKey.MULTIPLE_HOMES.getPermission())) { return getHomes(sender.getName(), args[1]); } } else { if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { if(pl.getManagers().getPlayerManager().isEssentialsPlayer(args[0])) { return getHomes(args[0], args[1]); } } } } else { if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { return getPlayers(args[1]); } } } } return null; } public boolean execute(CommandSender sender, Command cmd, String[] args) { if(cmd.getName().equalsIgnoreCase("home")) { if(sender.hasPermission(PermissionKey.CMD_HOME.getPermission())) { if(args.length == 0) { if(sender instanceof Player) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(sender.getName()); if(xp.hasHome()) { Home home = xp.getHome("default"); if(xp.getBukkitPlayer().isInsideVehicle()) { if(xp.getBukkitPlayer().getVehicle() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) xp.getBukkitPlayer().getVehicle(); xp.getBukkitPlayer().getVehicle().eject(); xp.getBukkitPlayer().teleport(home.getLocation(), TeleportCause.COMMAND); entity.teleport(home.getLocation(), TeleportCause.COMMAND); entity.setPassenger(xp.getBukkitPlayer()); sendMessage("teleporting to your default home!"); } else { xp.getBukkitPlayer().getVehicle().eject(); xp.getBukkitPlayer().teleport(home.getLocation(), TeleportCause.COMMAND); sendMessage("teleporting to your default home!"); } } else { xp.getBukkitPlayer().teleport(home.getLocation(), TeleportCause.COMMAND); sendMessage("teleporting to your default home!"); } } else { sendMessage("you don't have set any home!"); } } else { getWarning(WarningType.PLAYER_ONLY); } } else if(args.length == 1) { if(args[0].equalsIgnoreCase("help")) { showHelp(); } else if(args[0].equalsIgnoreCase("list")) { if(sender instanceof Player) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(sender.getName()); if(xp.hasHome()) { List<String> list = new ArrayList<String>(); for(Home home : xp.getAllHomes()) { list.add(home.getHomeName()); } String HomeNames = Arrays.toString(list.toArray(new String[list.size()])).replace("[", "").replace("]", ""); sender.sendMessage(ChatColor.GOLD + ".oO___[home list]___Oo."); sender.sendMessage(ChatColor.GRAY + HomeNames); } } else { getWarning(WarningType.PLAYER_ONLY); } } else { if(pl.getManagers().getPlayerManager().isEssentialsPlayer(args[0])) { if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { if(sender instanceof Player) { Player p = (Player) sender; XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]); if(!off.hasHome()) { sendMessage(off.getName() + " has no home set!"); return false; } Location loc = off.getHome("default").getLocation(); if(p.isInsideVehicle()) { if(p.getVehicle() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) p.getVehicle(); p.getVehicle().eject(); p.teleport(loc, TeleportCause.COMMAND); entity.teleport(loc, TeleportCause.COMMAND); entity.setPassenger(p); sendMessage("teleporting to " + off.getName() + " his default home!"); } else { p.getPlayer().getVehicle().eject(); sendMessage("teleporting to " + off.getName() + " his default home!"); p.teleport(loc, TeleportCause.COMMAND); } } else { sendMessage("teleporting to " + off.getName() + " his default home!"); p.teleport(loc, TeleportCause.COMMAND); } } else { getWarning(WarningType.PLAYER_ONLY); } } else { sendMessage("your home is a players name now which is not allowed"); } } else { if(sender.hasPermission(PermissionKey.MULTIPLE_HOMES.getPermission()) || pl.getConfiguration().getPlayerConfig().canUseMoreHomes()) { if(sender instanceof Player) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(sender.getName()); if(xp.hasHome()) { if(xp.isValidHome(args[0])) { Location loc = xp.getHome(args[0]).getLocation(); if(xp.getBukkitPlayer().isInsideVehicle()) { if(xp.getBukkitPlayer().getVehicle() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) xp.getBukkitPlayer().getVehicle(); xp.getBukkitPlayer().getVehicle().eject(); xp.getBukkitPlayer().teleport(loc, TeleportCause.COMMAND); entity.teleport(loc, TeleportCause.COMMAND); entity.setPassenger(xp.getBukkitPlayer()); sendMessage("teleporting to your custom home " + args[0]); } else { xp.getBukkitPlayer().getVehicle().eject(); sendMessage("teleporting to your custom home " + args[0]); xp.getBukkitPlayer().teleport(loc, TeleportCause.COMMAND); } } else { sendMessage("teleporting to your custom home " + args[0]); xp.getBukkitPlayer().teleport(loc, TeleportCause.COMMAND); } } else { sendMessage("invalid home!"); } } else { sendMessage("you don't have any home set!"); } } else { getWarning(WarningType.PLAYER_ONLY); } } else { getWarning(WarningType.NO_PERMISSION); } } } } else if(args.length == 2) { if(args[0].equalsIgnoreCase("remove")) { if(sender instanceof Player) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(sender.getName()); if(xp.isValidHome(args[1])) { xp.removeHome(args[1]); sendMessage("home successfully removed!"); } else { sendMessage("invalid home name!"); } } else { getWarning(WarningType.PLAYER_ONLY); } } else if(args[0].equalsIgnoreCase("list")) { if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { if(pl.getManagers().getPlayerManager().isEssentialsPlayer(args[1])) { XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[1]); if(off.hasHome()) { List<String> list = new ArrayList<String>(); for(Home home : off.getAllHomes()) { list.add(home.getHomeName()); } String[] homes = list.toArray(new String[list.size()]); sendMessage(ChatColor.GOLD + ".oO___[home list for player " + off.getName() + " ]___Oo."); sendMessage(ChatColor.GRAY + Arrays.toString(homes).replace("[", "").replace("]", "")); } } else { sendMessage("this player has never played before!"); } } else { getWarning(WarningType.NO_PERMISSION); } } else { if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { if(sender instanceof Player) { Player p = (Player) sender; if(pl.getManagers().getPlayerManager().isEssentialsPlayer(args[0])) { XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]); if(off.hasHome()) { if(off.isValidHome(args[1])) { Location loc = off.getHome(args[1]).getLocation(); if(p.isInsideVehicle()) { if(p.getVehicle() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) p.getVehicle(); p.getVehicle().eject(); p.teleport(loc, TeleportCause.COMMAND); entity.teleport(loc, TeleportCause.COMMAND); entity.setPassenger(p); sendMessage("teleporting to " + off.getName() + " his custom home " + args[1]); } else { p.getVehicle().eject(); sendMessage("teleporting to " + off.getName() + " his custom home " + args[1]); p.teleport(loc, TeleportCause.COMMAND); } } else { sendMessage("teleporting to " + off.getName() + " his custom home " + args[1]); p.teleport(loc, TeleportCause.COMMAND); } } else { sendMessage("invalid home!"); } } else { sendMessage(off.getName() + " has no homes set!"); } } else { sendMessage("this player has never played before!"); } } else { getWarning(WarningType.PLAYER_ONLY); } } else { getWarning(WarningType.NO_PERMISSION); } } } } else { getWarning(WarningType.NO_PERMISSION); } } return false; } @Override public void showHelp() { sender.sendMessage(ChatColor.GOLD + ".oO___[homes help]___Oo."); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/home " + ChatColor.WHITE + ": teleport to your default home"); if(sender.hasPermission(PermissionKey.MULTIPLE_HOMES.getPermission()) || pl.getConfiguration().getPlayerConfig().canUseMoreHomes()) { if(sender instanceof Player) { XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(sender.getName()); sender.sendMessage(ChatColor.GREEN + "you can use max " + ChatColor.GRAY + xp.getAmountOfHomes() + "/" + pl.getConfiguration().getPlayerConfig().getMaxHomesAllowed() + ChatColor.GREEN + " homes!"); } sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/home list " + ChatColor.WHITE + ": shows a list of all homes you own!"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/home <home name> " + ChatColor.WHITE + ": allows you to teleport to a custom home"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/home remove <home name> " + ChatColor.WHITE + ": allows you to remove a home"); } if(sender.hasPermission(PermissionKey.IS_ADMIN.getPermission())) { sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/home <player> " + ChatColor.WHITE + ": allows you to teleport to a players home"); sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/home list <player> " + ChatColor.WHITE + ": shows a list of all homes owned by this player"); sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/home <player> <home name> " + ChatColor.WHITE + ": allows you to teleport to a players custom home"); } } }