Skip to main content
Renderers read current page snapshots and registered actions. The server continues to control page identity, quantity ranges, quotes and transaction results.

Pages, actions and lifecycle

UiPage.key() identifies the logical page; UiPage.template() selects theme configuration. Vanilla menus uses page IDs, while IA pages uses template IDs. The complete 35 pages and their main actions follow; “Same” means the template equals the page ID.

Market and publishing

Wizard templates follow the step: wizard-type, wizard-item, wizard-terms (buy order), wizard-sale-terms, wizard-auction-terms, then wizard-confirm.

Input and conditions

Assets and administration

Home and profile slots

Default compact home source slots are 0 player head, 4 help, 8 claims, 20/22/24 trading categories, 45 wallet and 53 my orders. profile uses 20 interface preferences, 22 review queue, 24 history, 31 administration and 49 back; the administration entrance depends on permissions. The review list reuses history. Select home content with gui.home-layout: auto|compact|legacy; an existing menus.home preserves the legacy home under auto. See vanilla GUI customization for migration. Read current snapshots and actions instead of assuming all home layouts share one slot set.

Quantities, amounts and results

Quantity maxima use actual wallet funds, available inventory items and currency limits; auctions use only the main-hand stack. Transfers use real balances and any known backend receive capacity. Changed quotes require another choice, and final submission rechecks limits; a theme must not raise them independently. Receipts provide a separate “View / copy operation ID” action that sends the complete ID and copy control in chat. Summaries stay concise; inspect and the read-only API retain IDs.

Transaction display

Sales support partial purchases at a per-item unit price. Their per-order minimum defaults to 1 and can be set from 1 to the listed quantity; a remainder below the minimum must be purchased together. Buy orders use unit prices for partial fulfillment, and auction starting prices apply to the whole lot. Render host amounts, input ranges and item descriptions. Remaining, total and traded quantities are separate, and real item properties remain intact. Display timestamps and countdowns do not replace database deadline checks. Claims use actual item stack limits, leaving assets in claims when inventory space is insufficient.

Actions and input

The current page.actions() slot-to-opaque-token map is the action list. Entries without a token are informational. Never fabricate action strings or reuse a previous page’s tokens. Every open/update replaces identity, tokens and callbacks. Input returns through UiCallbacks.input(raw) and closure through closed(). Returning false from prompt() retains the host’s validated chat input and drafts.

Provider lifecycle

Registration can wait for database initialization. If lookup is null, listen for ServiceRegisterEvent; discard old registrations and views when replaced. Unregister on owner disable; the host handles safe fallback. Never manipulate player inventories from Folia’s global thread. The example does not claim Folia certification.

Java renderer development

Provider registration, page updates, display refresh and resource state checks.