Skip to content

feat(command): refuse with the catalog line, never Brigadier's text - #65

Merged
siracozmen01 merged 4 commits into
mainfrom
feat/command-gates
Nov 4, 2026
Merged

siracozmen01 merged 4 commits into
mainfrom
feat/command-gates

Conversation

@siracozmen01

@siracozmen01 siracozmen01 commented Nov 4, 2026 •

Copy link
Copy Markdown
Member

The customer report behind UXPLIMA/uxm-lib#87: /kits editor answered Incorrect argument for command when the player lacked uxmessentials.kit.edit.

  • Every requires(src -> src.getSender().hasPermission(X)) (356) and the helpers built on it (/worlds p(), the NPC and hologram capabilities, the either-node roots of /skin, /invrestore, /ranks, /poses) are now Gates. The /pwarp sponsor word is Gate.when(sponsor on) joined with its node.
  • GateBinding seals each published command right before the LocaleBinding, so a refusal is the catalog line in the player's language: command.no-permission, or the new command.unavailable (12 languages) for a feature that is off.
  • One GateVisibility listener trims each player's command list and completions; a command reload clears and refills it.

Checked on ess-folia (Folia) against a local uxmLib snapshot: a player typing /kits editor, /worlds create foo, /guard define test or /npc create bob read "you don't have permission."; the command tree sent to that player lacked every staff word and /npc, an operator's held all of them. ./gradlew build green against the snapshot.

Builds against uxm-gradle 0.7.0, which pins uxmLib 0.8.0.

@siracozmen01
siracozmen01 marked this pull request as ready for review November 4, 2026 16:42
@siracozmen01
siracozmen01 merged commit 40d13cb into main Nov 4, 2026
8 of 10 checks passed
@siracozmen01
siracozmen01 deleted the feat/command-gates branch November 4, 2026 16:54
siracozmen01 added a commit that referenced this pull request Nov 4, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.12.0](v0.11.0...v0.12.0)
(2026-11-04)


### ⚠ BREAKING CHANGES

* **core:** the `regions` module, `/regions` and its
`uxmessentials.regions.*` nodes are removed. Region placeholders keep
their `regions_*` names and are answered by guard; `regions_available`
now says whether guard is on.

### Features

* **command:** refuse with the catalog line, never Brigadier's text
([#65](#65))
([40d13cb](40d13cb))
* **config:** apply command-control edits on reload
([#56](#56))
([b180d89](b180d89))
* **config:** cover a whole plugin with one command-control entry
([#58](#58))
([4a15105](4a15105))
* **config:** read command-control entries down to their arguments
([#57](#57))
([a49ccea](a49ccea))
* **core:** add the guard module and remove regions
([#62](#62))
([98d7f41](98d7f41))
* **core:** hold the server's operators to an allowed list
([#59](#59))
([b90a389](b90a389))


### Bug Fixes

* **command:** let command words use the letters of every language
([#60](#60))
([57cb020](57cb020))
* **integration:** import a passthrough deny global region as protected
([#63](#63))
([dda7687](dda7687))
* **menu:** write the example menu title without colour
([#55](#55))
([18cb506](18cb506))
* **message:** describe /setspawn as the current world's spawn
([#61](#61))
([3eb993c](3eb993c))
* **message:** say how long a kit cooldown has left
([#64](#64))
([b745bf0](b745bf0))
* **message:** write the Latin-script languages in small capitals
([#53](#53))
([7b9219a](7b9219a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Sirac Ozmen <siracozmen@protonmail.com>
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