legacy client fallback
legacy client fallback
Minecraft 1.21+ introduced native Paper Dialog screens (io.papermc.paper.dialog.*). Players connecting on older Java versions (1.8 - 1.21.4) or Bedrock Edition via Geyser/Floodgate cannot receive native dialog packets.
DialogMaster solves this by automatically detecting player client versions and synthesizing native container representations:
Bedrock Edition Players
Native Bedrock forms (SimpleForm, ModalForm, CustomForm) via Geyser Cumulus & Floodgate.
Legacy Java Clients (1.8 - 1.21.4)
Dynamic Chest Inventory GUIs with automatic row and glass border layouts, virtual Anvil/Chat input prompts, and pagination.
Multi-Provider Protocol Detection
DialogMaster automatically inspects player client protocol versions using any of the following installed plugins:
- ViaVersion
- ProtocolLib
- PacketEvents
- Floodgate
- Geyser-Spigot
If no protocol plugin is present, Java players on modern servers are assumed to be modern (1.21+).
Configuration (config.yml)
# ============================================================
# LEGACY CLIENT & BEDROCK FALLBACK
# ============================================================
legacy-clients:
enabled: true
min-protocol-version: 769 # Minecraft 1.21.4+
fallback-bedrock: true
input-mode: "ANVIL" # ANVIL or CHAT for interactive inputs
default-fallback: ""
min-protocol-version: The minimum client protocol required for native Dialogs (Default:769for Minecraft 1.21.4+).fallback-bedrock: Iftrue, Bedrock players receive native Bedrock forms via Geyser/Floodgate.input-mode: ChooseANVIL(virtual Anvil rename prompt) orCHAT(chat prompt) when legacy players interact with text/number inputs.
Chest GUI Features for Legacy Clients
- Automatic Layout & Glass Borders: If custom slots are omitted, DialogMaster automatically formats rows, centered action buttons, and glass borders (
GRAY_STAINED_GLASS_PANE). - Interactive Inputs in Chests: Text and number input items open virtual Anvil GUIs with default text pre-filled. Boolean inputs toggle instantly on click.
- Interactive Real-Item Slots (
type: "item_slot"): Define slots where players can physically insert items for enchanting, blacksmithing, or recycling. - Pagination & Search: Multi-page catalog menus include previous/next buttons and in-menu search filtering.
Bedrock Edition Cross-Platform Routing
DialogMaster provides full control over how Bedrock players experience your menus.
Global Configuration (config.yml)
legacy-clients:
enabled: true
min-protocol-version: 769
fallback-bedrock: true
bedrock-mode: "AUTO" # AUTO, FORM, or CHEST_GUI
Per-Menu Bedrock Mode (menus/*.yml)
You can override the Bedrock rendering mode on a per-menu basis:
title: <gold>Server Shop
type: multiAction
command: /shop
# Options:
# - AUTO: Uses Bedrock Forms by default if Floodgate/Geyser is present, else Chest GUI
# - FORM: Always forces native Bedrock Forms (SimpleForm, ModalForm, CustomForm)
# - CHEST_GUI: Always forces Chest GUI (inventory container) for Bedrock players
bedrock-mode: CHEST_GUI
Auto-Layout Synthesis: If bedrock-mode: CHEST_GUI is enabled on a menu without an explicit chest-gui: block, DialogMaster dynamically synthesizes the Chest GUI layout from the dialog buttons on-the-fly!
Native Bedrock Forms (Cumulus / Floodgate)
When bedrock-mode resolves to FORM or AUTO, Bedrock players receive native Bedrock forms:
- SimpleForm: Action grids with buttons and optional icons (
textures/...,<item:...>, or URLs). - ModalForm: Confirmation prompts with Confirm / Cancel options.
- CustomForm: Interactive forms with text inputs, sliders, toggles, and dropdowns.
All Bedrock form callbacks are executed safely on the player's Folia region thread. Icon tags like <item:...>, <sprite:...>, and <head:...> are automatically cleaned and converted into clean button text and texture paths.
Security & Client Isolation
- In-Game Editor Protection: The visual in-game menu editor (
/ydm editor) is strictly restricted to modern Java clients (1.21+) with native Paper Dialog support. Bedrock players and legacy clients attempting to run/ydm editorare cleanly blocked with an informative message, preventing Geyser sprite translation warnings and packet errors. - Strict Head Name Validation: Player head references (
<head:...>) are strictly validated against standard 1-16 character Minecraft usernames (^[a-zA-Z0-9_]{1,16}$). Missing leaderboard placeholders or error messages containing spaces (e.g."Board does not exist") are automatically stripped, preventing Mojang DFU codec serialization crashes.
Admins with dialogmaster.admin can inspect live protocol and platform routing:
/ydm debug Steve
Output:
- Client Protocol:
768 (Minecraft 1.21.2) - Bedrock Player:
false - Dialog Compatible:
false (Renders Chest GUI) - Active Hook Providers:
ViaVersion: YES, ProtocolLib: YES, Floodgate: NO