Command-Sichtbarkeit
Das permissions-Modul filtert die Befehlsliste, die der Client für die Tab-Vervollständigung nutzt: Spieler sehen nur noch die Commands, die sie mit ihren Permissions auch wirklich benutzen dürfen. Zusätzlich verschwinden Namespace-Varianten wie bukkit:tp, minecraft:gamemode oder coreengine:home aus der Vorschlagsliste. Wer noch strenger filtern will, schaltet den Whitelist-Modus ein: Dann sehen Spieler ausschließlich die Commands, die für ihre Gruppe freigegeben sind. Das Modul ist standardmäßig deaktiviert und wird in plugins/CoreEngine/modules/permissions. eingeschaltet.
Hinweis: Die Permission-Filterung ist optisch, sie betrifft Tab-Vervollständigung und Befehls-Einfärbung im Client. Ob ein Command ausgeführt werden darf, entscheidet weiterhin die Permission-Prüfung des jeweiligen Commands. Ausnahmen: Einträge aus always-hidden und im Whitelist-Modus alle nicht gelisteten Commands werden mit block-hidden-execution auch bei der Ausführung blockiert.
Funktionsweise #
- Beim Login und bei jeder Aktualisierung der Befehlsliste prüft das Modul für jeden Command die Permission des Spielers. Commands ohne Berechtigung erscheinen nicht in der Tab-Vervollständigung.
- Commands, die keine Permission deklarieren oder deren Permission jeder Spieler hat (das legt das jeweilige Plugin fest), bleiben bei der Permission-Filterung sichtbar. Beispiel: CoreProtect liefert
/comit einer Permission aus, die standardmäßig jeder Spieler hat, deshalb sehen auch normale Spieler/coin der Vorschlagsliste. Solche Commands blendet man überalways-hiddengezielt aus, oder man nutzt den Whitelist-Modus. - Die einzige feste Permission des Moduls ist
commandvisibility.(Standard: OP): Wer sie hat, ist von allen Einschränkungen des Moduls ausgenommen, sieht also alles und darf alles ausführen.bypass
Namespace-Varianten (bukkit:, minecraft:, plugin:) #
Denselben Command gibt es oft mehrfach: einmal in der einfachen Form (/tp) und einmal mit Namespace (minecraft:tp, bukkit:tp). hide-namespaced steuert, was davon sichtbar ist:
| Modus | Verhalten |
|---|---|
all (Standard) | Jede Namespace-Variante wird ausgeblendet, solange eine einfache Form desselben Namens sichtbar ist. Niemand sieht bukkit:plugins, solange /plugins existiert. Fehlt die einfache Form komplett, bleibt die Namespace-Form sichtbar, damit jeder Command mindestens einen erreichbaren Namen behält. |
duplicates | Eine Namespace-Variante verschwindet nur, wenn die sichtbare einfache Form wirklich derselbe Command ist. Registrieren zwei Plugins denselben Namen, bleiben beide Formen sichtbar. |
off | Namespace-Varianten werden nie ausgeblendet. |
Einzelne Namespace-Formen lassen sich über always-visible (z. B. coreprotect:core) gezielt sichtbar halten.
Whitelist-Modus: nur gelistete Commands anzeigen #
Mit whitelist. dreht sich die Logik um: Statt Unerwünschtes auszublenden, sehen Spieler NUR noch die Commands, die in den Listen ihrer Gruppen stehen. Alles andere verschwindet aus der Tab-Vervollständigung und wird mit block-hidden-execution auch bei der Ausführung blockiert. Das ist der einzige Weg, Commands anderer Plugins zu verstecken, die keine oder eine für alle freigegebene Permission deklarieren (wie /co von CoreProtect).
So funktionieren die Gruppen:
- Die Gruppe
defaultgilt für JEDEN Spieler. - Jede weitere Gruppe gilt für Spieler mit der Permission
commandvisibility.. Beispiel: Die Gruppegroup.<name> vipgreift bei allen Spielern mitcommandvisibility., vergeben z. B. über LuckPerms mitgroup. vip /lp group vip permission set commandvisibility..group. vip true - Ein Spieler darf die ZUSAMMENGELEGTEN Listen aller seiner Gruppen sehen und benutzen.
- Spieler mit
commandvisibility.(Standard: OP) sehen weiterhin alles.bypass
Wichtig beim Befüllen der Listen:
- Aliase zählen als eigene Namen: Wer
/msgund/rerlauben will, listet beide. - Klickbare Chat-Buttons führen echte Commands aus. Erlaubt man
/tpa, gehörentpacceptundtpdenymit auf die Liste, sonst funktionieren die Annehmen/Ablehnen-Buttons nicht. - Ein gelisteter Command bleibt trotzdem permission-geprüft:
flyauf der Liste zeigt/flynur Spielern, die auchutil.haben.fly - CoreEngines interne Bestätigungs-Commands (
coreconfirm,shopconfirm,shopcancel,shopedit) funktionieren immer, auch ohne Listung. Sie bleiben nur unsichtbar. Shop-Käufe und Bestätigungs-Dialoge laufen also ungestört weiter.
Versteckte Commands auch blockieren #
always-hidden-Einträge und im Whitelist-Modus alle nicht gelisteten Commands verschwinden nicht nur aus der Tab-Vervollständigung: Mit block-hidden-execution: true (Standard) wird auch die Ausführung blockiert. Der Spieler bekommt die Meldung permissions. aus der messages., die wie die normale Unbekannter-Befehl-Meldung aussieht, der Command verrät seine Existenz also nicht. Ein einfacher Eintrag wie plugins blockiert automatisch auch alle Namespace-Formen (bukkit:plugins). Spieler mit commandvisibility. sind ausgenommen, die Konsole ist nie betroffen.
Namenskonflikte mit anderen Plugins #
Registrieren zwei Plugins denselben Befehlsnamen, bekommt das zuerst geladene Plugin den einfachen Namen, das später geladene ist nur über seinen Namespace erreichbar. CoreEngine weicht solchen Konflikten aus: Das Web-Interface heißt bewusst /cweb, weil CoreProtect den Namen /core belegt. Trifft ein anderes Plugin doch einen CoreEngine-Befehlsnamen, bleibt der CoreEngine-Command immer über /coreengine:<name> erreichbar.
LuckPerms-Live-Aktualisierung #
Ändert sich eine Permission in LuckPerms, egal ob direkt am Spieler oder an einer Gruppe, aktualisiert CoreEngine die Befehlsliste aller betroffenen Spieler sofort. Verliert die Gruppe default z. B. per /lp group default permission set warps. das Warp-Recht, verschwindet /warp bei allen Mitgliedern augenblicklich aus der Tab-Vervollständigung, ganz ohne Relog. Wird das Recht wieder vergeben, taucht der Command genauso schnell wieder auf. Das gilt auch für die Whitelist-Gruppen: Bekommt ein Spieler commandvisibility., sieht er die VIP-Commands sofort.
Konfiguration #
# Hauptschalter des Moduls, standardmäßig deaktiviert
enabled: false
permissions:
# Umgang mit Namespace-Varianten: all, duplicates oder off (siehe oben)
hide-namespaced: all
# Blockiert die Ausführung versteckter Commands (always-hidden und im
# Whitelist-Modus alles Ungelistete), nicht nur die Anzeige. Bypass über
# die Permission commandvisibility.bypass.
block-hidden-execution: true
# Commands, die immer ausgeblendet (und blockiert) werden. Namen ohne
# Schrägstrich, Einträge wie bukkit:plugins sind ebenfalls erlaubt.
always-hidden: []
# Commands, die immer sichtbar bleiben, auch wenn Permission,
# Namespace-Modus oder Whitelist sie ausblenden würden.
always-visible: []
# Whitelist-Modus: Spieler sehen nur die Commands ihrer Gruppen.
whitelist:
enabled: false
groups: {}Komplette Beispiel-Config #
# Schaltet das Modul für permission-basierte Command-Sichtbarkeit ein oder aus.
enabled: true
permissions:
# Keine bukkit:/minecraft:-Varianten in der Tab-Vervollständigung.
hide-namespaced: all
# Versteckte Commands sind auch nicht ausführbar.
block-hidden-execution: true
# Diese Commands deklarieren keine Permission und werden hier von Hand
# ausgeblendet und blockiert (ohne Whitelist-Modus).
always-hidden:
- plugins
- icanhasbukkit
# /spawn bleibt immer sichtbar.
always-visible:
- spawn
# Nur gelistete Commands anzeigen: jeder sieht die default-Liste,
# Spieler mit commandvisibility.group.vip zusätzlich die vip-Liste.
whitelist:
enabled: true
groups:
default:
- help
- spawn
- home
- sethome
- warp
- warps
- tpa
- tpaccept
- tpdeny
- msg
- r
- team
- jobs
- cweb
vip:
- fly
- hat