Repository navigation
Conversation
…screen windows Held-slot changes become signed steps the shortest way around the hotbar, main-hand interactions with the click entity become right clicks, and promptText opens an anvil over the canvas whose rename field is reported, reopening a fresh anvil each time the 50-character field fills.
…s click resyncs The prompt anvil is the window's own UI, so it no longer hands the client the real world age and hotbar. Its paper takes the blank item model and carries no enchantments, so the client computes no result or cost label, and the repair cost is sent as 0. Click resyncs ride a ping like opens do, and text typed before one reached the client is kept. Taking the result resyncs the player's experience. Generated full-screen classes bind scroll and right click to open onScroll and onRightClick hooks.
…not change the input slot
…guised anvil promptText(title, initial, onDone) now shows a dialog with one text field and Confirm and Cancel buttons. Each prompt has its own custom action ids, so stale or foreign responses are ignored, and onDone runs once: Confirm delivers the text, and Cancel, a replacing prompt, or the window ending deliver null. Escape does not dismiss the dialog. Canvas input is ignored while a prompt is open. Removes the anvil prompt: blank paper seed, repair cost and XP resyncs, the 50-character reopen, rename echo gating, and the anvil branch of container handoff.
… the state it reports The host alone holds the pending prompt and the session derives whether canvas input counts from it. Every ending (answer, replacement, container takeover, window end) clears the prompt before calling its callback. A container opening over the dialog cancels the prompt on the player's next tick, and a window ending restores the player first, then cancels the prompt, then calls onClose, even if the callback throws.
oglassdev
marked this pull request as ready for review
October 16, 2026 00:08
oglassdev
added this pull request to stack #130
October 16, 2026 00:26
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #121
Part of #115
Adds scroll, right click, and a native dialog text prompt to full-screen windows. The other open sub-issues stay separate: this PR changes no Rust, codegen, or render/composition code.
API
FullscreenScope.scroll { steps -> }: each held-slot change becomes a signed step count,floorMod(slot - last + 4, 9) - 4, so it goes the shortest way around the hotbar. Positive means the selection moved right, which is what scrolling down does by default. The KDoc covers the limits: the client sends at most one change per tick, so notches scrolled within one tick arrive together (more than 4 read as a scroll the other way), and number keys look the same as scrolling.FullscreenScope.rightClick { click -> }: a right click at the cursor, as aFullscreenClick.FullscreenView.promptText(title, initial, onDone): opens a dialog over the canvas with one text field and Confirm and Cancel buttons.onDonegets the text on Confirm andnullon Cancel. To prompt on a click, call it from the control's click handler (the KDoc has the pattern); there is no new authoring element.FullscreenListener.onRightClickandonScroll, andOpenFullscreen.promptText.Behaviour
HeldItemChangePackets, so each step is measured from the right slot. The held slot is still restored on close.Interaction.interactreturnsCONSUMEon the client andstartUseItemreturns after the first hand. So one press sends exactly one main-handServerboundInteractPacket. Off-hand interactions are dropped as a safeguard. Like left clicks, right clicks are reported at the end of the tick, after that tick's rotation. Holding the use key repeats every 4 ticks (vanillarightClickDelay); this is documented.Dialog.MultiActionwith a text input (up to 256 characters;initialis cut to fit) and two buttons in the dialog body, sent in aShowDialogPacket. Each prompt gets its own custom action ids (window:prompt/<n>/confirmand/cancel), so a response to an earlier or foreign dialog is ignored. The client closes the dialog when a button is pressed (DialogAfterAction.CLOSE) and the canvas is back.onDoneruns exactly once: Confirm delivers the text; Cancel, a new prompt replacing the old one, and the window ending (disconnect,close(), sneaking) delivernull. The window ending also sends aClearDialogPacket. Canvas input (look, clicks, scroll) is ignored while a prompt is open, so the cursor stays where it was.canCloseWithEscapeis false, so a prompt always ends through a button. The 26.2 client runs the dialog's cancel action on Escape (DialogScreen.onCloserunsDialog.onCancel(): the exit action of a multi-action dialog, the No button of a confirmation dialog), so Escape could be reported. But both of those sit in the dialog's footer, inside the bottom strip the pack's shader clips while the HUD is hidden, so a footer button would draw without its background. The buttons are in the body instead, which the client centres vertically on the screen.OpenWindowPacketarrives and the world age and blank hotbar are left alone; the HUD stays hidden behind it.Checks
just gradle :runtime:test --tests '*Fullscreen*': pass (FullscreenSessionTest has 11 tests, 2 new)just gradle :minestom:test --tests '*Fullscreen*': pass (MinestomFullscreenTest has 14 tests, 6 new)just fmt-check-jvm: passNot yet checked in a real client