How to Set Up a Server Resource Pack (Auto-Download)
Push a custom resource pack to players on join with auto-download. Covers hosting, SHA-1 hashing, CustomModelData, pack format versions and Bedrock limitations.
What Server Resource Packs Do
A server resource pack is a standard Minecraft resource pack that the server pushes to clients when they connect. Instead of asking players to manually download and install a pack, the server provides a URL, the client downloads it automatically, and the pack is applied on the fly. This lets you ship custom textures, sounds, models, UI tweaks, and fonts to every player without them having to do anything beyond clicking "Accept" (or nothing at all, if you force the pack).
Server resource packs are used by almost every large network. Hypixel uses them for custom menus and item textures. SMP servers use them for custom food textures, tool models, and ambient sounds. If you want your server to look and feel unique, a server resource pack is one of the most impactful things you can set up.
server.properties Settings
The core configuration lives in your server.properties file. Three lines control the resource pack behavior:
resource-pack=https://example.com/path/to/pack.zip
resource-pack-sha1=abc123def456...
require-resource-pack=false
resource-pack-prompt=Welcome! This pack adds custom textures.
resource-pack
This is a direct download URL to a .zip file. The URL must point directly to the zip, not to a webpage that contains a download button. The server sends this URL to the client, and the Minecraft client's HTTP downloader fetches it. The URL must be accessible from the player's machine, which means it needs to be a public URL (not localhost, not behind authentication).
resource-pack-sha1
A SHA-1 hash of the zip file. The client uses this to check whether it already has the correct version cached. If the hash matches, the client skips the download entirely, which means returning players load in faster. If you update your pack but forget to update the hash, players will keep using the old cached version. Generate the hash with:
# Linux / macOS
sha1sum your-pack.zip
# Windows PowerShell
Get-FileHash your-pack.zip -Algorithm SHA1
Copy the hex string (40 characters) into server.properties. Always update the hash whenever you update the pack file.
require-resource-pack
When set to true, players who decline the pack are disconnected from the server. This is useful if your server relies heavily on custom textures for gameplay (custom items, custom menus) and would be confusing without them. When set to false (the default), players get a prompt to accept or decline, and they can play either way.
resource-pack-prompt
Added in 1.17, this lets you set a custom message that appears in the pack download prompt. Use it to explain why the player should accept, "This pack adds custom item textures and sounds" is more compelling than the default generic prompt.
Hosting the Pack
The biggest challenge with server resource packs is hosting. You need a direct download URL that serves the raw zip file with the correct MIME type. Here are your options, from simplest to most robust:
MC-Packs.net
MC-Packs.net is a free hosting service specifically designed for Minecraft server resource packs. Upload your zip, get a permanent direct URL. It is the easiest option and works well for packs under 100 MB. The downside is that you depend on a third-party service, if it goes down, your players cannot download the pack.
Dropbox Direct Link Trick
Upload your pack to Dropbox, get the sharing link, and change the dl=0 parameter to dl=1. This converts the Dropbox preview page into a direct download link. Example:
# Original sharing link
https://www.dropbox.com/s/abc123/pack.zip?dl=0
# Direct download link
https://www.dropbox.com/s/abc123/pack.zip?dl=1
This works reliably, but Dropbox has bandwidth limits on free accounts. If thousands of players download your pack simultaneously, Dropbox may throttle the link.
Self-Hosted (Web Server or CDN)
For maximum control and reliability, host the pack on your own web server or a CDN. If your Minecraft server has a web panel (like Pterodactyl), you can often serve files from a public web directory. Alternatively, upload the zip to a CDN like Cloudflare R2, AWS S3, or Backblaze B2 (all have free tiers). This gives you full control over bandwidth, uptime, and caching.
Pack Size Considerations
The Minecraft client limits resource pack downloads to approximately 250 MB (this was increased from 50 MB in 1.18). However, large packs mean long download times, a 100 MB pack on a slow connection can take over a minute to download, during which the player is staring at a loading screen. Best practices:
- Compress textures using tools like OptiPNG or TinyPNG before packaging.
- Only include textures and assets you actually use. Do not ship a 200 MB pack when you only customized 10 items.
- Use OGG audio at reasonable bitrates (96-128 kbps) for custom sounds.
- Test the download experience on a slow connection to see what your players will experience.
CustomModelData for Custom Items
The most powerful use of server resource packs is creating custom item models using the CustomModelData NBT tag (renamed to custom_model_data in 1.21.4+ component format). The concept: you give a vanilla item (like a diamond sword) a custom model data value, and in the resource pack you define a model override that replaces the texture when that value is present. The vanilla item still functions normally, but it looks completely different.
In the resource pack JSON (assets/minecraft/models/item/diamond_sword.json):
{
"parent": "minecraft:item/handheld",
"textures": {
"layer0": "minecraft:item/diamond_sword"
},
"overrides": [
{"predicate": {"custom_model_data": 1001}, "model": "custom:fire_sword"},
{"predicate": {"custom_model_data": 1002}, "model": "custom:ice_sword"}
]
}
Plugins like ItemsAdder and Oraxen automate this entire process, they let you define custom items with custom textures in YAML config files and automatically generate the resource pack. If you plan to use a lot of custom items, these plugins save enormous amounts of manual work.
Pack Format Versions
Every Minecraft version expects a specific pack format number in the pack.mcmeta file. Using the wrong format number causes a warning in the client (the pack still loads, but it shows as "incompatible"). Key versions:
| Minecraft Version | Pack Format |
|---|---|
| 1.16.x | 6 |
| 1.17.x | 7 |
| 1.18.x | 8-9 |
| 1.19.x | 9-15 |
| 1.20.x | 15-22 |
| 1.21.x | 34-46 |
If your server supports multiple versions through ViaVersion, you need to choose a pack format. The client uses the supported_formats field in pack.mcmeta (added in 1.20.2) to accept a range of formats, which helps with cross-version support.
Bedrock Clients and Geyser
If you run a crossplay server with Geyser, be aware that Bedrock clients do not support Java server resource packs. Geyser has a resource pack conversion system (GeyserMC/PackConverter), but it only handles simple texture replacements, complex models and custom sounds do not convert. For servers that rely heavily on custom visuals, this is a significant limitation to plan for. You may need to maintain a separate Bedrock-compatible pack or accept that Bedrock players will see vanilla textures.
For the rest of your server setup, see our server setup guide and optimization guide to make sure the technical foundation is solid before layering on custom content.
See these features in action: Astroworld MC runs economy survival with custom tab, scoreboard, join messages and crossplay. IP: play.astroworldmc.com