Skip to main content

ResourcePackManager (RSPM)

ResourcePackManager discovers, merges, hosts, and distributes resource packs from supported plugins and from manually supplied packs. It can also convert the merged Java pack into a Bedrock resource pack so GeyserMC players see the same custom content as Java players, and it ships first-class support for BungeeCord, Waterfall, and Velocity proxy networks.

What It Does

  • discovers supported plugin packs and merges them according to priorityOrder
  • runs its own built-in HTTP server so it can self-host the merged pack (no external file host required)
  • can fall back to MagmaGuy's free hosting (auto-host) when self-hosting isn't viable
  • can force or optionally prompt pack use
  • watches for pack changes and re-merges automatically when sources stabilize
  • converts the merged Java pack into a Bedrock resource pack for GeyserMC
  • works on proxy networks: every backend produces its own Bedrock pack, the proxy plugin pulls them, merges them, and serves the result through Geyser

Architecture at a Glance

RSPM v2 is a multi-module Maven build, but it ships as a single jar: ResourcePackManager.jar. That one jar contains the Bukkit/Paper plugin, the Velocity plugin, and the BungeeCord/Waterfall plugin all at once — Minecraft loads whichever entry point matches the platform it's running on. There are no longer separate ResourcePackManager-Velocity.jar / ResourcePackManager-BungeeCord.jar files and no proxy-extension/ folder.

The same jar plays two roles depending on where you drop it:

  • As a backend plugin (on each Paper/Spigot backend) — mixes Java packs, runs the Bedrock converter, hosts the pack, exposes a small HTTP server, and pushes packs to Java clients.
  • As a proxy plugin (on a Velocity or BungeeCord/Waterfall proxy) — pulls each backend's Bedrock pack and mappings, merges them into a single network-wide pack, and serves it to Bedrock clients via the proxy's Geyser.

A standalone server only needs the jar on the backend. A proxy network needs the same jar on every backend AND a copy on the proxy.

When the backend detects a local Geyser-Spigot install, it also drops a bundled ResourcePackManager-GeyserBridge.jar into Geyser-Spigot/extensions/ (a Geyser extension, not a separate plugin) so Geyser can render RSPM's custom Bedrock entities.

Hosting Options

Three delivery paths, picked automatically in this order when autoHost: true:

  1. Self-host first (preferSelfHost: true, default) — RSPM starts its own HTTP server, runs a chain of sanity checks (non-LAN address, localhost self-probe, magmaguy.com external-reachability probe), and announces the local URL to clients. Zero bandwidth cost to MagmaGuy.
  2. Remote auto-host fallback — if any self-host check fails, RSPM uploads the pack to MagmaGuy's CDN at magmaguy.com/rsp/ and announces that URL instead.
  3. Forced self-host (selfHostForce: true) — skips both probes and remote upload entirely. Mainly for testing.

If autoHost: false, RSPM writes the merged zip to plugins/ResourcePackManager/output/ and you take it from there.

See Self-hosting for the full delivery decision tree, port resolution, and external-host detection.

Java-to-Bedrock Conversion

The Bedrock converter is no longer FreeMinecraftModels-only. It walks every 1.21.4+ items definition file (assets/<namespace>/items/*.json) in the merged pack and produces Bedrock geometry, attachables, and inventory icons for whichever plugin shipped them:

  • Bedrock players see 3D items, custom armor, and modeled equipment for any plugin whose pack uses the 1.21.4+ items-definition format.
  • Custom armor textures render on Bedrock players using the vanilla armor geometry with the Java texture as the visible layer.
  • Inventory icons for 3D items are software-rendered from the Java model through the display.gui transform.
  • The Bedrock pack is served live per Bedrock session via Geyser's API, so texture and model tweaks reach the next joining Bedrock player without a server restart. Custom-item mappings still require a restart because Geyser registers them at boot.
  • Twelve user-tunable knobs for held-item display offsets (six first-person, six third-person) in bedrock_display_offsets.yml.

Current Integrations

ResourcePackManager ships with premade integration entries for these plugins:

  • BackpackPlus
  • BetterHUD
  • BetterStructures
  • CannonRTP
  • EliteMobs
  • EternalTD
  • FreeMinecraftModels
  • InfiniteVehicles
  • ItemsAdder
  • MegaBlockSurvivors
  • MMOInventory
  • ModelEngine
  • Nexo
  • Nova
  • Oraxen
  • RealisticSurvival
  • ResurrectionChest
  • ValhallaMMO
  • vane-core

Each integration only activates if the plugin is installed and its configured local path or remote URL is usable. The plugin also detects Geyser (Geyser-Spigot on a backend, Geyser-Velocity / Geyser-BungeeCord on a proxy) at startup and wires Bedrock pack delivery into whichever one it finds.

Where to Go Next

  • Setup — operator workflow for a standalone server
  • Proxy networks — step-by-step setup for BungeeCord / Waterfall / Velocity
  • Self-hosting — built-in HTTP server, port resolution, external-host detection
  • Bedrock / Geyser conversion — what gets converted, tuning knobs
  • FAQ — common questions
  • Troubleshooting — what to check when something's broken
  • API — registering packs from your own plugin