Combine Resource Packs Correctly

Minecraft

5 min readAdvancedLast updated Oct 29, 2026

A server can only send one resource pack (two or more only on 1.20.3+, and plugins often still need one). When you want several packs (a texture pack, custom item models, a GUI pack, sounds), you merge them into a single zip. Copying folders on top of each other seems to work, but silently breaks anything two packs both define.

How merging actually works

Every file in a pack has a path, like assets/minecraft/textures/block/stone.png. When two packs contain the same path, only one file can win.

File type What happens on a clash What you must do
Textures (.png), sounds (.ogg) One replaces the other. Pick which pack wins: usually the more specific one.
pack.mcmeta, pack.png Only one is used. Keep one, set the right pack_format.
Item model files (assets/minecraft/models/item/*.json, and assets/minecraft/items/*.json on 1.21.4+) One replaces the other, and every custom model in the losing file disappears. Merge the contents (see below).
sounds.json One replaces the other: all the losing pack's custom sounds stop playing. Merge the JSON objects.
Language files (lang/en_us.json) One replaces the other. Merge the JSON objects.
Atlas files (atlases/*.json, 1.19.3+) One replaces the other: textures outside the default folders go missing. Merge the sources lists.
Fonts (font/default.json) One replaces the other: custom GUI glyphs and emojis vanish. Merge the providers lists, and make sure no two use the same character.

Rule of thumb: images and sounds pick a winner; JSON files get merged.

Step by step

  1. Back up all the packs, and write down the order of importance (the pack whose textures should win goes last).
  2. Make a new folder, e.g. ServerPack/.
  3. Copy the least important pack in first, then each next pack on top. When your file manager asks about replacing, note every JSON file it wants to replace; those need merging. Let images and sounds be replaced.
  4. For each clashing JSON file, open both versions and combine them:
    • Item models (1.21.3 and older): combine the overrides arrays and keep them sorted by custom_model_data, lowest first. Two packs using the same number for different items is a real conflict: change one pack's numbers (and the items that use them).

      {
        "parent": "minecraft:item/handheld",
        "textures": { "layer0": "minecraft:item/diamond_sword" },
        "overrides": [
          { "predicate": { "custom_model_data": 1001 }, "model": "packa:item/ruby_sword" },
          { "predicate": { "custom_model_data": 2001 }, "model": "packb:item/frost_blade" }
        ]
      }
      
    • Item definitions (1.21.4+): custom models live in assets/<namespace>/items/<item>.json with a range_dispatch or select on custom model data. Merge the entries/cases lists the same way.

    • sounds.json / lang files: they're objects of named entries. Copy every entry from both into one object; if both define the same key, keep one.

    • Atlases: combine the sources lists.

    • Fonts: combine the providers lists.

  5. Write one pack.mcmeta with the pack_format for your server version.
  6. Zip the contents of ServerPack/ (so pack.mcmeta is at the top of the zip).
  7. Validate the JSON: a single missing comma breaks the whole file. Paste each edited file into a JSON validator, or open the pack in a game client and check logs/latest.log for Couldn't parse errors.
  8. Test in your own game, then host it.

Avoid clashes in the first place

  • Use your own namespace. Put custom models and textures under assets/yourpack/... instead of assets/minecraft/.... Only the small "hook" files (the vanilla item model or item definition that points to your model) need to live in minecraft.
  • Reserve number ranges for custom model data: e.g. pack A uses 1000–1999, pack B 2000–2999.
  • Keep a source folder for each pack and rebuild the merged zip from them, instead of editing the merged copy by hand each time.

Let a plugin do the merging

If you run ItemsAdder, Nexo or Oraxen, they build the server pack themselves and can import other packs into it: drop the other pack into the plugin's merge/import folder (see that plugin's documentation) and reload. They handle the model and font merging for you, and many custom-item plugins conflict with a hand-set resource-pack anyway.

Optimise the result

Large merged packs download slowly. PackSquash compresses PNGs, OGGs and JSON losslessly and can cut a pack's size by half or more. Run it on the final merged pack, then recalculate the SHA-1.

Troubleshooting

Symptom Likely cause
Some custom items show as the plain vanilla item Their model file lost a clash. Merge the overrides / item-definition entries.
Pink-and-black checkered textures A model points to a texture path that's missing, often moved during merging, or missing from an atlas.
Custom sounds silent sounds.json was replaced instead of merged.
GUI icons or emojis missing font/default.json was replaced instead of merged, or two packs used the same character.
Whole pack fails to load Invalid JSON somewhere, or pack.mcmeta isn't at the top of the zip. Check the client's latest.log.

Article information

Category
Minecraft
Read time
5 minutes
Difficulty
Advanced
Last updated
Oct 29, 2026