diff --git a/src/main/java/com/volmit/iris/core/service/CommandSVC.java b/src/main/java/com/volmit/iris/core/service/CommandSVC.java index 63fe2f0de..371fa3379 100644 --- a/src/main/java/com/volmit/iris/core/service/CommandSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CommandSVC.java @@ -31,11 +31,14 @@ import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.J; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.server.ServerCommandEvent; +import java.util.Locale; import java.util.concurrent.CompletableFuture; public class CommandSVC implements IrisService, DecreeSystem { private final KMap> futures = new KMap<>(); + private CompletableFuture consoleFuture = null; private final transient AtomicCache commandCache = new AtomicCache<>(); @Override @@ -70,6 +73,17 @@ public class CommandSVC implements IrisService, DecreeSystem { } } + @EventHandler + public void on(ServerCommandEvent e) { + if (consoleFuture != null && !consoleFuture.isCancelled() && !consoleFuture.isDone()) { + if (!e.getCommand().contains(" ")) { + String pick = e.getCommand().trim().toLowerCase(Locale.ROOT); + consoleFuture.complete(pick); + e.setCancelled(true); + } + } + } + @Override public VirtualDecreeCommand getRoot() { return commandCache.aquireNastyPrint(() -> VirtualDecreeCommand.createRoot(new CommandIris())); @@ -78,4 +92,8 @@ public class CommandSVC implements IrisService, DecreeSystem { public void post(String password, CompletableFuture future) { futures.put(password, future); } + + public void postConsole(CompletableFuture future) { + consoleFuture = future; + } } diff --git a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java index eaadf8d43..02ef2e15d 100644 --- a/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java +++ b/src/main/java/com/volmit/iris/util/decree/virtual/VirtualDecreeCommand.java @@ -34,6 +34,7 @@ import com.volmit.iris.util.decree.exceptions.DecreeParsingException; import com.volmit.iris.util.decree.exceptions.DecreeWhichException; import com.volmit.iris.util.format.C; import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.parallel.MultiBurst; import com.volmit.iris.util.plugin.CommandDummy; import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.scheduling.ChronoLatch; @@ -518,13 +519,6 @@ public class VirtualDecreeCommand { } private String pickValidOption(VolmitSender sender, KList validOptions, DecreeParameterHandler handler, String name, String type) { - - if (!sender.isPlayer()) { - sender.sendMessage(C.YELLOW + "There were multiple (" + validOptions.size() + ") options for '" + name + "' (of type '" + type + "'), but we selected '" + handler.toStringForce(validOptions.get(0)) + "'"); - return handler.toStringForce(validOptions.get(0)); - } - - sender.sendHeader("Pick a " + name + " (" + type + ")"); sender.sendMessageRaw("This query will expire in 15 seconds."); String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); @@ -535,18 +529,28 @@ public class VirtualDecreeCommand { m++; } - CompletableFuture future = new CompletableFuture<>(); - Iris.service(CommandSVC.class).post(password, future); + if (sender.isPlayer()) { + CompletableFuture future = new CompletableFuture<>(); + Iris.service(CommandSVC.class).post(password, future); - if (IrisSettings.get().getGeneral().isCommandSounds() && sender.isPlayer()) { - (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_AMETHYST_CLUSTER_BREAK, 0.77f, 0.65f); - (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_BEACON_DEACTIVATE, 0.125f, 1.99f); - } + if (IrisSettings.get().getGeneral().isCommandSounds()) { + (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_AMETHYST_CLUSTER_BREAK, 0.77f, 0.65f); + (sender.player()).playSound((sender.player()).getLocation(), Sound.BLOCK_BEACON_DEACTIVATE, 0.125f, 1.99f); + } - try { - return future.get(15, TimeUnit.SECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { + try { + return future.get(15, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException ignored) { + } + } else { + CompletableFuture future = new CompletableFuture<>(); + Iris.service(CommandSVC.class).postConsole(future); + try { + return future.get(15, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException ignored) { + + } } return null;