/
//undo no longer gets hijacked by TCP after a chamber generation. The previous UndoListener cancelled //undo at HIGHEST priority and demanded confirm / cancel in chat — but the chat handler only cleared the pending state on cancel, leaving the per-player last entry forever. Once any chamber had been generated in the session, every subsequent //undo (even for unrelated WorldEdit edits made hours later, or by a moderator joining after the fact) was intercepted, the chat prompt fired, and the actual WorldEdit undo never ran. There was also no path to retry: cancelling re-armed the same intercept, and confirming only deleted the DB registration without rolling back the placed blocks. The whole interception model was wrong — chamber registration is a DB write, not a WorldEdit edit, so it doesn't belong on WE's undo stack to begin with. New behavior: TCP never cancels //undo. WorldEdit's stack is fully untouched, any depth, any time. A new passive PostUndoHintListener observes //undo (and /undo) at MONITOR priority without cancelling and, only if the player happens to be standing inside a registered chamber when they run undo, posts a one-line tip suggesting /tcp delete <name> to also clean up the registration. Generation now also emits a one-time chamber-created-rollback-tip immediately after chamber-created so users learn the two-step rollback (//undo for blocks → /tcp delete for registration) up front. UndoListener.kt and UndoTracker.kt deleted.messages.yml: removed obsolete undo-confirm, undo-confirm-pending, undo-deleted, undo-failed, undo-cancelled, undo-expired (the chat-prompt strings from the old confirmation flow). Added undo-cleanup-hint (passive post-//undo tip) and chamber-created-rollback-tip (post-generation tip). The paste-undo-hint key is unchanged — schematic paste still references //undo correctly because that path always was a normal WorldEdit edit.
Because Trial Chambers deserve better than being a "one and done" dungeon.