Installation
On this page(5)
- Sign in and download the latest JAR from SnDevelopment.
- Place the
.jarfile into your server'splugins/folder. - Start the server once. If it does not exist yet, SnStaff creates the shared
plugins/.Sn-License/license.yml. - Paste your Sn bundle license key into that file, replacing the placeholder line.
- Restart the server. SnStaff validates the key at startup and then enables.
Requires SnLib installed (depend: [SnLib]), version 1.40.2 or later. SnStaff refuses to enable against an older engine, so update SnLib.jar at the same time. It also needs Java 21 and Paper 1.20.4 or newer.
SnStaff uses the shared bundle license, so the key lives in plugins/.Sn-License/license.yml rather than in the plugin's own folder, and one bundle key unlocks every Sn bundle plugin on the server. SnStaff has no license file of its own, and it refuses to enable without a valid key.
Dependencies
| Plugin | Required |
|---|---|
| SnLib | Yes |
| LuckPerms | No (optional, enables staff rank sync and protection) |
| PlaceholderAPI | No (optional, enables placeholders) |
| EssentialsX | No (not used by SnStaff; it may run alongside and only decides the load order) |
| HalosPlayerSpoofer | No (optional, excludes fake players from random teleport) |
When an optional plugin is absent, the matching feature degrades gracefully. Placeholders stay raw, the ranks module only warns, and the bot filter relies on its other layers.
Network setup
SnStaff is backend-only. Cross-server features run over a shared MySQL database that every backend polls: staff and admin chat, freeze spy, connection notices, rank sync, PIN sessions and statistics.
- Set
database.type: mysql(host, port, database, username, password) on every backend, pointing at the same database. - Give each backend its own
network.server-name(the label shown for{server}). - Keep
network.server-iddistinct on every backend. Never copydata/server-id.ymlor a whole server folder to another backend.
With SQLite (the default) every feature works on one server only. There is no network bus, no server switch detection and no shared PIN session.
Changes to network.server-id and to database.* need a restart.
Upgrading to 1.2.2
Replace the jar and restart. vanish.visibility-resync is gone: a leftover key in your config.yml is ignored and can be deleted.
On UniverseSpigot set disableBukkitVanishAPI: false in universespigot.yml. With true the visibility API every vanish plugin uses is switched off, and SnStaff warns about it at startup.
Upgrading to 1.2.1
Replace the jar and restart.
The PIN keypad ships new digit heads. A server that already has guis/pin-keypad.yml keeps the old ones: delete the file to get the new heads (it is regenerated on the next start), or copy the new material values in by hand.
Upgrading from 1.1.x
Replace the jar and restart. SnLib only adds missing keys, so your existing files keep their old values. Edit these by hand to get the new defaults.
vanish.aliases: change[v]to[]./vthen stays with EssentialsX when it is installed.freeze.allowed-commands: change it to[r, reply, m, msg].staff-chat.style.allow-minimessageandadmin-chat.style.allow-minimessage: change both totrue.
Leftover keys are ignored and harmless: freeze.unfreeze-aliases, the whole integrations: block and webhooks.events.essentials. You can delete them.
The PIN keypad now lives in guis/pin-keypad.yml. You can delete the old guis/pin.yml.
The new keypad has the digits 1 to 9 only. A PIN that contains a 0 can no longer be typed. Reset it with /staff admin pin reset <player>, and the staff member sets a new one.
/unfreeze no longer exists. Use /freeze <player> again to unfreeze. A staff mode backup left by an older version is still restored on the next join.