Skip to content

Permissions

Citizens are part of Core. They use the ks.citizen.* scheme plus per-NPC interaction permissions that operators choose freely.

PermissionDefaultDescription
ks.citizenParent node for the /kscitizen command; required to run any subcommand
ks.citizen.admin❌ staff onlyRequired for every admin subcommand (create, remove, tp, respawn, marker, viewer, waypoints, reload, info, list)

/kscitizen requires ks.citizen at the command-collection level, and each admin subcommand additionally requires ks.citizen.admin. In practice just grant ks.citizen.admin to staff — the parent node is auto-satisfied when the subcommand node resolves.

CommandPermission
/kscitizen list [group]ks.citizen.admin
/kscitizen create <id>ks.citizen.admin
/kscitizen remove <id>ks.citizen.admin
/kscitizen tp <id>ks.citizen.admin
/kscitizen respawn <id>ks.citizen.admin
/kscitizen respawnallks.citizen.admin
/kscitizen reloadks.citizen.admin
/kscitizen info <id>ks.citizen.admin
/kscitizen marker <id> [type]ks.citizen.admin
/kscitizen viewerks.citizen.admin
/kscitizen wprecord <id>ks.citizen.admin
/kscitizen wpadd [seconds]ks.citizen.admin
/kscitizen wpundoks.citizen.admin
/kscitizen wpdoneks.citizen.admin

Alias: /npc. Permission checks are the same regardless of which alias is used. Console commands bypass every check.

When the server runs in read-only showcase mode, write operations are blocked even for players with ks.citizen.admin. Blocked in showcase mode:

  • /kscitizen create
  • /kscitizen remove
  • /kscitizen respawnall
  • /kscitizen reload
  • /kscitizen wprecord, wpadd, wpundo, wpdone

Read-only commands (list, tp, info, marker, viewer) remain available in showcase mode.

Per-Citizen Interaction Permissions (config-driven)

Section titled “Per-Citizen Interaction Permissions (config-driven)”

Individual citizens can require a custom permission string for player interaction. The mod just passes whatever string you set to hasPermission() — no ks. prefix required.

{
"id": "vip_merchant",
"permission": "citizen.interact.vip",
"noPermissionMessage": "Only VIP members can talk to this merchant."
}
FieldDescription
permissionString checked on interaction. Blocked players see noPermissionMessage. Leave null for open NPCs.
noPermissionMessageMessage shown to players who lack the required permission.

The prefix citizen.interact.* is convention — you can use vip.npc.merchant, rank.premium, anything.

Terminal window
# Staff admin
/lp user Steve permission set ks.citizen.admin true
# VIP-only NPC interaction
/lp group vip permission set citizen.interact.vip true

The old citizen.admin node is no longer checked by the command gate. Grant ks.citizen.admin instead. Per-NPC interaction strings (citizen.interact.* or any custom value) remain user-authored and are not affected by this migration.

Do not grant ks.citizen.admin to regular players. It provides full control over every NPC on the server — create, modify, delete, teleport to.