diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java index cfa091585..2fc9d75fa 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java @@ -74,7 +74,7 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec @Override public boolean onCommand(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, @NonNull String[] args) { Sender wrapped = this.plugin.getSenderFactory().wrap(sender); - List arguments = processSelectors(sender, ArgumentTokenizer.EXECUTE.tokenizeInput(args)); + List arguments = resolveSelectors(sender, ArgumentTokenizer.EXECUTE.tokenizeInput(args)); executeCommand(wrapped, label, arguments); return true; } @@ -82,11 +82,11 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec @Override public List onTabComplete(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, @NonNull String[] args) { Sender wrapped = this.plugin.getSenderFactory().wrap(sender); - List arguments = processSelectors(sender, ArgumentTokenizer.TAB_COMPLETE.tokenizeInput(args)); + List arguments = resolveSelectors(sender, ArgumentTokenizer.TAB_COMPLETE.tokenizeInput(args)); return tabCompleteCommand(wrapped, arguments); } - private List processSelectors(CommandSender sender, List args) { + private List resolveSelectors(CommandSender sender, List args) { if (!SELECT_ENTITIES_SUPPORTED) { return args; } @@ -95,8 +95,7 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec return args; } - ListIterator it = args.listIterator(); - while (it.hasNext()) { + for (ListIterator it = args.listIterator(); it.hasNext(); ) { String arg = it.next(); if (arg.isEmpty() || arg.charAt(0) != '@') { continue; @@ -127,6 +126,7 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec Player player = matchedPlayers.get(0); it.set(player.getUniqueId().toString()); } + return args; } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index d98fe94b6..2e4264ed5 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -148,12 +148,12 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin { } if (isAsyncTabCompleteSupported()) { - this.commandManager = new BukkitAsyncCommandExecutor(this); + this.commandManager = new BukkitAsyncCommandExecutor(this, command); } else { - this.commandManager = new BukkitCommandExecutor(this); + this.commandManager = new BukkitCommandExecutor(this, command); } - this.commandManager.register(command); + this.commandManager.register(); // setup brigadier if (isBrigadierSupported()) { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java index 8194524f7..2da54b1ae 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java @@ -149,7 +149,8 @@ public abstract class AbstractConfigurateStorage implements StorageImplementatio protected RuntimeException reportException(String file, Exception ex) throws RuntimeException { this.plugin.getLogger().warn("Exception thrown whilst performing i/o: " + file); ex.printStackTrace(); - throw Throwables.propagate(ex); + Throwables.throwIfUnchecked(ex); + throw new RuntimeException(ex); } @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java index 33bf9425f..d59d89eed 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java @@ -38,6 +38,7 @@ import me.lucko.luckperms.common.util.MoreFiles; import org.slf4j.Logger; import org.spongepowered.api.Game; import org.spongepowered.api.Platform; +import org.spongepowered.api.Server; import org.spongepowered.api.Sponge; import org.spongepowered.api.config.ConfigDir; import org.spongepowered.api.entity.living.player.Player; @@ -203,6 +204,10 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { return this.game; } + public Optional getServer() { + return this.game.isServerAvailable() ? Optional.of(this.game.getServer()) : Optional.empty(); + } + public Scheduler getSpongeScheduler() { return this.spongeScheduler; } @@ -232,13 +237,13 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { @Override public String getServerBrand() { - return getGame().getPlatform().getContainer(Platform.Component.IMPLEMENTATION).getName(); + return this.game.getPlatform().getContainer(Platform.Component.IMPLEMENTATION).getName(); } @Override public String getServerVersion() { - PluginContainer api = getGame().getPlatform().getContainer(Platform.Component.API); - PluginContainer impl = getGame().getPlatform().getContainer(Platform.Component.IMPLEMENTATION); + PluginContainer api = this.game.getPlatform().getContainer(Platform.Component.API); + PluginContainer impl = this.game.getPlatform().getContainer(Platform.Component.IMPLEMENTATION); return api.getName() + ": " + api.getVersion().orElse("null") + " - " + impl.getName() + ": " + impl.getVersion().orElse("null"); } @@ -265,55 +270,45 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { @Override public Optional getPlayer(UUID uniqueId) { - if (!getGame().isServerAvailable()) { - return Optional.empty(); - } - - return getGame().getServer().getPlayer(uniqueId); + return getServer().flatMap(s -> s.getPlayer(uniqueId)); } @Override public Optional lookupUniqueId(String username) { - if (!getGame().isServerAvailable()) { - return Optional.empty(); - } - - return getGame().getServer().getGameProfileManager().get(username) + return getServer().flatMap(server -> server.getGameProfileManager().get(username) .thenApply(p -> Optional.of(p.getUniqueId())) .exceptionally(x -> Optional.empty()) - .join(); + .join() + ); } @Override public Optional lookupUsername(UUID uniqueId) { - if (!getGame().isServerAvailable()) { - return Optional.empty(); - } - - return getGame().getServer().getGameProfileManager().get(uniqueId) + return getServer().flatMap(server -> server.getGameProfileManager().get(uniqueId) .thenApply(GameProfile::getName) .exceptionally(x -> Optional.empty()) - .join(); + .join() + ); } @Override public int getPlayerCount() { - return getGame().isServerAvailable() ? getGame().getServer().getOnlinePlayers().size() : 0; + return getServer().map(server -> server.getOnlinePlayers().size()).orElse(0); } @Override public Stream getPlayerList() { - return getGame().isServerAvailable() ? getGame().getServer().getOnlinePlayers().stream().map(Player::getName) : Stream.empty(); + return getServer().map(server -> server.getOnlinePlayers().stream().map(Player::getName)).orElseGet(Stream::empty); } @Override public Stream getOnlinePlayers() { - return getGame().isServerAvailable() ? getGame().getServer().getOnlinePlayers().stream().map(Player::getUniqueId) : Stream.empty(); + return getServer().map(server -> server.getOnlinePlayers().stream().map(Player::getUniqueId)).orElseGet(Stream::empty); } @Override public boolean isPlayerOnline(UUID uniqueId) { - return getGame().isServerAvailable() ? getGame().getServer().getPlayer(uniqueId).map(Player::isOnline).orElse(false) : false; + return getServer().flatMap(server -> server.getPlayer(uniqueId).map(Player::isOnline)).orElse(false); } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java index fd7b19d32..bc94789d9 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -256,19 +256,17 @@ public class LPSpongePlugin extends AbstractLuckPermsPlugin { @Override public Stream getOnlineSenders() { - if (!this.bootstrap.getGame().isServerAvailable()) { - return Stream.empty(); - } - return Stream.concat( Stream.of(getConsoleSender()), - this.bootstrap.getGame().getServer().getOnlinePlayers().stream().map(s -> this.senderFactory.wrap(s)) + this.bootstrap.getServer().map(server -> server.getOnlinePlayers().stream().map(s -> this.senderFactory.wrap(s))).orElseGet(Stream::empty) ); } @Override public Sender getConsoleSender() { - if (!this.bootstrap.getGame().isServerAvailable()) { + if (this.bootstrap.getGame().isServerAvailable()) { + return this.senderFactory.wrap(this.bootstrap.getGame().getServer().getConsole()); + } else { return new DummySender(this, Sender.CONSOLE_UUID, Sender.CONSOLE_NAME) { @Override protected void consumeMessage(String s) { @@ -276,7 +274,6 @@ public class LPSpongePlugin extends AbstractLuckPermsPlugin { } }; } - return this.senderFactory.wrap(this.bootstrap.getGame().getServer().getConsole()); } @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java index 311088a66..bbb6ca50a 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java @@ -57,7 +57,7 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall @Override public @NonNull CommandResult process(@NonNull CommandSource source, @NonNull String args) { Sender wrapped = this.plugin.getSenderFactory().wrap(source); - List arguments = processSelectors(source, ArgumentTokenizer.EXECUTE.tokenizeInput(args)); + List arguments = resolveSelectors(source, ArgumentTokenizer.EXECUTE.tokenizeInput(args)); executeCommand(wrapped, "lp", arguments); return CommandResult.success(); } @@ -65,7 +65,7 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall @Override public @NonNull List getSuggestions(@NonNull CommandSource source, @NonNull String args, @Nullable Location location) { Sender wrapped = this.plugin.getSenderFactory().wrap(source); - List arguments = processSelectors(source, ArgumentTokenizer.TAB_COMPLETE.tokenizeInput(args)); + List arguments = resolveSelectors(source, ArgumentTokenizer.TAB_COMPLETE.tokenizeInput(args)); return tabCompleteCommand(wrapped, arguments); } @@ -89,13 +89,12 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall return Text.of("/luckperms"); } - private List processSelectors(CommandSource source, List args) { + private List resolveSelectors(CommandSource source, List args) { if (!this.plugin.getConfiguration().get(ConfigKeys.RESOLVE_COMMAND_SELECTORS)) { return args; } - ListIterator it = args.listIterator(); - while (it.hasNext()) { + for (ListIterator it = args.listIterator(); it.hasNext(); ) { String arg = it.next(); if (arg.isEmpty() || arg.charAt(0) != '@') { continue; @@ -126,6 +125,7 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall Player player = matchedPlayers.get(0); it.set(player.getUniqueId().toString()); } + return args; }