Skip to content

Repository files navigation

Resourcepack Loader

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.

What it does

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.

Modules

  • 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.

Requirements

Java 21, Velocity, and (for cross-server unfreeze coordination) a running pubsub/NATS setup alongside lobby-system on the backend.

Building

./gradlew build

To get runnable artifacts:

./gradlew velocity:shadowJar server:shadowJar

Jars are written to velocity/build/libs/ and server/build/libs/.

Configuration

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.

License

See LICENSE.

Contributing

See CONTRIBUTING.md.

About

Eternal Empires - resource pack delivery

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages