Перейти к содержимому
Mineforgian

ResourcePackManager

Automatically merge & host all your Resource Packs using a priority system!

Загрузки
20K
Подписчики
47
Обновлён
28 июня 2026 г.
Лицензия
LGPL-3.0-only

Опубликован 7 сентября 2025 г.

Discord Nightbreak Patreon Wiki

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

  1. Drop ResourcePackManager.jar into your plugins/ folder.
  2. 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

  1. Resource Pack Creation
  • ResourcePackManager aggregates resource packs on your server into a single zipped file containing all custom content.
  1. Initialization Request
  • An initialization request is sent to remote servers, creating a .txt file with a random UUID. This file can be obtained via the /resourcepackmanager data_compliance_request.
  1. SHA1 Request
  • ResourcePackManager transmits the SHA1 code of your resource pack to the remote server, which is saved in the .txt file.
  1. File Transmission
  • The zipped resource pack file is sent to the remote server, assigned the same UUID as the .txt file. This file can be obtained through /resourcepackmanager data_compliance_request and verified to be identical to the original in your output folder, as it is not modified by the Nightbreak servers.
  1. "Still Alive" Ping
  • ResourcePackManager sends a "still alive" ping every 12 hours, transmitting the UUID to the server, which updates the timestamp in the .txt file.
  • If no "still alive" ping is received for over 24 hours, all data associated with that UUID (the .txt file 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-bungee and resourcepackmanager-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 into plugins/; proxy jars auto-extract into the proxy's plugins/ 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 setResourcePack so the proxy is the sole pack source. Detected automatically via Floodgate-without-Geyser, spigot.yml settings.bungeecord, or paper-global.yml proxies.velocity.enabled.
  • [New] Floodgate-key-derived network key — NetworkKeyResolver hashes plugins/floodgate/key.pem to 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 embedded PackHttpServer; the proxy polls each backend via BackendMetadataPoller (cheap 304 Not Modified after the first cycle) and ships URLs to Bedrock clients through GeyserBinder. 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.sendResourcePack fires console banner + per-player chat warning when a player joins before mix+upload finishes.
  • [New] Self-host fallback — AutoHost now spins up PackHttpServer and 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.getIpgetLocalHost), selfHostForce (bypass remote entirely), preferSelfHost (try self-host first, fall back to remote on reachability / HEAD-probe failure — default true).
  • [New] /rspm status command — 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 via ProxyStatusRenderer so both sides of the wire share output layout.
  • [New] Compatible-plugin premades for BetterStructures, CannonRTP, EternalTD, MegaBlockSurvivors, and ResurrectionChest.
  • [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 PostLoginEvent injection). Supports 1.21.4+ packet IDs and emits one ProtocolMapping per protocol-range start.
  • [Fix] BackendMetadataPoller deduplicates backends by host:port and NetworkSync deduplicates 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] PackHttpServer shuts down its executor on close — fixes the thread leak that accumulated one executor per /rspm reload.
  • [Fix] MagmaguyRspClient (extracted from AutoHost) takes an injected Logger so log lines keep the plugin prefix, and surfaces SHA1-mismatch session errors instead of swallowing them.
  • [Fix] GeyserBinder construction 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 / MergeOperations refactor; 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_REQUIRED 2 → 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 via If-Modified-Since.
  • [Fix] Maven copy-proxy-jars bound to prepare-package so mvn compile no longer fails looking for proxy artifacts.
  • [Fix] Proxy build relocates gson to 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 new bedrockConverterDebug config flag (default false). 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 entire ItemModelTreeWalker per-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 unshortened resourcepackmanager-* for consistency with the plugin name.
  • [Tweak] Module rename of rpm-mixer to resourcepackmanager-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.java is now a thin Bukkit wrapper over MixEngine. Added MergeOperationsTest unit tests.
  • [Tweak] networkHttpOffset-v2 key with default 1 (was networkHttpOffset with default 100). Default +100 fell outside the per-container port range on shared / managed hosting (Pterodactyl tenants, alienhost.me, etc.); +1 fits even the narrowest allocations. Old v1 key is intentionally not read — operators upgrading get the v2 default written on next boot.
  • [Tweak] network-key is no longer a config option — derived from Floodgate's key.pem at 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 EntityDimensions reflection with cached lookup, WorldFolderResolver and Paper-migration debris quarantine, TemporaryBlockManager, SetupMenuBuilder + InfoButtonFactory + NightbreakSetupIcons shared UI, ContainerAllowlist / WorldProtectionRules instance protection, MagmaCore.exportSharedAssets / enableWorldProtections / isShutdownRequested, AdvancedCommand optional-argument support, LocationAPI with WorldGuard + GriefPrevention providers, Nightbreak token-change subscribers, ClientboundEntityPositionSyncPacket adoption on 1.21.2+ with Bedrock ClientboundBundlePacket skip, ArmorStand HeadPose force-send every tick for Bedrock attachable rebind, DAMAGE_INDICATOR outbound particle-count clamp, per-plugin Netty handler name in PacketInteractionListener, lazy Lua field support, ZipFile STORED-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

Комментарии

Загружаем…