@@ -67,7 +67,7 @@ public class PromptManager extends HashMap<String, Class<? extends Prompt>> {
6767
6868 private static final HashMap <Class <? extends Prompt >, Version > supportTable ;
6969
70- private static final Version LATEST = Version .parse ("1.21.7 " );
70+ private static final Version LATEST = Version .parse ("1.21.8 " );
7171 // Arbitrary 10 version, that means this should work until minecraft v10 lol "any".
7272 private static final Version ANY = Version .parse ("10" );
7373
@@ -109,14 +109,15 @@ public Class<? extends Prompt> put(String key, Class<? extends Prompt> value) {
109109
110110 var ret = super .put (key , value );
111111 plugin .getPluginLogger ().info ("Registered " +
112- new Ansi ().fgRgb (153 , 214 , 90 ).a (value .getSimpleName ()).reset ());
112+ new Ansi ().fgRgb (166 , 218 , 149 ).a (value .getSimpleName ()).reset ());
113113 return ret ;
114114 }
115115
116116 public void parse (PromptContext context ) {
117117 var queueHash = promptParser .parsePrompts (context );
118118 var timeout = plugin .getConfiguration ().promptTimeout ();
119- scheduler .runTaskLater (plugin , () -> cancel (context .getPromptedPlayer (), queueHash ), 20L * timeout );
119+ scheduler .runTaskLater (plugin , () ->
120+ cancel (context .getPromptedPlayer (), queueHash , CancelReason .Timeout ), 20L * timeout );
120121 }
121122
122123 public void sendPrompt (CommandSender sender ) {
@@ -233,34 +234,33 @@ public PromptParser getParser() {
233234 return promptParser ;
234235 }
235236
236- public void cancel (CommandSender sender , int queueHash ) {
237+ public void cancel (CommandSender sender , int queueHash , CancelReason reason ) {
237238 if (!promptRegistry .containsKey (sender ))
238239 return ;
240+ plugin .getPluginLogger ().debug ("Canceling prompt queue for %s. (Reason: %s)" , sender .getName (), reason .name ());
239241 plugin .getPluginLogger ().debug ("queueHash: " + queueHash );
240242 plugin .getPluginLogger ().debug ("registryQueueHash: " + promptRegistry .get (sender ).hashCode ());
243+
241244 if (queueHash != -1 && queueHash != promptRegistry .get (sender ).hashCode ())
242245 return ;
246+
243247 var queue = promptRegistry .get (sender );
244- if (queue .containsPCM ()) {
245- queue .getPostCommandMetas ().forEach (pcm -> {
246- if (!pcm .isOnCancel ())
247- return ;
248-
249- if (pcm .delayTicks () > 0 )
250- plugin .getServer ().getScheduler ().runTaskLater (plugin , () -> queue .execPCM (pcm , (Player ) sender ),
251- pcm .delayTicks ());
252- else
253- queue .execPCM (pcm , (Player ) sender );
248+ if (reason != CancelReason .Timeout && queue .containsPCM ()) {
249+ var filtered = queue .getPostCommandMetas ().stream ().filter (PromptQueue .PostCommandMeta ::isOnCancel );
250+ filtered .forEach (pcm -> {
251+ plugin .getPluginLogger ().debug ("Dispatching PCM: %s" , pcm );
252+ Bukkit .getScheduler ().runTaskLater (plugin , () -> queue .execPCM (pcm , (Player ) sender ), pcm .delayTicks ());
254253 });
255254 }
255+
256256 promptRegistry .unregister (sender );
257257 if (plugin .getConfiguration ().showCancelled ())
258258 plugin .getMessenger ().sendMessage (sender , plugin .getI18N ().getProperty ("PromptCancel" ));
259259 plugin .getPluginLogger ().debug ("Command completion called for: %s" , sender .getName ());
260260 }
261261
262- public void cancel (CommandSender sender ) {
263- cancel (sender , -1 );
262+ public void cancel (CommandSender sender , CancelReason reason ) {
263+ cancel (sender , -1 , reason );
264264 }
265265
266266 public Pattern getArgumentPattern (String ... additionalKeys ) {
@@ -283,4 +283,12 @@ public void clearPromptRegistry() {
283283 public CommandPrompter getPlugin () {
284284 return plugin ;
285285 }
286+
287+ public static enum CancelReason {
288+ GUIExit ,
289+ GUIErr ,
290+ Manual ,
291+ Timeout ,
292+ BlankInput
293+ }
286294}
0 commit comments