Skip to content

Release 3.21.0#3034

Merged
tastybento merged 8 commits into
masterfrom
develop
Jul 22, 2026
Merged

Release 3.21.0#3034
tastybento merged 8 commits into
masterfrom
develop

Conversation

@tastybento

Copy link
Copy Markdown
Member

Release 3.21.0

Changes since 3.20.0

  • Dialogs API — new api/dialogs API using Minecraft 1.21.6+ native dialogs; used for command confirmations, the /island go picker, team invites, and first-join (PR #3033, #3021)
  • Forgiving name matching for /island go — home name matching is now case/format tolerant (PR #3031, #3024)
  • 🔡 Removed duplicated placeholder panel sections in the uk.yml locale

🤖 Generated with Claude Code

https://claude.ai/code/session_01Mhg9Uut6r2C9VqkGSLEwDa

tastybento and others added 8 commits July 11, 2026 15:59
The go/home command previously required an exact, case-sensitive match of
the typed destination against island and home names, and dumped the full
name list on any miss. New players who type "myisland", "hom" or add a
stray space got no teleport.

Add IslandGoCommand.resolveName: exact match still wins (unchanged
behaviour), then a case/colour/whitespace-insensitive exact match, then a
unique case-insensitive prefix. Ambiguous inputs fall through to the
existing unknown-home list rather than guessing. The resolved canonical
name is used for the home teleport lookup so named-home teleports still
target the right home.

This is the cheap first slice of the "missing/unmatched argument opens a
picker" rule; the openPicker hook on CompositeCommand follows separately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7UmQDCP5MGHEZqFiw44zH
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7UmQDCP5MGHEZqFiw44zH
…-matching

Forgiving name matching for /island go (#3024)
Introduces a public api/dialogs/ package that wraps Paper's modal dialog
system (io.papermc.paper.dialog.Dialog, present on Minecraft 26+) alongside
the existing Panels API, so core and addons can present real modal choices
without the player typing commands.

- DialogButton: label + optional tooltip + an onClick Consumer<User> run on
  the main thread when clicked.
- DialogBuilder: fluent builder (title/body localized via User, escapable,
  pause) supporting confirmation(yes, no) and multi-action button() menus;
  build() -> BBDialog with show(User). Everything is carried as Adventure
  Components end-to-end so click/interaction data survives.
- Dialogs.isSupported(): guard for graceful degradation on older servers.

First consumer: ConfirmableCommand.askConfirmation now shows a
[Confirm]/[Cancel] dialog instead of asking the player to re-type the
command. Enabled by default via the new island.confirmation.use-dialog
setting (opt out to keep the type-again prompt). If the dialog cannot be
built or shown for any reason, it falls back to the classic prompt so a
confirmation is never silently lost.

New en-US locale keys (commands.confirmation.title, .dialog-body,
.buttons.confirm, .buttons.cancel) translated into all 22 other locales.

Note: DialogBuilder.build() of a full dialog needs the server's dialog
registry provider, which MockBukkit does not supply (like NMS), so those
paths run on a live server; unit tests cover support detection, button
holders, pre-factory validation and the confirmation fallback.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7UmQDCP5MGHEZqFiw44zH
Adds the remaining three Dialogs API consumers and consolidates every dialog
toggle under one island.dialogs.* config section (the confirmation toggle
moves from island.confirmation.use-dialog to island.dialogs.confirmations;
still pre-release, so no compatibility break).

- go picker: a bare /island go with more than one island/home now opens a
  button-per-destination dialog; each button teleports there. Gated by
  island.dialogs.go-picker (default true).
- team invites: receiving an invite auto-opens an [Accept]/[Decline] dialog
  that runs the accept/reject command, instead of relying on the player to
  type it. Gated by island.dialogs.team-invites (default true).
- first join: brand new players can be shown a non-dismissable "choose your
  game" dialog when several game modes are installed; each button runs that
  game mode's command. Gated by island.dialogs.game-mode-selection
  (default FALSE - it is intrusive and non-dismissable).

Every consumer degrades gracefully: if the dialog cannot be built/shown it
logs and falls back to the previous behaviour (teleport / chat invite /
per-world first-login), so nothing is lost on older servers or under errors.

New en-US keys (commands.island.go.picker.title, the
commands.island.team.invite.dialog.* group, and
general.dialogs.game-mode-selection.title) translated into all 22 other
locales. Fallback/gating paths covered by tests in IslandGoCommandTest,
IslandTeamInviteCommandTest and JoinLeaveListenerTest.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G7UmQDCP5MGHEZqFiw44zH
Add Dialogs API and wire it into confirmations, go picker, team invites & first-join (#3021)
The placeholder and placeholder-list panel sections were pasted twice,
causing 'duplicate keys found' YamlConstructor warnings at startup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UpU19GEJ2oQFjse9MZXRgW
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit cacdbb5 into master Jul 22, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant