Testing in Minecraft
The plugin
Vanilla Minecraft can't do most of what a pack made here is for. It has no concept of an animated block model, no way to play an emote on a player, and no way for a server to hand one person a pack without handing it to everybody.
RP Engine is the half that makes those work. It's what our test server runs — the models you see standing around and moving on are this plugin doing it — and it's the same jar you can put on your own server.
You don't need it to use a pack
A pack made here is an ordinary resource pack. Export the .zip, point
server.properties at it, done — nothing of ours installed. The plugin is
for the things a resource pack alone can't do, which is the list below.
What it adds#
| Without the plugin | With it | |
|---|---|---|
| Models | The model renders, standing still | Place it, sit on it, pick it up, and it animates |
| Animations | Nothing — the keyframes sit in fields vanilla ignores | Plays on loop, on click, or from your own plugin |
| Emotes | Nothing | /emote plays one on a player, wearing their own skin — or puts on a movement set they keep while they carry on playing |
| Custom GUIs | The art ships, but nothing opens a screen with it | /rp screen opens the screen with your art drawn over it |
| HUD overlays | Same | /rp hud draws a meter or a frame over the world |
| Pack sounds | /playsound works, if you're an operator | /rp sound works for anybody, so the person testing can hear their own sound |
| Live testing | Re-export, re-upload, rejoin | Studio pushes a pack to one player in seconds |
| Distribution | One pack for everybody, one version | Every player gets the build for the version they're on |
It also does a good deal that has nothing to do with this site — items, recipes, entities, liquids, all written as YAML in a folder on your own server. That half is documented in RP Engine.
Installing it#
Requirements
A Paper or Spigot server on 1.19.4 or newer, running Java 17+, and permission to install plugins on it. 1.19.4 is where display entities arrived, and a placed model is one — so there's no build for 1.8, because the features the plugin exists to deliver aren't there to use.
Below 1.21.4 a few things are reduced rather than missing, and the plugin prints exactly which at startup. Minecraft versions is that list written down.
- 1
Download the jar
https://cdn.resourcepack.ai/RPEngine.jar - 2
Drop it in /plugins
Alongside everything else. It has no dependencies and no required configuration.
- 3
Restart the server
A
/reloadwon't do it — plugin jars are only picked up on a real restart. Check the console for the plugin's startup line.
Using it#
Two things it does for a pack made here, and they're independent — a server can do either without the other.
Pushing a pack to one player#
For building. A player runs /rp sync with the 8-digit code Studio shows, and
from then on Sync in the editor pushes the pack straight to them, in
seconds, without anybody touching server.properties.
/rp sync add <player> shares your pushes with the people building alongside
you.
That's per player on purpose: it's how you and your builders see a pack while it's being made, not how a public server serves one.
Serving your published pack to everyone#
For launch. /rp distribute <code> ties the server to a pack from the
Distribution tab, and from then on every joining player is served the build
for the Minecraft version they're actually on. That's the
Distribution feature, and it needs no sync from anybody.
Commands and permissions#
One command, /rpengine, with /rp and /rpe as aliases, plus /emote and
/emotereply for players. Every argument tab-completes, and every subcommand
has its own rpengine.<name> permission with rpengine.admin as a parent
that grants the lot.
The full table is on Commands and permissions. Two things worth knowing before you grant anything:
/rp screen, /rp hud and /rp sound each take an optional player, so
granting one lets that person draw a screen, an overlay or a sound onto
somebody else's client. Grant them to the people building your pack, not to
everyone.
Nobody is pulled into an emote without agreeing. /emote <name> <player…>
asks everyone it names first, and rpengine.emote.force is what skips the
asking — deliberately not a child of rpengine.emote.cast, because holding one
is being allowed to ask and holding the other is not having to. See
Emotes.
Driving it from your own plugin#
Everything above is reachable from Java: place a model, play an emote, open a screen, put an icon in a message, and cancel any of it when your own rules say no. See For plugin developers.