package dev.siskel.poketDimensions.commands.player; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.logging.Logger; import java.util.stream.Collectors; import dev.siskel.poketDimensions.managers.InviteManager; import dev.siskel.poketDimensions.managers.PoketDimensionManager; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; public class pd implements CommandExecutor, TabCompleter{ public static final String[] actionlist = new String[]{"invite", "kick", "acceptinv"}; public Logger logger = Bukkit.getLogger(); private final Plugin plugin = Bukkit.getPluginManager().getPlugin("PoketDimensions"); private final InviteManager inviteManager; private final PoketDimensionManager pocketDimensionManager; public pd(InviteManager inviteManager, PoketDimensionManager pocketDimensionManager) { this.inviteManager = inviteManager; this.pocketDimensionManager = pocketDimensionManager; } public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage("This command can only be executed by a player."); return true; } else { Player player = ((Player)sender).getPlayer(); if (args.length != 0 && !args[0].isEmpty()) { boolean isValidAction = Arrays.stream(actionlist).anyMatch((action) -> action.equals(args[0])); if (!isValidAction) { player.sendMessage("Invalid action. Valid actions are: " + Arrays.toString(actionlist)); return true; } else { this.logger.info(Arrays.toString(args)); if (args[0].equals("invite")) { if (!player.hasPermission("pocketdimensions.commands.player.pd.invite")) { player.sendMessage(ChatColor.RED + "No permission"); return true; } else if (args.length < 2) { player.sendMessage("You must specify a player for this action.\nUsage:/pd invite "); return true; } else { String targetPlayerName = args[1]; Player targetPlayer = Bukkit.getPlayer(targetPlayerName); if (targetPlayer == null) { player.sendMessage("The specified player is not online."); return true; } else { this.inviteManager.sendInvite(player, targetPlayer); return true; } } } else { if (args[0].equals("acceptinv")) { this.inviteManager.acceptInvite((Player)Objects.requireNonNull(((Player)sender).getPlayer())); } if (args[0].equals("kick")) { if (!player.hasPermission("pocketdimensions.commands.player.pd.kick")) { player.sendMessage(ChatColor.RED + "No permission"); return true; } if (args.length < 2) { player.sendMessage("You must specify a player for this action.\nUsage:/pd kick "); return true; } String targetPlayerName = args[1]; Player targetPlayer = Bukkit.getPlayer(targetPlayerName); this.pocketDimensionManager.kick(player, targetPlayer); } return true; } } } else { player.sendMessage("Mention an action. Usage: /pd [player]"); return true; } } } public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { if (args.length == 1) { return Arrays.asList(actionlist); } else { return args.length == 2 ? (List)Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()) : null; } } }