package world.bentobox.warps.commands; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import org.bukkit.World; import world.bentobox.bentobox.api.commands.CompositeCommand; import world.bentobox.bentobox.api.commands.DelayedTeleportCommand; import world.bentobox.bentobox.api.user.User; import world.bentobox.warps.Warp; /** * The /is warp command * * @author tastybento * */ public class WarpCommand extends DelayedTeleportCommand { private Warp addon; public WarpCommand(Warp addon, CompositeCommand bsbIslandCmd) { super(bsbIslandCmd, addon.getSettings().getWarpCommand()); this.addon = addon; } public WarpCommand(Warp addon) { super(addon, addon.getSettings().getWarpCommand()); this.addon = addon; } @Override public void setup() { this.setPermission(this.getParent() == null ? Warp.WELCOME_WARP_SIGNS + ".warp" : "island.warp"); this.setOnlyPlayer(true); this.setParametersHelp("warp.help.parameters"); this.setDescription("warp.help.description"); } @Override public boolean execute(User user, String label, List args) { if (args.size() == 1) { World world = getWorld() == null ? user.getWorld() : getWorld(); // Warp somewhere command Set warpList = addon.getWarpSignsManager().listWarps(world); if (warpList.isEmpty()) { user.sendMessage("warps.error.no-warps-yet"); user.sendMessage("warps.warpTip", "[text]", addon.getSettings().getWelcomeLine()); return false; } else { // Check if this is part of a name UUID foundWarp = warpList.stream().filter(u -> getPlayers().getName(u).equalsIgnoreCase(args.get(0)) || getPlayers().getName(u).toLowerCase().startsWith(args.get(0).toLowerCase())).findFirst().orElse(null); if (foundWarp == null) { user.sendMessage("warps.error.does-not-exist"); return false; } else { // Warp exists! this.delayCommand(user, () -> addon.getWarpSignsManager().warpPlayer(world, user, foundWarp)); return true; } } } showHelp(this, user); return false; } @Override public Optional> tabComplete(User user, String alias, List args) { World world = getWorld() == null ? user.getWorld() : getWorld(); return Optional.of(addon.getWarpSignsManager().listWarps(world).stream().map(getPlayers()::getName).collect(Collectors.toList())); } }