Resourcepack Loader delivers Eternal Empires's resource pack to players and coordinates with lobby-system so they aren't dropped into the world mid-download.
At the proxy level, ResourcepackListener sends the configured pack (a URL and its SHA-1 hash) to every player as they connect, and listens for PlayerResourcePackStatusEvent to know when a player has finished downloading it. If NATS/pubsub coordination is enabled, finishing the download publishes a PlayerUnfreezePacket that lobby-system subscribes to on the backend server — that's what lets the lobby freeze a player in place until their pack is actually ready, rather than letting them wander around seeing missing textures.
The standalone server module is a small Javalin service that serves the pack file itself (and can relay through Bettercraft, a third-party resource pack hosting service, if configured), separate from the Velocity plugin so pack hosting doesn't have to live on the same process as player connection handling.
velocity— the Velocity plugin: sends the pack to connecting players and publishes unfreeze packets once download completes.server— a standalone Javalin server that hosts/serves the actual resource pack file, optionally via Bettercraft.
There's no api module — this plugin doesn't expose anything for other plugins to depend on directly; coordination with other servers happens over pubsub instead.
Java 21, Velocity, and (for cross-server unfreeze coordination) a running pubsub/NATS setup alongside lobby-system on the backend.
./gradlew buildTo get runnable artifacts:
./gradlew velocity:shadowJar server:shadowJarJars are written to velocity/build/libs/ and server/build/libs/.
On first run, velocity/config.yml is generated:
resourcepack:
url: 'https://cdn.eternalempires.net/resourcepack/%hash%.zip'
hash: 'bcbb4926f9497560db09d070e674e2858d8635c6' # SHA-1 of the pack file
nats:
enabled: true
host: '0.0.0.0'
port: 4222
username: 'test-user'
password: 'test-password'
channel-id: 'resourcepack'The server module reads its own webserver.yml and bettercraft.yml for hosting configuration.
See LICENSE.
See CONTRIBUTING.md.