
ResourcePackManager
Automatically merge & host all your Resource Packs using a priority system!
- Загрузки
- 20K
- Подписчики
- 47
- Обновлён
- 28 июня 2026 г.
- Лицензия
- LGPL-3.0-only
Опубликован 7 сентября 2025 г.
This dev log is the only video I have right now, a dedicated one will (hopefully) come soon!
🟠 How it Works
Got more than one plugin that uses resource packs? Tired of manually merging them, recalculating SHA1, and rehosting? Want drag & drop support where players instantly get custom models? This plugin is the solution!
ResourcePackManager automatically grabs the resource packs from automerge-compatible plugins, merges them based on config priorities, and hosts them directly from your server. Players automatically receive the merged pack. You can also add manual packs in the mixer folder.
🟠 Main Features
- Automatically merges all of your server's resource packs!
- Self-hosts your resource pack directly from your server! Falls back to free remote hosting if self-hosting is unavailable.
- Automatically sends the resource pack to players when they log in!
- Bedrock support! Automatically converts your merged Java pack into a Bedrock-compatible pack for GeyserMC.
- Proxy network support! Works with Velocity, BungeeCord, and Waterfall — Bedrock players receive a single merged pack across all servers.
- Supports manual additions in the mixer folder.
- 24/7 Discord support.
- No setup or maintenance required!
- Want an even better experience? Works best with Free Minecraft Models and EternalTD — both free!
🟠 How to Setup
- Drop
ResourcePackManager.jarinto yourplugins/folder. - Restart your server.
That's it! The plugin works with recommended defaults out of the box. You can tweak settings in the config files.
🟠 Bedrock Support (GeyserMC)
ResourcePackManager automatically converts your merged Java resource pack into a Bedrock-compatible pack for GeyserMC, so Bedrock and Java players see the same custom content. This is enabled by default and requires no additional setup. Currently supports FreeMinecraftModels custom models and EliteMobs custom items.
🟠 Proxy Network Setup (Bedrock)
Running multiple Geyser/Floodgate servers behind a proxy? Bedrock clients are limited to one resource pack per network connection. ResourcePackManager works around this by merging all the resource packs across your network into a single pack, which is then sent to Bedrock clients when they log in.
To set this up, just install ResourcePackManager both on your proxy server and the backend server (same ResourcePackManager.jar file). Once everything is set up, restart the proxy twice for the geyser mappings to get saved properly!
Java players receive their packs directly from each backend on server switch.
🟠 Limitations & Compatibility
Limitations:
ResourcePackManager merges where possible but cannot fix fundamental conflicts (e.g. GUI unicode spacing clashes or duplicate item model IDs). In conflicts, the higher‑priority pack is chosen.
Automerge-compatible plugins
- FreeMinecraftModels (recommended models plugin!)
- EliteMobs (recommended bosses plugin!)
- EternalTD (recommended minigame plugin!)
- BetterHUD
- ItemsAdder (requires unencrypting & disabling hosting)
- MMOInventory
- ModelEngine
- Nova
- Oraxen
- ValhallaMMO (requires
/valhalla resourcepack download) - BackpackPlus
- RealisticSurvival
- Vane-Core
Have a plugin you'd like supported? Let me know on the Discord!
🟠 Commands
/resourcepackmanager reload— reloads the plugin./resourcepackmanager data_compliance_request— downloads all hosted data for inspection./resourcepackmanager status— gives the current status of RSPM.
🟠 Hosting
ResourcePackManager attempts to self-host the resource packs directly from your server by default. This requires your server ports to be accessible to players. If you can't forward ports or prefer not to self-host, RSPM automatically falls back to free remote hosting on Nightbreak servers, made possible by Patreon supporters. You can configure hosting mode in config.yml.
Remote hosting data policy & TOS
ResourcePackManager Data Policy and Compliance
ResourcePackManager, developed by MagmaGuy for the Nightbreak game studio, includes an optional auto-host feature that temporarily hosts resource pack data on a remote server.
As of this writing, the hosted data is fully anonymous and serves the sole purpose of simplifying the distribution of resource packs to clients of servers utilizing this service. Future versions of this document may be updated to reflect any changes in data policy and other related matters.
This system complies with:
- Directive 2000/31/EC of the European Parliament and of the Council of 8 June 2000
- Regulation (EU) 2022/2065 of the European Parliament and of the Council of 19 October 2022
For data hosting transparency and compliance with these and other European norms, it is possible to obtain all data related to a server via the /resourcepackmanager data_compliance_request command. This command packages a full copy of all files and data associated with the requesting server.
To request the takedown of your server's data, contact MagmaGuy at magmaguy/at\nightbreak.io (replace /at\ with @). However, due to the system's design, data is only retained for up to 24h after a server using ResourcePackManager shuts down, making email requests largely unnecessary. Nonetheless, the option remains available to ensure full compliance with European norms.
Data Handling by ResourcePackManager and Nightbreak Servers
- Resource Pack Creation
- ResourcePackManager aggregates resource packs on your server into a single zipped file containing all custom content.
- Initialization Request
- An initialization request is sent to remote servers, creating a
.txtfile with a random UUID. This file can be obtained via the/resourcepackmanager data_compliance_request.
- SHA1 Request
- ResourcePackManager transmits the SHA1 code of your resource pack to the remote server, which is saved in the
.txtfile.
- File Transmission
- The zipped resource pack file is sent to the remote server, assigned the same UUID as the
.txtfile. This file can be obtained through/resourcepackmanager data_compliance_requestand verified to be identical to the original in your output folder, as it is not modified by the Nightbreak servers.
- "Still Alive" Ping
- ResourcePackManager sends a "still alive" ping every 12 hours, transmitting the UUID to the server, which updates the timestamp in the
.txtfile. - If no "still alive" ping is received for over 24 hours, all data associated with that UUID (the
.txtfile and the resource pack) is deleted from the Nightbreak servers.
Data Policy
- Pseudonymous Identification: Nightbreak assigns a random UUID to your server's files each time the server reboots, ensuring no IP address or identifiable information is stored unless users manually add such information to their resource packs.
- No Download Logging: Nightbreak does not log any data related to download requests by Minecraft clients.
- No Data Sales: Data uploaded to Nightbreak is not, has never been, and will never be sold.
- Compliance with Takedown Requests: Nightbreak will comply with takedown requests from both server administrators and law enforcement agencies.
- Automatic Data Removal: All data associated with your server is automatically removed 24 hours after your server shuts down and is reuploaded on every restart for as long as ResourcePackManager is in use and using the auto-host feature.
Terms of service
As of writing this, the hosting service is provided for free for all users of ResourcePackManager.
It is the user's responsibility to ensure that the data uploaded to servers is not illegal and complies with any Mojang TOS as defined in their EULA.
Abusing the service to host material other than resource packages may result in a permanent denial of service for the offending IP.
The service may, at any time, cease or be modified in such a way that makes old versions unable to connect to it.
We reserve the right to unilaterally terminate this service at any time and for any reason.
🟠 View More by Magmaguy!
🟠 Partner servers
Matecraft is the official partner server! It's always up to date with the latest experimental features and new dungeons. Great community, check it out!
eternaltd.matecraft.org
🟠 Developers
API & Maven
(this might be outdated)
registerResourcePack(String pluginName,
String path,
boolean encrypts,
boolean distributes,
boolean zips,
boolean local,
String reloadCommand)
Also available: reloadResourcePack().
Maven:
<repository>
<id>magmaguy-repo-releases</id>
<name>MagmaGuy's Repository</name>
<url>https://repo.magmaguy.com/releases</url>
</repository>
<dependency>
<groupId>com.magmaguy</groupId>
<artifactId>ResourcePackManager</artifactId>
<version>CHECK-LATEST-VERSION</version>
</dependency>
Ченджлог
2.2.2Релиз26.1.1, 26.1.2, 26.2 · 28 июня 2026 г.
ResourcePackManager 2.2.2:
- [New] Clear console warning when a pack uses the legacy pre-1.21.4 custom-item format (the most common cause of invisible models on Bedrock)
- [Fix] First-time setup now completes and settings save correctly when other MagmaGuy plugins are installed
2.2.1Релиз26.1.1, 26.1.2, 26.2 · 25 июня 2026 г.
ResourcePackManager 2.2.1: ResourcePackManager 2.2.1
- [New] Added automatic Geyser bridge extension installation for proxy setups
- [New] Added Bedrock entity bundle import and merge support
- [Fix] Fixed proxy network sync/status handling for merged packs
- [Fix] Fixed auto-host URL handling and backend pack delivery
- [Tweak] Rebuilt with the latest shared 26.2 compatibility fixes
2.2.0Релиз26.1.1, 26.1.2, 26.2 · 24 июня 2026 г.
ResourcePackManager 2.2.0:
- [New] Simplified the setup, this jar file should now be used in both proxies and backend servers for networks instead of having multiple jars to pick from.
- [New] Added backend HTTP endpoint announcements for proxy Bedrock pack sync
- [New] Added Geyser bridge extension packaging and relay endpoint support
- [Fix] Bedrock players are no longer sent the Java resource pack prompt when Floodgate handles delivery
- [Fix] Shortened long Bedrock entity bundle paths and rewrote references to avoid Geyser path warnings
- [Fix] Deduplicated direct and relay Bedrock merge inputs
- [Tweak] Improved proxy /rspm status diagnostics for announced endpoints and fallback HTTP ports
2.1.0Релиз26.1, 26.1.1, 26.1.2 · 21 июня 2026 г.
ResourcePackManager 2.1.0:
[New] Bedrock custom entity bridge with a Geyser bridge extension for serving custom entities to Bedrock players
[New] Import Bedrock entity bundles produced by FreeMinecraftModels
[New] Check for and one-click download ResourcePackManager updates in-game from the setup menu, with an Automatic Updates toggle (off by default)
[New] Recommended Plugins view in the setup menu (plus a recommendedplugins command) and a /nightbreak plugins catalog to browse MagmaGuy's other plugins
[Fix] Improved Bedrock texture stitching and resource-pack merging
[Fix] Warn in the console when a merged pack has an overlay missing a valid formats field (which MC 1.21.9+ clients reject), instead of silently shipping a rejected pack.
2.0.2Релиз26.1, 26.1.1, 26.1.2 · 5 июня 2026 г.
ResourcePackManager 2.0.2:
- [Fix] Resource pack now reliably sends on join — previously dropped silently, leaving players with missing or black textures
- [Fix] Bedrock item conversion handles flat-icon items with no geometry and skips models with no usable textures
- [Tweak] Clearer missing-texture diagnostics during Bedrock conversion — custom-namespace refs warn, vanilla refs are expected misses
- [Tweak] Improved pack staging
- [Tweak] Updated the bundled MagmaCore library
2.0.1Релиз26.1, 26.1.1, 26.1.2 · 30 мая 2026 г.
ResourcePackManager 2.0.1:
- [Fix] MC 1.21.9+ pack.mcmeta merging now keeps pack_format, min_format, max_format, and supported_formats valid across mixed old/new-format packs
- [Fix] Merged model JSON now auto-adds missing particle textures and clamps invalid UVs to 0-16
- [Fix] Bedrock conversion now handles unnamespaced item-model tree node types like type: "model"
- [Fix] Legacy Geyser pack copies are now cleaned up even when Bedrock conversion is disabled
- [Tweak] Built against MagmaCore's updated Nightbreak bootstrap, shared command stack, and resource-pack zip utilities used by RSPM's standard commands and pack output flow
2.0.0Релиз26.1, 26.1.1, 26.1.2 · 28 мая 2026 г.
ResourcePackManager 2.0.0:
- [New] Multi-module project layout —
resourcepackmanager-bukkit(backend),resourcepackmanager-bungeeandresourcepackmanager-velocity(proxy plugins for BungeeCord / Waterfall and Velocity),resourcepackmanager-bedrock(Geyser / Bedrock conversion),resourcepackmanager-http-common(shared HTTP + Magmaguy RSP client),resourcepackmanager-mixer(platform-neutral pack merge engine),resourcepackmanager-proxy-common(Geyser session binding + network sync). Single backend jar still drops intoplugins/; proxy jars auto-extract into the proxy'splugins/on first boot. - [New] Network mode — Velocity, BungeeCord, and Waterfall plugins detect every connected backend, fetch each backend's mixed Java and Bedrock packs over an embedded HTTP server, merge them per-network, push the merged Java pack to Java players, and serve the merged Bedrock pack to Geyser sessions. Backends running behind a proxy skip their own
setResourcePackso the proxy is the sole pack source. Detected automatically via Floodgate-without-Geyser,spigot.yml settings.bungeecord, orpaper-global.yml proxies.velocity.enabled. - [New] Floodgate-key-derived network key —
NetworkKeyResolverhashesplugins/floodgate/key.pemto a UUID-form key shared automatically across every proxy and backend on the same Floodgate network. No more pasting a key into the proxy config; separate Floodgate networks get separate keys for free. Setup collapses to "drop jars and restart." - [New] Proxy ↔ backend Bedrock pack delivery — backends serve their per-backend Bedrock pack zip at
/bedrock.zip(and mappings at/mappings.json) over an embeddedPackHttpServer; the proxy polls each backend viaBackendMetadataPoller(cheap 304 Not Modified after the first cycle) and ships URLs to Bedrock clients throughGeyserBinder. Plugin-messaging fallback ships the URL if HTTP polling fails. - [New] Three-surface warning system — when a Bedrock session loads before a pack is ready, the Bedrock player gets a Cumulus "OK — I'll Reconnect" modal, every online Java player gets a chat warning naming the affected player, and the proxy console gets a multi-line banner. Bookended by a fire-once green checkmark on first successful merge (with pack size + sha1 prefix). Backend-side,
AutoHost.sendResourcePackfires console banner + per-player chat warning when a player joins before mix+upload finishes. - [New] Self-host fallback —
AutoHostnow spins upPackHttpServerand serves the Java pack from this host if the magmaguy.com upload fails. New keys:selfHostEnabled(default true),selfHostPort(-1 = auto-derive MC port +networkHttpOffset-v2),selfHostExternalHost(auto-detected via ipify / checkip →Bukkit.getIp→getLocalHost),selfHostForce(bypass remote entirely),preferSelfHost(try self-host first, fall back to remote on reachability / HEAD-probe failure — default true). - [New]
/rspm statuscommand — single-shot operator dump of version, deploy mode (standalone vs network-backend), resolved network key (masked last-4), Java pack path / size / sha1, Bedrock pack + Geyser mappings state, active hosting URL, all relevant config flags, and Floodgate / Geyser integration sanity. Mirrored on Velocity and Bungee proxies viaProxyStatusRendererso both sides of the wire share output layout. - [New] Compatible-plugin premades for
BetterStructures,CannonRTP,EternalTD,MegaBlockSurvivors, andResurrectionChest. - [New] Bedrock identifier hashing via
BedrockShortName— Bedrock pack file paths and Geyser mapping IDs collapse to 8-char SHA-256 hex prefixes, eliminating Bedrock's "80+ char path" warning flood and keeping identifiers opaque to pack inspection. - [New] BungeeCord pack push uses native Bungee Protocol API via reflection — Protocolize is no longer required (was a hard soft-dep for
PostLoginEventinjection). Supports 1.21.4+ packet IDs and emits oneProtocolMappingper protocol-range start. - [Fix]
BackendMetadataPollerdeduplicates backends byhost:portandNetworkSyncdeduplicates by backend UUID — multi-host setups no longer double-poll or double-merge the same backend. - [Fix] AutoHost player resource pack broadcasts wrapped in the sync scheduler — no more main-thread violations when the upload completes on the HTTP I/O thread.
- [Fix]
PackHttpServershuts down its executor on close — fixes the thread leak that accumulated one executor per/rspm reload. - [Fix]
MagmaguyRspClient(extracted fromAutoHost) takes an injectedLoggerso log lines keep the plugin prefix, and surfaces SHA1-mismatch session errors instead of swallowing them. - [Fix]
GeyserBinderconstruction is now guarded on Geyser presence — proxy plugins boot cleanly on networks that haven't installed Geyser yet. - [Fix] Mixer collision-log entries no longer dropped during the
MixEngine/MergeOperationsrefactor; collision log routed through the engine wrapper; stale staging cleanup preserved; cluster ordering preserved. - [Fix] Backend boot speed: initial pack-availability poll 5s → 2s, poll interval 30s → 5s,
STABLE_CYCLES_REQUIRED2 → 1 (BedrockZip writes via temp + atomic rename so torn reads can't occur). Cold-start time to first usable merged pack drops from ~65s to ~7s when backends are already up. Steady-state poll cost ~0 bytes per cycle viaIf-Modified-Since. - [Fix] Maven
copy-proxy-jarsbound toprepare-packagesomvn compileno longer fails looking for proxy artifacts. - [Fix] Proxy build relocates
gsonto avoid classpath conflicts with Velocity / Bungee's bundled copies. - [Tweak] Bedrock-conversion console output drastically less noisy when Geyser is installed — introduced
BedrockLog.debug(...)gated on a newbedrockConverterDebugconfig flag (defaultfalse). High-volume informational sites are now debug-only: per-item "no Geyser equivalent" notices, per-bone unsupported-property warnings, "Detected Geyser at …" / "Geyser mappings deployed to …" status lines on every reload cycle, "Wrote merged Geyser mappings: N entries", per-texture "Texture not found", duplicate-mapping skip notices, face-rotation-not-multiple-of-90, equipment-texture-not-found, and the entireItemModelTreeWalkerper-node noise tree (~13 sites). Genuine errors (I/O failures, atlas-exceeds-max, AssetResolver cycle / depth violations, per-model conversion-step failures) and the per-cycle "Bedrock conversion complete: N mappings" summary stay at INFO / WARN. - [Tweak] All modules and packages renamed from shortened
rpm-*to unshortenedresourcepackmanager-*for consistency with the plugin name. - [Tweak] Module rename of
rpm-mixertoresourcepackmanager-mixer; pure merge ops moved out of the Bukkit module into the platform-neutral mixer module so the proxy can mix without Bukkit on the classpath.Mix.javais now a thin Bukkit wrapper overMixEngine. AddedMergeOperationsTestunit tests. - [Tweak]
networkHttpOffset-v2key with default1(wasnetworkHttpOffsetwith default100). Default+100fell outside the per-container port range on shared / managed hosting (Pterodactyl tenants, alienhost.me, etc.);+1fits even the narrowest allocations. Old v1 key is intentionally not read — operators upgrading get the v2 default written on next boot. - [Tweak]
network-keyis no longer a config option — derived from Floodgate'skey.pemat every component, so the old "paste this key into the proxy config" misconfiguration vector is gone. Persisted proxy-side as a fallback for first-boot when Floodgate isn't installed yet. - [Tweak] Plugin-messaging cache replaced with backend HTTP metadata endpoint — proxy no longer holds stale per-player state across reconnects.
- [Tweak] Network-mode documentation collapsed to "drop the jars in, restart" walkthroughs (server-side API contract documented separately for plugin devs integrating against RSPM).
- [Tweak] Various MagmaCore library improvements (Lua scripting engine + zones moved to MagmaCore, EasyMinecraftGoals absorbed, NMS v26 / Paper 26.1 support, type-based
EntityDimensionsreflection with cached lookup,WorldFolderResolverand Paper-migration debris quarantine,TemporaryBlockManager,SetupMenuBuilder+InfoButtonFactory+NightbreakSetupIconsshared UI,ContainerAllowlist/WorldProtectionRulesinstance protection,MagmaCore.exportSharedAssets/enableWorldProtections/isShutdownRequested,AdvancedCommandoptional-argument support,LocationAPIwith WorldGuard + GriefPrevention providers, Nightbreak token-change subscribers,ClientboundEntityPositionSyncPacketadoption on 1.21.2+ with BedrockClientboundBundlePacketskip, ArmorStand HeadPose force-send every tick for Bedrock attachable rebind,DAMAGE_INDICATORoutbound particle-count clamp, per-plugin Netty handler name inPacketInteractionListener, lazy Lua field support,ZipFileSTORED-with-EXT-descriptor fix, dedup / rate-limited Nightbreak auth-failure logs, three-tier BedrockChecker detection — name pattern^\..*\d{4}$+ UUID-MSB == 0 + case-insensitive plugin lookup — so Bedrock viewers are detected even when Floodgate hasn't registered them yet).
1.8.0Релиз26.1, 26.1.1, 26.1.2 · 18 мая 2026 г.
ResourcePackManager 1.8.0:
[New] Java→Bedrock conversion now works for ANY plugin's resource pack, not just FreeMinecraftModels — Bedrock players (via Geyser) automatically see 3D item models, custom armor, and modeled equipment from any plugin shipping a 1.21.4+ items-definition pack [New] Pure-Java 3D item icon renderer — custom items render correctly in the Bedrock inventory regardless of model rotation (previously non-axis-aligned models showed as flat UV atlas garbage) [New] Per-Bedrock-session pack serving via Geyser's API — texture and model tweaks to existing custom items now take effect on the next joining Bedrock player without a server restart (previously needed a restart for ANY change because Geyser scanned packs/ once at boot) [New] bedrock_display_offsets.yml — twelve user-tunable knobs to fine-tune first/third-person display offsets when a model doesn't sit quite right in Bedrock hands [New] Custom armor textures now render on Bedrock players (uses vanilla armor geometry with the Java texture layer) [Fix] Third-person hand display now respects the Java X rotation that was previously being dropped — fixes guns, bows, and angled tools rendering at the wrong pitch on Bedrock [Fix] Vanilla item models (shield.json, crossbow.json, etc.) are no longer recursively merged across packs — fixes shield offset drift and crossbow rendering as missing-texture [Fix] Items-definition merging (assets//items/*.json, 1.21.4+) is now format-aware — fixes corrupted transformation arrays, tint RGB triplets, and composite model render order [Fix] Overlay atlas files (e.g. ItemsAdder's overlay_modern/legacy_atlas) now properly inherit sources from the base atlas instead of losing them when the overlay activates [Fix] pack.mcmeta supported_formats / min_format / max_format are now properly widened across all formats (int, 2-int array, and object form) [Fix] Resource pack mixing pipeline now bails out fast on plugin shutdown instead of dragging async tasks past onDisable [Fix] AutoHost in-flight uploads are now force-closed on plugin disable [Fix] Multiple Bedrock conversion fixes: per-(model × bone) atlas paths, flipbook texture icons (was passing 64×768 strips to Bedrock), attachable geometry format bumped 1.16.0 → 1.21.0, deterministic pack manifest UUIDs (Bedrock cache now invalidates correctly), bedrockConversionEnabled defaults to true [Tweak] MagmaCore dep bumped to 2.2.0-SNAPSHOT for shutdownRequested and the new location/protection APIs
Комментарии
Загружаем…