How to set a server resource pack

A server resource pack is a zip the client downloads when a player joins: custom textures, sounds, fonts, models for plugins that use them. The server does not host the file itself; it hands players a link and a checksum.

The link must return the zip file itself, not a page. Good options:

  • A GitHub release asset: upload the zip to a release and copy its download URL.
  • Any file host that gives a direct link (Dropbox links need ?dl=1 at the end).
  • Your own web server or CDN.

Keep the zip under a size players will tolerate; the client shows a progress bar and gives up on very large packs on slow connections.

Do not point it at a FadeHost app address: the hosted apps are for dashboards and APIs, not for serving a file to every player who joins.

2. Get the SHA-1

The checksum tells clients whether the pack they cached is still current. On a Mac or Linux machine:

shasum pack.zip

On Windows, in PowerShell:

Get-FileHash pack.zip -Algorithm SHA1

Copy the 40-character hash. Change the hash every time you change the pack, or players keep the old cached copy.

3. Put it in server.properties

The panel writes server.properties from your settings on every boot, so a hand edit is overwritten unless you take the file over: Settings, Self Manage Server Properties, on. From then on the file is yours; see Files.

Then open Files, edit server.properties, and set:

resource-pack=https://github.com/you/pack/releases/download/v3/pack.zip
resource-pack-sha1=2c3d0e1a4b5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b
require-resource-pack=false
resource-pack-prompt={"text":"This server uses a small texture pack for its custom items."}
  • require-resource-pack=true kicks a player who declines; leave it false unless the pack is needed for gameplay.
  • resource-pack-prompt is the text shown in the download dialog, in Minecraft’s JSON text format.

Restart the server. Players who join get the prompt, and the pack downloads before they see the world.

Checking it works

Join with a fresh client: the download dialog appears, and after accepting, the custom textures show. If the dialog never appears, the URL is not a direct link, or the client has the pack cached under the same hash. If the download fails, open the URL in a browser: it should save a zip, not show a page.

Notes

  • Bedrock players through crossplay do not receive Java resource packs. Geyser can translate some packs with extra setup, but plan on Java players only.
  • Modpacks ship their own client files; a resource pack on top works the same way.
  • 1.20.3 and newer allow several packs (resource-pack accepts one; plugins such as ResourcePackManager handle lists). One pack is enough for most servers.

Something missing or wrong? Tell us or ask in Discord.