resourcepack.ai
DOCS

Running a server

Configuration

plugins/RPEngine/config.yml. Everything in it has a working default; most servers change the first setting and nothing else.

The pack#

pack:
  format: 46                  # must match the version your players are on
  description: "My server"
default-bundle: main          # what a joining player is handed

pack.format is the one to get right. A number that does not match the client's version shows a "made for a different version" warning on join. The comment beside it lists the numbers.

Serving#

host:
  port: 8181
  public-address: "http://203.0.113.4:8181"

The plugin serves its own built packs over HTTP. It is told its public address rather than guessing one: a server behind a proxy or a NAT cannot work out how the outside world reaches it, and a guess produces a pack that downloads on the machine you tested on and nowhere else.

How it talks#

Every line the plugin writes wears a prefix and a palette, and both are yours:

chat:
  prefix: "RPEngine"
  colour:
    prefix: "#3670f8"
    brackets: "#555555"
    body: "#aaaaaa"
    accent: "#3670f8"
    error: "#ff5555"
    success: "#55ff55"

A plugin that shouts in its own brand colours on somebody else's server is a plugin whose messages get muted. The defaults are ours; the palette is yours.

Colours are hex, with or without the #. Anything that is not a hex triple falls back to its default rather than throwing — a typo in a colour is not a reason for a plugin to stop talking.

Icons in chat#

chat:
  icons: false

Turn it on and anybody with rpengine.chat.icons can type :wave: in chat to get the icon called wave. Use :mypack:wave: where two packs use one name.

Off by default, because a plugin that starts rewriting what people type the moment it is installed is one somebody has to find the setting for in a hurry.

A name that is not an icon is left exactly as typed, so 10:30, :) and a URL all survive.

Seats#

models:
  seat-offset: 0.0

Nudges every seat on the server up or down, in blocks. seat: on a piece says where that piece's seat is; this corrects how the game draws somebody sitting, which is wrong by the same amount for every chair you own.

Sit on something, decide it is a hand's width out, put the number here and /rp reload. Positive is higher. Most servers never touch it.

Vehicles#

vehicles:
  seat-offset: 0.0
  seat-forward: 0.0
  push-players: false
  collide: true
  speedometer: true
  mount-hint: true
  seat-rig: true

seat-offset and seat-forward are the same nudge as the one above, for the seats in a vehicle: up, and along the vehicle toward its front. Where a rider ends up is the chassis, plus the seat, plus the game's own rule for placing a passenger — and that last one cannot be read by a plugin and has changed between versions. If every seat on your server is consistently a bit off from where the editor drew it, these close the gap in one /rp reload.

push-players makes a moving vehicle shove players out of its way, as it already does mobs. Off, because cars nudging each other's drivers about in a car park, and a passenger being flung as they get out, are both worse than a vehicle passing through somebody. Nothing here changes what a vehicle does about blocks — it always stops at a wall.

collide is whether vehicles run into each other. On, and what happens when they do is worked out rather than staged: how fast the two were closing, which way round they met, how far off centre the hit landed and what each of them weighs. So a lorry shunts a hatchback aside and hardly slows, a clip on the corner sends you round and a square rear-ending does not, and at a crawl the whole thing turns into pushing. Turn it off for a track where a pile-up is worse than a clean overtake, or a lobby where cars are parked shoulder to shoulder.

speedometer is whether a driver sees their speed above the hotbar in kilometres an hour, going yellow while the tyres are sliding. On. It stays off the action bar for a few seconds after anything else is written there, so it never paints over which seat you got. Off writes nothing and puts the readout nowhere else. An individual vehicle can opt out on its own with speedometer: false — see vehicles, which is what a skateboard does.

mount-hint is the line above the hotbar when somebody gets in: the controls, once, and nothing else. On, because which keys drive depends on what this server can read from a client — a server that cannot read them steers by look instead, and nothing anywhere else says so. Off for a server that has told its players once and would rather the screen stayed clean. A passenger is told which seat they took either way, because on a small vehicle the seat markers overlap and somebody who meant to drive needs to know they did not.

seat-rig puts every occupant in their emote rig, sitting the way the seat's pose says, even on a pack that never authored a driving pose. It is on because the game otherwise draws a passenger standing up to their waist in the hull. Off costs nothing and shows ordinary players; a seat that names an emote is unaffected either way.

The /emote command#

emotes:
  player-commands: true
  bake-on-join: true

Whether /emote and /emotereply are registered as commands of their own. Turn it off and nothing is lost — /rp emote runs the same code — but the server has one command instead of three.

bake-on-join rebuilds the packs shortly after somebody turns up whose emote rig is not in them, and sends the new ones out. A player's rig is pack content — a model per bone wearing their skin — so a player this server has never seen has no rig to wear and appears as the shared default until a build catches up. That is the "why is my friend a default skin" every server hits, and it lands on a first join, which is the worst moment for it.

The rebuild starts at once: somebody who walked in on their own should not stand about as a default skin waiting out a window that exists for crowds. Anybody who arrives during that rebuild, or in the five seconds after it, is covered by a single follow-up rather than costing a rebuild each — so a server filling up at the start of an evening pays two, not twenty. Only players whose pack is actually out of date are sent a new one.

Off is for a server that would rather choose the moment — a big pack, a busy lobby — and /rp reload still bakes whatever has arrived since.

On by default. It is worth turning off on a server that already has an /emote from another plugin: two plugins claiming one name means whichever loaded first wins, and the loser's version is reachable only as /theirplugin:emote, which no player will ever type.

Upgrading

This setting is new, so an existing config.yml will not have the line in it. A missing line reads as true, which is what the plugin has always done — add it by hand if you want it off.

Studio#

sync:
  url: "wss://sync.resourcepack.ai/connect"
  server-token: ""

Only needed if you use Studio to push packs to a running server. Leave it alone and the plugin never reaches out.

A server that never links behaves exactly as it did before any of this existed — Studio is one content source among several, not a requirement.

Editing in a browser#

edit:
  enabled: true
  url: "https://studio.resourcepack.ai"

/rp edit <id> hands you a link to the editors at resourcepack.ai, opened on the file in your own content folder — no account needed. See Editing in a browser.

enabled: false and the command says so instead of doing anything. This is the only feature that talks to anything outside your server, and it does so only while a link is open.

url: is worth changing for one reason: pointing at a staging Studio.