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 79ea9cb27..0c23da9b8 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 @@ -518,39 +518,42 @@ public class VirtualDecreeCommand { } private String pickValidOption(VolmitSender sender, KList validOptions, DecreeParameterHandler handler, String name, String type) { - sender.sendHeader("Pick a " + name + " (" + type + ")"); - sender.sendMessageRaw("This query will expire in 15 seconds."); - String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); - int m = 0; + int tries = 3; + KList options = validOptions.convert(handler::toStringForce); + String result = null; + while (tries-- > 0 && (result == null || !options.contains(result))) { - for (String i : validOptions.convert(handler::toStringForce)) { - sender.sendMessage("'>" + "- " + gradients[m % gradients.length] + i + ""); - m++; + sender.sendHeader("Pick a " + name + " (" + type + ")"); + sender.sendMessageRaw("This query will expire in 15 seconds."); + String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); + int m = 0; + + for (String i : validOptions.convert(handler::toStringForce)) { + sender.sendMessage("'>" + "- " + gradients[m % gradients.length] + i + ""); + m++; + } + + CompletableFuture future = new CompletableFuture<>(); + if (sender.isPlayer()) { + Iris.service(CommandSVC.class).post(password, future); + + 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); + } + } else { + Iris.service(CommandSVC.class).postConsole(future); + } + + try { + result = future.get(15, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException ignored) { + + } } - if (sender.isPlayer()) { - CompletableFuture future = new CompletableFuture<>(); - Iris.service(CommandSVC.class).post(password, future); - - 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 ignored) { - - } - } else { - CompletableFuture future = new CompletableFuture<>(); - Iris.service(CommandSVC.class).postConsole(future); - try { - String result = future.get(15, TimeUnit.SECONDS); - return validOptions.convert(handler::toStringForce).contains(result) ? result : null; - } catch (InterruptedException | ExecutionException | TimeoutException ignored) { - - } + if (result != null && options.contains(result)) { + return result; } return null;