@@ -237,23 +237,22 @@ public PromptParser getParser() {
237237 public void cancel (CommandSender sender , int queueHash , CancelReason reason ) {
238238 if (!promptRegistry .containsKey (sender ))
239239 return ;
240+ plugin .getPluginLogger ().debug ("Canceling prompt queue for %s. (Reason: %s)" , sender .getName (), reason .name ());
240241 plugin .getPluginLogger ().debug ("queueHash: " + queueHash );
241242 plugin .getPluginLogger ().debug ("registryQueueHash: " + promptRegistry .get (sender ).hashCode ());
243+
242244 if (queueHash != -1 && queueHash != promptRegistry .get (sender ).hashCode ())
243245 return ;
246+
244247 var queue = promptRegistry .get (sender );
245- if (queue .containsPCM ()) {
246- queue .getPostCommandMetas ().forEach (pcm -> {
247- if (!pcm .isOnCancel ())
248- return ;
249-
250- if (pcm .delayTicks () > 0 )
251- plugin .getServer ().getScheduler ().runTaskLater (plugin , () -> queue .execPCM (pcm , (Player ) sender ),
252- pcm .delayTicks ());
253- else
254- 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 ());
255253 });
256254 }
255+
257256 promptRegistry .unregister (sender );
258257 if (plugin .getConfiguration ().showCancelled ())
259258 plugin .getMessenger ().sendMessage (sender , plugin .getI18N ().getProperty ("PromptCancel" ));
0 commit comments