Running a server
Permissions
RP Engine uses ordinary Bukkit permissions, so LuckPerms or any other permissions plugin works. Out of the box, ops can do everything and ordinary players can play emotes, use dialogs and type icons in chat.
Every subcommand has its own node, always rpengine.<subcommand>:
rpengine.give, rpengine.purge, rpengine.sync and so on. The full list is
on Commands, beside each command.
rpengine.admin grants every command node, including the .others nodes
below. It is a convenience: nothing checks it directly.
/rp object has a node per verb (rpengine.object.spawn,
rpengine.object.play and so on), all granted by rpengine.object, so you can
let players run an object's sequences without letting them place new ones. See
3D objects.
/rp spawner is the same: rpengine.spawner.create, .set, .remove,
.list and .info, all granted by rpengine.spawner, so a builder can look at
the spawners without being able to
move them.
Everything defaults to op, except these, which every player has:
| Node | What it allows |
|---|---|
rpengine.emote | Playing an emote with /emote |
rpengine.emotes | Listing emotes |
rpengine.chat.icons | Typing :wave: in chat to draw an icon, when chat icons are on |
rpengine.var | Changing your own dialog settings: what a click on a dialog's switch or slider runs |
rpengine.page | Turning a dialog to another page, or closing it: what a click on a paged dialog runs |
rpengine.slot | Moving an item in a dialog's item slots: what a click on such a slot runs |
rpengine.click | Pressing a dialog's console button: what a console: button runs. It runs only a button on the dialog the player has open |
rpengine.run | Pressing a dialog's button of several commands: what a command: list runs, each as the player. It runs only a button on the dialog the player has open |
rpengine.quick | Opening a dialog on the Quick Actions key: what a quick action's launcher runs |
var, page and slot can do no more than the click that runs them: a
setting must be one a dialog offers, a page one the dialog links to, a slot
one the dialog has that exact click for. Taking them away breaks those clicks.
Nodes that are not a command#
| Node | Default | What it allows |
|---|---|---|
rpengine.emote.cast | op | Pulling other players into an emote. They are still asked first |
rpengine.emote.force | op | Pulling other players in without asking them |
rpengine.cast.at | op | Playing a VFX at a place, anywhere on the server: /rp cast <name> at <x> <y> <z>. Needs rpengine.cast too |
rpengine.chat.icons | everyone | Icons in chat, above |
rpengine.chat.effects.all | op | Typing every Text Effect in chat, as <fx:name>text</fx> |
rpengine.chat.effects.<name> | op | Typing one Text Effect in chat: rpengine.chat.effects.fire. A / in the name is a . |
rpengine.sync.console | op | Trusting a pack you push from Studio with the server. Without it, console commands are left out of your push (dialog buttons set to run as the console, and mob skills that use command), a dialog's own /command and Quick Actions key are not registered, its mobs do not spawn on their own, and mob skills are limited to Studio's own list. Everything else arrives. Kept apart from rpengine.sync so you can let everybody live-test safely |
rpengine.update | op | Being told on join when a newer RP Engine is out |
rpengine.shaders.notify | op | Being told, on join and when it happens, that another plugin's pack replaces a core shader RP Engine's packs also replace |
rpengine.tag.<namespace>.<id> | nobody | Wearing that rank tag in %rpengine_tag%. One per tag |
rpengine.emote.force is not a child of rpengine.emote.cast: being allowed
to ask is not being allowed to skip asking. The node emote.cast checks can
be changed with emotes.cast-permission in config.yml.
rpengine.chat.icons, the rpengine.chat.effects nodes and the
rpengine.tag nodes are not granted by rpengine.admin: a staff member
holding every tag would wear whichever ranks highest. Every other node here is.
rpengine.edit deserves a moment before you grant it widely. It lets whoever
holds it rewrite files in your content folder from a browser; see
Editing in a browser.
Content can carry its own node too: permission: on an item or a model, which
is checked when it is used or placed.
Pointing a command at somebody else#
Twelve commands can name another player. Naming yourself, or nobody, needs only
the command's own node. Naming somebody else also needs
rpengine.<command>.others:
| Node | What it allows |
|---|---|
rpengine.sound.others | Playing a custom sound to somebody else |
rpengine.music.others | Starting, stopping or skipping the music for somebody else |
rpengine.screen.others | Opening a custom screen on somebody else |
rpengine.hud.others | Drawing or clearing a HUD overlay on somebody else |
rpengine.shader.others | Showing or clearing a shader object on somebody else |
rpengine.dialog.others | Opening a dialog on somebody else's screen |
rpengine.var.others | Changing somebody else's dialog settings |
rpengine.armor.others | Dressing somebody else in 3D armour, or handing them a set |
rpengine.bind.others | Putting a model on another player. A mob needs only rpengine.bind |
rpengine.unbind.others | Taking a bound model off another player |
rpengine.egg.others | Giving a custom mob's spawn egg to somebody else |
rpengine.cast.others | Playing a VFX where somebody else stands |
All default to op. So you can let every player open menus for themselves
(rpengine.dialog) without letting them open one on anybody else's screen. A
player without the node is told which one they need, and tab completion
offers them only their own name.
The console and command blocks are never refused. A command run through
execute as <player> is judged by whoever ran it, not by the player it runs
as.
Granting them#
With LuckPerms:
/lp group builder permission set rpengine.give true
/lp group admin permission set rpengine.admin true