From 85fe65612eec5f61333e5aec0590c05e62f330f1 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 27 Sep 2021 15:26:40 +0200 Subject: [PATCH 1/3] Only accept posted console option picking when valid result --- .../volmit/iris/util/decree/virtual/VirtualDecreeCommand.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 8ff7a9f25..79ea9cb27 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 @@ -546,7 +546,8 @@ public class VirtualDecreeCommand { CompletableFuture future = new CompletableFuture<>(); Iris.service(CommandSVC.class).postConsole(future); try { - return future.get(15, TimeUnit.SECONDS); + String result = future.get(15, TimeUnit.SECONDS); + return validOptions.convert(handler::toStringForce).contains(result) ? result : null; } catch (InterruptedException | ExecutionException | TimeoutException ignored) { } From 1c03a7fc5c2b5382810c5b5e4a5a0549360e517c Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 27 Sep 2021 15:33:45 +0200 Subject: [PATCH 2/3] 3 tries + either valid or null --- .../decree/virtual/VirtualDecreeCommand.java | 63 ++++++++++--------- 1 file changed, 33 insertions(+), 30 deletions(-) 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; From 03ecf8fe8214b4e98ff62812f1430472dcf608f1 Mon Sep 17 00:00:00 2001 From: CocoTheOwner Date: Mon, 27 Sep 2021 15:41:15 +0200 Subject: [PATCH 3/3] Better headers & warnings --- .../util/decree/virtual/VirtualDecreeCommand.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 0c23da9b8..df422c1b6 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 @@ -521,10 +521,12 @@ public class VirtualDecreeCommand { int tries = 3; KList options = validOptions.convert(handler::toStringForce); String result = null; - while (tries-- > 0 && (result == null || !options.contains(result))) { - sender.sendHeader("Pick a " + name + " (" + type + ")"); - sender.sendMessageRaw("This query will expire in 15 seconds."); + sender.sendHeader("Pick a " + name + " (" + type + ")"); + sender.sendMessageRaw("This query will expire in 15 seconds."); + + while (tries-- > 0 && (result == null || !options.contains(result))) { + sender.sendMessage("Please pick a valid option."); String password = UUID.randomUUID().toString().replaceAll("\\Q-\\E", ""); int m = 0; @@ -554,6 +556,9 @@ public class VirtualDecreeCommand { if (result != null && options.contains(result)) { return result; + } else { + sender.sendMessage(C.RED + "You did not enter a correct option within 3 tries."); + sender.sendMessage(C.RED + "Please double-check your arguments & option picking."); } return null;