package tv.mineinthebox.essentials.commands; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; 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 CmdHomeInvite extends CommandTemplate { private final xEssentials pl; public CmdHomeInvite(xEssentials pl, Command cmd, CommandSender sender) { super(pl, cmd, sender); this.pl = pl; } public boolean execute(CommandSender sender, Command cmd, String[] args) { if(cmd.getName().equalsIgnoreCase("homeinvite")) { if(sender instanceof Player) { if(sender.hasPermission(PermissionKey.CMD_HOME_INVITE.getPermission())) { if(args.length == 0) { showHelp(); } else if(args.length == 1) { if(args[0].equalsIgnoreCase("help")) { showHelp(); } else if(args[0].equalsIgnoreCase("accept")) { if(pl.getManagers().getHomeInviteManager().containsKey(sender.getName())) { Player p = (Player) sender; Home home = pl.getManagers().getHomeInviteManager().getRequestedHome(sender.getName()); sendMessage("you have accepted " + pl.getManagers().getHomeInviteManager().get(sender.getName()).getName() + " his home request!"); p.teleport(home.getLocation(), TeleportCause.COMMAND); XOfflinePlayer off = pl.getManagers().getHomeInviteManager().get(sender.getName()); if(off.getBukkitPlayer() instanceof Player) { sendMessageTo(off.getBukkitPlayer(), sender.getName() + " has accepted your home request"); } pl.getManagers().getHomeInviteManager().remove(sender.getName()); pl.getManagers().getHomeInviteManager().removeRequestedHome(sender.getName()); } else { sendMessage("you don't have home requests open!"); } } else if(args[0].equalsIgnoreCase("deny")) { if(pl.getManagers().getHomeInviteManager().containsKey(sender.getName())) { XOfflinePlayer off = pl.getManagers().getHomeInviteManager().get(sender.getName()); if(off.getBukkitPlayer() instanceof Player) { sendMessageTo(off.getBukkitPlayer(), "your invite has been canceled by " + sender.getName()); } sendMessage("successfully canceled home invite for player " + off.getName()); pl.getManagers().getHomeInviteManager().remove(sender.getName()); pl.getManagers().getHomeInviteManager().removeRequestedHome(sender.getName()); } else { sendMessage("you don't have home requests open!"); } } else { if(!pl.getManagers().getHomeInviteManager().containsKey(args[0])) { XOfflinePlayer xp = pl.getManagers().getPlayerManager().getOfflinePlayer(sender.getName()); if(xp.hasHome()) { Player victem = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]).getBukkitPlayer(); if(victem instanceof Player) { XPlayer xpp = pl.getManagers().getPlayerManager().getPlayer(victem.getName()); if(xpp.isVanished()) { sendMessage("player is not online!"); return false; } pl.getManagers().getHomeInviteManager().put(victem.getName(), xp); if(pl.getManagers().getHomeInviteManager().setRequestedHome(victem.getName(), "default")) { delayed(victem.getName(), xp.getName()); sendMessage("you successfully sended a home request to " + victem.getName()); sendMessageTo(victem, sender.getName() + " has invited you to his default home type:"); sendMessageTo(victem, "/hi accept - you get teleported to his home"); sendMessageTo(victem, "/hi deny - you don't get teleported to his home"); } else { sendMessage("you don't have set any home!"); } } else { sendMessage("player is not online!"); } } else { sendMessage("you don't have any homes set!"); } } else { sendMessage("you cannot invite this player when he already is invited by you!"); } } } else if(args.length == 2) { if(!pl.getManagers().getHomeInviteManager().containsKey(args[0])) { XOfflinePlayer xp = pl.getManagers().getPlayerManager().getOfflinePlayer(sender.getName()); if(xp.hasHome()) { Player victem = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]).getBukkitPlayer(); if(victem instanceof Player) { XPlayer xpp = pl.getManagers().getPlayerManager().getPlayer(victem.getName()); if(xpp.isVanished()) { sendMessage("player is not online!"); return false; } pl.getManagers().getHomeInviteManager().put(victem.getName(), xp); if(pl.getManagers().getHomeInviteManager().setRequestedHome(victem.getName(), args[1])) { delayed(victem.getName(), xp.getName()); sendMessage("you successfully sended a home request to " + victem.getName()); sendMessageTo(victem, sender.getName() + " has invited you to his default home type:"); sendMessageTo(victem, "/hi accept - you get teleported to his home"); sendMessageTo(victem, "/hi deny - you don't get teleported to his home"); } else { sendMessage("you don't have set any home!"); } } else { sendMessage("player is not online!"); } } else { sendMessage("you don't have any homes set!"); } } else { sendMessage("you cannot invite this player when he already is invited by you!"); } } } else { getWarning(WarningType.NO_PERMISSION); } } else { getWarning(WarningType.PLAYER_ONLY); } } return false; } private void delayed(final String requester, final String victem) { Bukkit.getScheduler().scheduleSyncDelayedTask(pl, new Runnable() { @Override public void run() { if(pl.getManagers().getHomeInviteManager().containsKey(requester)) { Player rp = pl.getManagers().getPlayerManager().getOfflinePlayer(victem).getBukkitPlayer(); Player vp = pl.getManagers().getPlayerManager().getOfflinePlayer(requester).getBukkitPlayer(); if(rp instanceof Player) { sendMessageTo(rp, requester + " has not accepted your home request, over time."); } if(vp instanceof Player) { sendMessageTo(vp, victem + " his home invite has been over time and canceled out."); } pl.getManagers().getHomeInviteManager().remove(requester); pl.getManagers().getHomeInviteManager().removeRequestedHome(requester); } } }, 1000); } @Override public void showHelp() { sender.sendMessage(ChatColor.GOLD + ".oO___[Home invite help]___Oo."); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/homeinvite help " + ChatColor.WHITE + ": shows help"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/homeinvite accept " + ChatColor.WHITE + ": accept a home invite of a player"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/homeinvite deny " + ChatColor.WHITE + ": deny a home invite of a player"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/homeinvite <player> " + ChatColor.WHITE + ": invites a player to your default home"); sender.sendMessage(ChatColor.DARK_GRAY + "Default: " + ChatColor.GRAY + "/homeinvite <player> <home>" + ChatColor.WHITE + ": invites a player to your custom home"); } }