CoreEngineWIKI
ESC
NavigierenEnter ÖffnenESC Schließen

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.yml 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 /co mit einer Permission aus, die standardmäßig jeder Spieler hat, deshalb sehen auch normale Spieler /co in der Vorschlagsliste. Solche Commands blendet man über always-hidden gezielt aus, oder man nutzt den Whitelist-Modus.
  • Die einzige feste Permission des Moduls ist commandvisibility.bypass (Standard: OP): Wer sie hat, ist von allen Einschränkungen des Moduls ausgenommen, sieht also alles und darf alles ausführen.

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:

ModusVerhalten
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.
duplicatesEine Namespace-Variante verschwindet nur, wenn die sichtbare einfache Form wirklich derselbe Command ist. Registrieren zwei Plugins denselben Namen, bleiben beide Formen sichtbar.
offNamespace-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.enabled: true 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 default gilt für JEDEN Spieler.
  • Jede weitere Gruppe gilt für Spieler mit der Permission commandvisibility.group.<name>. Beispiel: Die Gruppe vip greift bei allen Spielern mit commandvisibility.group.vip, vergeben z. B. über LuckPerms mit /lp group vip permission set commandvisibility.group.vip true.
  • Ein Spieler darf die ZUSAMMENGELEGTEN Listen aller seiner Gruppen sehen und benutzen.
  • Spieler mit commandvisibility.bypass (Standard: OP) sehen weiterhin alles.

Wichtig beim Befüllen der Listen:

  • Aliase zählen als eigene Namen: Wer /msg und /r erlauben will, listet beide.
  • Klickbare Chat-Buttons führen echte Commands aus. Erlaubt man /tpa, gehören tpaccept und tpdeny mit auf die Liste, sonst funktionieren die Annehmen/Ablehnen-Buttons nicht.
  • Ein gelisteter Command bleibt trotzdem permission-geprüft: fly auf der Liste zeigt /fly nur Spielern, die auch util.fly haben.
  • 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.command-blocked aus der messages.yml, 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.bypass 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.use false 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.group.vip, sieht er die VIP-Commands sofort.

Konfiguration #

YAML
# 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 #

YAML
# 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