From a9b0afb40a6534d2de28dfb53757a25939b1c841 Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sat, 13 Mar 2021 12:09:54 -0500 Subject: [PATCH] Let plebs use `/sub teleport` There's still explicit permissions for this command, but granting `subservers.command` is no longer necessary. --- .../SubServers/Client/Bukkit/SubCommand.java | 69 ++++++++++--------- .../SubServers/Client/Sponge/SubCommand.java | 8 ++- 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java index b4524351..8a603b67 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/SubCommand.java @@ -731,38 +731,7 @@ public final class SubCommand extends BukkitCommand { sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Usage").replace("$str$", label.toLowerCase() + " " + args[0].toLowerCase() + " [[Template] ]")); } } else if (args[0].equalsIgnoreCase("tp") || args[0].equalsIgnoreCase("teleport")) { - if (args.length > ((sender instanceof Player)?1:2)) { - String select = args[(args.length > 2)?2:1]; - plugin.api.getServer(select, server -> { - if (server != null) { - if (permits(server, sender, "subservers.server.%.*", "subservers.server.%.teleport")) { - if (!(server instanceof SubServer) || ((SubServer) server).isRunning()) { - Player target = (args.length > 2)?Bukkit.getPlayer(args[1]):null; - if (target != null || args.length == 2) { - if (target == null || target == sender || permits(server, sender, "subservers.server.%.*", "subservers.server.%.teleport-others")) { - if (target == null) target = (Player) sender; - - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Teleport").replace("$str$", target.getName())); - plugin.pmc(target, "Connect", server.getName()); - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Invalid-Permission").replace("$str$", "subservers.server." + server.getName() + ".teleport-others")); - } - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Unknown-Player").replace("$str$", args[1])); - } - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Teleport.Not-Running").replace("$str$", server.getName())); - } - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Invalid-Select-Permission").replace("$str$", server.getName())); - } - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Unknown-Server").replace("$str$", select)); - } - }); - } else { - sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Usage").replace("$str$", label.toLowerCase() + " " + args[0].toLowerCase() + " " + ((sender instanceof Player)?"[Player]":"") + " ")); - } + executeTeleport(sender, label, args); } else if ((args[0].equalsIgnoreCase("view") || args[0].equalsIgnoreCase("open")) && sender instanceof Player) { if (plugin.gui != null) { if (sender.hasPermission("subservers.interface")) { @@ -824,6 +793,8 @@ public final class SubCommand extends BukkitCommand { sender.sendMessage(printHelp(sender, label)); } } + } else if (args.length > 0 && (args[0].equalsIgnoreCase("tp") || args[0].equalsIgnoreCase("teleport"))) { + executeTeleport(sender, label, args); } else if (sender.hasPermission("subservers.interface") && sender instanceof Player) { plugin.gui.getRenderer((Player) sender).newUI(); } else { @@ -832,6 +803,40 @@ public final class SubCommand extends BukkitCommand { } return true; } + private void executeTeleport(CommandSender sender, String label, String[] args) { + if (args.length > ((sender instanceof Player)?1:2)) { + String select = args[(args.length > 2)?2:1]; + plugin.api.getServer(select, server -> { + if (server != null) { + if (permits(server, sender, "subservers.server.%.*", "subservers.server.%.teleport")) { + if (!(server instanceof SubServer) || ((SubServer) server).isRunning()) { + Player target = (args.length > 2)?Bukkit.getPlayer(args[1]):null; + if (target != null || args.length == 2) { + if (target == null || target == sender || permits(server, sender, "subservers.server.%.*", "subservers.server.%.teleport-others")) { + if (target == null) target = (Player) sender; + + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Teleport").replace("$str$", target.getName())); + plugin.pmc(target, "Connect", server.getName()); + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Invalid-Permission").replace("$str$", "subservers.server." + server.getName() + ".teleport-others")); + } + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Unknown-Player").replace("$str$", args[1])); + } + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Teleport.Not-Running").replace("$str$", server.getName())); + } + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Invalid-Select-Permission").replace("$str$", server.getName())); + } + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Unknown-Server").replace("$str$", select)); + } + }); + } else { + sender.sendMessage(plugin.api.getLang("SubServers", "Command.Generic.Usage").replace("$str$", label.toLowerCase() + " " + args[0].toLowerCase() + " " + ((sender instanceof Player)?"[Player]":"") + " ")); + } + } private void selectServers(CommandSender sender, String[] rargs, int index, boolean mode, String permissions, Callback callback) { selectServers(sender, rargs, index, mode, Arrays.asList(permissions), callback); } diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java index 664c539d..4c0dff52 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubCommand.java @@ -135,12 +135,16 @@ public final class SubCommand implements CommandExecutor { } private boolean canRun(CommandSource sender) throws CommandException { + return canRun(sender, false); + } + + private boolean canRun(CommandSource sender, boolean permitted) throws CommandException { if (SubAPI.getInstance().getSubDataNetwork()[0] == null) { throw new CommandException(Text.builder("An exception has occurred while running this command").color(TextColors.RED).build(), new IllegalStateException("SubData is not connected"), false); } else if (plugin.lang == null) { throw new CommandException(Text.builder("An exception has occurred while running this command").color(TextColors.RED).build(), new IllegalStateException("There are no lang options available at this time"), false); } else { - return sender.hasPermission("subservers.command"); + return permitted || sender.hasPermission("subservers.command"); } } @@ -1132,7 +1136,7 @@ public final class SubCommand implements CommandExecutor { public final class TELEPORT implements CommandExecutor { public CommandResult execute(CommandSource sender, CommandContext args) throws CommandException { - if (canRun(sender)) { + if (canRun(sender, true)) { Optional p = args.getOne(Text.of("Player")); Optional s = args.getOne(Text.of("Server")); if (!s.isPresent()) {