resourcepack.ai
DOCS

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:

NodeWhat it allows
rpengine.emotePlaying an emote with /emote
rpengine.emotesListing emotes
rpengine.chat.iconsTyping :wave: in chat to draw an icon, when chat icons are on
rpengine.varChanging your own dialog settings: what a click on a dialog's switch or slider runs
rpengine.pageTurning a dialog to another page, or closing it: what a click on a paged dialog runs
rpengine.slotMoving an item in a dialog's item slots: what a click on such a slot runs
rpengine.clickPressing a dialog's console button: what a console: button runs. It runs only a button on the dialog the player has open
rpengine.runPressing 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.quickOpening 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#

NodeDefaultWhat it allows
rpengine.emote.castopPulling other players into an emote. They are still asked first
rpengine.emote.forceopPulling other players in without asking them
rpengine.cast.atopPlaying a VFX at a place, anywhere on the server: /rp cast <name> at <x> <y> <z>. Needs rpengine.cast too
rpengine.chat.iconseveryoneIcons in chat, above
rpengine.chat.effects.allopTyping every Text Effect in chat, as <fx:name>text</fx>
rpengine.chat.effects.<name>opTyping one Text Effect in chat: rpengine.chat.effects.fire. A / in the name is a .
rpengine.sync.consoleopTrusting 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.updateopBeing told on join when a newer RP Engine is out
rpengine.shaders.notifyopBeing 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>nobodyWearing 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:

NodeWhat it allows
rpengine.sound.othersPlaying a custom sound to somebody else
rpengine.music.othersStarting, stopping or skipping the music for somebody else
rpengine.screen.othersOpening a custom screen on somebody else
rpengine.hud.othersDrawing or clearing a HUD overlay on somebody else
rpengine.shader.othersShowing or clearing a shader object on somebody else
rpengine.dialog.othersOpening a dialog on somebody else's screen
rpengine.var.othersChanging somebody else's dialog settings
rpengine.armor.othersDressing somebody else in 3D armour, or handing them a set
rpengine.bind.othersPutting a model on another player. A mob needs only rpengine.bind
rpengine.unbind.othersTaking a bound model off another player
rpengine.egg.othersGiving a custom mob's spawn egg to somebody else
rpengine.cast.othersPlaying 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