Re-add a /firm menu GUI (equivalent to the one that existed before) — possibly using the 1.21 Dialog API. Need to track down what functionality the old menu had.
Technical notes — No GUI/menu/Inventory code exists anywhere in the plugin today (commands are chat-only) — nothing was removed, it never existed here. Add a MenuCommands @Route("menu [firm]") opening a Paper inventory GUI (or Dialog) surfacing existing service actions: info/balance (FirmTransactionService.getAggregateBalance), staff hire/fire (FirmStaffService), accounts (FirmAccountService), deposit/withdraw/pay. Net-new, additive.
par-8-firm-menu from current origin/develop; upstream PRs inspected, no existing PAR-8 implementation./firm command, preserving current server permission, firm-role, Treasury access and notification behavior. Single-use session prevents callback replay; no inventory items are created.:business:test :business:testWithoutCarbon :business:testWithoutPlaceholderApi -PskipIT -Pci=true --offline). Full Business check and real Paper dialog callback journeys are running against disposable DB par8_menu and dedicated ports.develop, head par-8-firm-menu, commit 2cf906836a02788cbd0d5f81d59f745e4c1005fe. Metadata/body and uploaded flow diagram verified; worktree clean.bash gradlew :business:check -Pci=true --offline --no-daemon — 703 tests, static analysis, formatting, coverage 95.96% LINE / 90.00% BRANCH. Optional Carbon/PlaceholderAPI absence suites each passed four tests.bash gradlew :business:test :business:testWithoutCarbon :business:testWithoutPlaceholderApi -PskipIT -Pci=true --offline --no-daemon.bash gradlew spotlessApply spotlessCheck -Pci=true --offline --no-daemon.IT_WORK_DIR="$PWD/.context/par8run" IT_MC_PORT=28608 IT_RCON_PORT=28618 IT_REST_PORT=18608 IT_WEBHOOK_PORT=18618 IT_BYTEBIN_PORT=18628 IT_DB_PORT=34608 IT_DB_NAME=par8_menu IT_GRADLE_ARGS=--offline bash ops/integration/run.sh -- --tests '*business.FirmMenuTest' — two real Paper 1.21.11 callback journeys: chooser, account create, $1.25 deposit with exact ledger effects, hire/accept/fire, denied employee withdrawal, finance permission revoked after form opened. Disposable runtime shut down.918940daf2f6813c118ace955158a914df6feac9; target develop, clean worktree. PR body and uploaded Curator/Usher diagram read back and verified.business.list; cached lists recheck their list permission.bash gradlew :business:spotlessApply :business:check -Pci=true --offline --no-daemon: 707 tests, message-key audit, startup and disposable DB checks, coverage 95.80% LINE / 90.28% BRANCH. Carbon and PlaceholderAPI absence suites each passed four tests.bash gradlew spotlessApply spotlessCheck -Pci=true --offline --no-daemon.IT_WORK_DIR="$PWD/.context/par8verified" IT_MC_PORT=28608 IT_RCON_PORT=28618 IT_REST_PORT=18608 IT_WEBHOOK_PORT=18618 IT_BYTEBIN_PORT=18628 IT_DB_PORT=34608 IT_DB_NAME=par8_menu_hybrid IT_GRADLE_ARGS=--offline TMPDIR="$PWD/.context/par-8" bash ops/integration/run.sh -- --tests '*business.FirmMenuTest': three real Paper journeys, including empty/populated chooser; inventory/list → dialog → Back; account creation; exact $1.25 deposit and ledger assertions; hire/accept/fire; server finance permission revoked after opening form; financial firm-role demotion after opening form; pickup/shift/hotbar/offhand/drop/drag/creative-clone/stale-window item-escape attempts. Positive control transferred items from an ordinary chest.develop at 2026-10-22 10:34:05 UTC; merge commit 90d28dffdfff8b46100260e1d43c90c77f5686ab.Code context — No GUI/menu/Inventory code exists anywhere in the plugin (commands are chat-only) — nothing was removed, it never existed.
Approach: add a MenuCommands @Route("menu [firm]") opening a Paper inventory GUI (or the 1.21 Dialog API per the issue's hint) that surfaces existing service actions: info/balance (FirmTransactionService.getAggregateBalance), staff hire/fire (FirmStaffService), accounts (FirmAccountService), deposit/withdraw/pay. Net-new, additive — no scaffolding to extend.
I'll see if I can get this mapped out for you