Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Chapter 28 — Resource Pack Fundamentals

What You’ll Build

Way back in Chapter 7 you learned a slogan: resource packs change appearance; data packs change behavior. Every chapter since then has been about the behavior half: commands, loot tables, components, all of it living inside the data/ folder of your mypack pack. This chapter finally opens the other door. A resource pack is the part of Minecraft that controls how the game looks and sounds: the textures painted on blocks and items, the 3D models, the sound effects, the languages and on-screen text. It changes none of the rules; it only changes the skin over them.

By the end of this chapter you’ll have built a small, working resource pack that sits next to your data pack, with its own marker file and its own folder for art. You’ll write a resource-pack pack.mcmeta (the same kind of marker file you wrote in Chapter 9, used for the other kind of pack), lay out the assets/<namespace>/ folder tree, learn the name of every standard art folder inside it (textures/, models/, items/, lang/, sounds/), and bundle the whole pack with your test world so it loads automatically. You won’t draw any textures yet; that’s the next chapter. Here you’re building the empty rooms, and Chapters 29 and 30 move the furniture in.

This chapter assumes the pack.mcmeta marker file and the folder hierarchy from Chapter 9, the namespace and snake_case naming rules from Chapter 8, and the test world you’ve used since Chapter 1. It does not assume anything from the advanced parts of the book. If you’ve read Part III, you’re ready.

A resource pack is the twin of a data pack

You already know one half of this picture cold. A data pack is a folder with a pack.mcmeta marker file and a data/ folder full of JSON files that configure or add behavior (recipes, loot tables, functions, tags). A resource pack is its mirror image: a folder with a pack.mcmeta marker file and an assets/ folder full of files that change appearance and sound. As the wiki puts it, the resource pack system “provides a way for players to customize textures, models, music, sounds, languages, texts such as the End Poem, splashes, credits, and fonts without any code modification.”

That last phrase, without any code modification, is the whole point. A resource pack only swaps out what things look like and sound like. It can’t add a recipe or summon a mob. That’s why the two systems are separate folders with separate jobs, and why the same custom item often needs both: a data pack to give it its behavior, and a resource pack to give it a custom look. (You’ll see exactly that team-up in Chapter 29.)

Modern Minecraft Older tutorials sometimes call resource packs “texture packs.” That was their name years ago, back when they really did only hold textures. They do far more now (models, sounds, languages, fonts), so the modern name is resource pack. If a guide says “texture pack,” it means this same thing.

Here’s the side-by-side you’re aiming for by the end of the chapter. Two folders, two jobs:

mypack/                         <- your DATA pack (behavior), from Chapter 9
  pack.mcmeta
  data/
    mypack/
      function/
      recipe/
      ...

myassets/                       <- your RESOURCE pack (appearance), built this chapter
  pack.mcmeta
  assets/
    mypack/
      textures/
      models/
      items/
      lang/
      sounds/

Notice the symmetry. The data pack has data/; the resource pack has assets/. Each has its own pack.mcmeta. Each uses your mypack namespace inside. They are two completely separate packs that happen to work as a team, and Minecraft loads them through two completely separate menus, which is a detail we’ll come back to so it doesn’t trip you up.

The marker file: the same pack.mcmeta you already know

Here is the genuinely good news: the file that marks a resource pack is the exact same kind of file you wrote in Chapter 9 to mark your data pack. The wiki is blunt about it: the pack.mcmeta file “is used to define metadata of a resource pack or data pack. The presence of this file identifies a directory or ZIP archive file as a resource pack or data pack.” One file format, two pack types.

It even uses the same version mechanism you learned in Chapter 9. Remember min_format and max_format, the two numbers that say which range of Minecraft versions your pack is built for? Those work identically here. The wiki confirms the change applies to both kinds: “Since 25w31a, the pack format has been changed to work with min_format and max_format fields instead of the previous pack_format field. Both data packs and resource packs have this change.”

So your resource pack’s marker file looks just like your data pack’s marker file. Create the folder myassets (anywhere convenient for now; we’ll move it into the world in a moment), and inside it make this file:

myassets/pack.mcmeta

{
  "pack": {
    "description": "My first resource pack",
    "min_format": 88,
    "max_format": 88
  }
}

That’s a complete, valid resource-pack marker. The three pieces should look familiar from Chapter 9:

  • description — the text shown when you hover over the pack’s name in the menu. Make it whatever you like.
  • min_format / max_format — the version range. We’re using 88 for both: the resource pack format for Minecraft 26.2. Careful here — resource packs and data packs keep separate format numbers. Your data pack said 107 in Chapter 9; this 88 is the resource-pack counterpart for the very same game version, and the two drift apart as versions pass. A single number like 88 means major version 88, and you can also write a pair like [88, 0] for major-and-minor.

Modern Minecraft Just like with data packs, older resource-pack tutorials use a single pack_format field instead of min_format/max_format. The wiki notes those legacy fields (pack_format, supported_formats) are only needed when a pack also supports old versions (specifically resource pack format below 65) and otherwise “must be absent.” For a brand-new pack aimed at current Minecraft, use min_format/max_format and leave the old field out, exactly as you did in Chapter 9.

This pack.mcmeta is, importantly, the only mandatory file in a resource pack. The wiki’s directory listing marks it plainly: “Metadata of the resource pack. This is the only mandatory file.” A resource pack with nothing but a pack.mcmeta is a perfectly valid (if empty) resource pack: the game will load it without complaint. Everything else you add is optional art.

One optional extra: pack.png

There’s one more file worth knowing about, and it’s optional: pack.png. It’s “the picture to display next to the resource pack in the ‘Select Resource Packs’ screen”: basically the pack’s icon/thumbnail. It goes in the pack’s root folder, right beside pack.mcmeta. If you skip it, your pack just shows a default image. We’ll add one in the Practice section.

The assets/ folder: where the art lives

Inside your resource pack, all the actual appearance files live under one top-level folder called assets/. This is the resource pack’s version of the data pack’s data/ folder: same idea, different name. And just like data/, the first thing inside assets/ is a namespace folder.

You already know namespaces from Chapter 8: minecraft: is the game’s own namespace, and your pack gets its own (mypack). The wiki spells out the rule for resource packs: inside assets/ is a “Directory of the namespace to use… More than one directory for different namespaces may exist under the assets directory. The minecraft namespace is used for vanilla files and can be used to override them.” So assets/minecraft/ is how you’d repaint a vanilla texture, and assets/mypack/ is where your own new art goes.

Under the Hood (skippable) This is the same trick you learned in Chapter 7: vanilla is just a pack. The game’s own textures, models, and sounds live in a built-in resource pack under the minecraft namespace. When you put a file at the same path under assets/minecraft/ in your pack, yours loads on top and replaces the built-in one. New content under assets/mypack/ simply adds rather than replaces.

Now make your namespace folder and the standard art subfolders inside it. Your tree should look like this:

myassets/
  pack.mcmeta
  assets/
    mypack/
      textures/
      models/
      items/
      lang/
      sounds/

Each of those subfolders has a defined job. Here are the ones a data-pack author cares about, taken straight from the wiki’s resource pack directory structure:

  • textures/.png image files “used as textures for blocks, items, mobs, etc.” This is the raw pixel art.
  • models/.json files “defining three-dimensional shapes used to render blocks and items.”
  • items/.json files “controlling the rendering of items.” This is the modern item-model layer that decides which model an item shows (you’ll meet it properly in Chapter 29).
  • lang/<language code>.json files “containing translations of text.” This is how you give custom names their wording (Chapter 30).
  • sounds/.ogg audio files “that provide audio such as music and sound effects.” Custom sounds also need a sounds.json file, which you’ll meet in Chapter 30.

The wiki lists several more subfolders too: blockstates/ (which model each block state uses), font/ (font providers), atlases/, particles/, and others. You won’t need those for the content packs this book builds, so we’ll leave them named-but-unopened.

Try It! You don’t have to create all of these folders, or any of them: empty folders hold no art and the game ignores them. But making them now gives you labeled drawers to drop files into when Chapters 29 and 30 ask you to. Think of this step as setting out the empty shelves.

Notice the names are singular for some folders and not others: textures, models, lang, sounds, but items. Copy the spelling from the tree above exactly; resource packs are just as picky about folder names as data packs are (remember the singular function/recipe lesson from Chapter 9).

Bundling the resource pack with your world

You now have a complete (if empty) resource pack. The last job is getting Minecraft to use it. There are a few ways to load a resource pack, and the simplest one for a pack that travels with a specific world is to bundle it into the world itself.

The wiki calls this a preloaded resource pack: “A ZIP archive resource pack can be bundled with a world by placing it in the world directory under the name resources.zip. When playing the world, that resource pack appears as the default pack, right above the default resource pack.” In plain terms: zip up your resource pack, rename the zip to exactly resources.zip, and drop it in your test world’s folder. From then on, anyone who plays that world gets your pack automatically.

Here’s the step-by-step:

  1. Zip the contents of myassets. The zip must contain pack.mcmeta and the assets/ folder at its top level, not a myassets/ folder wrapping them. (This is the same gotcha as zipping a data pack: the marker file has to be at the root of the zip.)
  2. Rename the zip to resources.zip, that exact name, all lowercase.
  3. Put it in your test world’s directory, right next to the world’s datapacks/ folder. That’s the same saves/<your world>/ folder you’ve been dropping data packs into since Chapter 9.
  4. Open the world. Minecraft offers the bundled pack; accept it, and your resource pack is live.

saves/<your test world>/resources.zip

Modern Minecraft One quirk the wiki flags: a preloaded resources.zip “is, however, not distributed to other players connecting via LAN.” It loads for you and travels with the world file, but it isn’t auto-pushed to friends who join your LAN game — they’d need their own copy. For solo testing, which is all you need here, that doesn’t matter.

If you’d rather not zip anything while you’re still editing, there’s a second route through the menu, and it’s the one to understand because it reveals an important difference from data packs.

Resource packs have their own enable list

Data packs are turned on with the /datapack command and the data pack list. Resource packs have a completely separate menu instead. The wiki describes it: resource packs are managed “from the options, where they can be moved between ‘Available’ (disabled) and ‘Selected’ (enabled), and reordered.” That’s the Select Resource Packs screen, reached from Options → Resource Packs in the main menu (or by dropping a pack folder/zip onto that screen, which copies it in for you).

Figure (to be captured). the Select Resource Packs screen, with the world’s bundled pack showing in the “Selected” column on the right

This is the single most common point of confusion when you start, so let’s state it flatly: enabling a data pack does nothing to your resource pack, and vice versa. They are two separate on/off lists. If your custom art isn’t showing up, the first thing to check is that the resource pack is enabled in the resource pack menu, not the data pack list.

Under the Hood (skippable) The order matters on that Selected list. The wiki notes packs “load their assets based on the order they appear in… The bottom-most pack loads first, then each pack above it replaces or merges loaded assets with ones it contains.” So a pack higher in the list wins when two packs touch the same file. The vanilla default pack sits at the very bottom, which is why your pack (placed above it) overrides vanilla art rather than the other way around.

Practice

These extend the myassets pack you just built. None of them require drawing a texture yet.

  1. Give your pack an icon. Find or make a small square .png image (16×16 or 64×64 is fine), name it exactly pack.png, and place it in myassets/ next to pack.mcmeta. Re-open the resource pack menu and confirm your image now shows beside the pack’s name.

  2. Add a second namespace. Make a folder assets/spooky/ alongside assets/mypack/, with an empty textures/ inside it. This proves the rule from the wiki that “more than one directory for different namespaces may exist under the assets directory.” You won’t use it yet, but it shows the assets/ folder is happy to hold art for several namespaces at once, handy when a pack grows.

  3. Rewrite the description and reload. Change the description in pack.mcmeta to something with a bit of personality, save, and re-open the resource pack menu (or press the reload-textures key). Hover the pack and confirm your new description appears. This is the resource-pack twin of the /say test you did in Chapter 9: proof the marker file is being read.

Try It! Since the marker file is identical in shape to your data pack’s, open both pack.mcmeta files side by side: mypack/pack.mcmeta and myassets/pack.mcmeta. The only difference is the description text. That sameness is the whole lesson of this chapter: one marker file, two kinds of pack.

What Can Go Wrong

My resource pack doesn’t appear in the menu at all. Almost always this means the pack.mcmeta isn’t where the game expects it. Remember it is “the only mandatory file.” If it’s missing, misnamed (it’s pack.mcmeta, not pack.mcmeta.txt and not packmeta), or buried one folder too deep, the game doesn’t recognize the folder as a pack. If you zipped it, make sure pack.mcmeta is at the top level of the zip, not inside a wrapper folder.

The pack appears but shows an “incompatible” warning. That’s the format number. The wiki explains: “If the format number in a pack’s pack.mcmeta file is higher than the one the game supports, the pack appears as ‘incompatible.’” You’re running a different Minecraft version than your min_format/max_format is built for. Check your game’s actual pack format (press F3 + V in-game to read it) and set min_format/max_format to match. We used 88, the resource-pack format for 26.2, so a different game version wants a different number.

I enabled my data pack but my custom look still isn’t showing. This is the separate-lists trap. Turning on a data pack with /datapack does nothing for your resource pack. Open Options → Resource Packs and make sure myassets is in the Selected column, not just sitting in Available. Appearance and behavior live in two different on/off menus.

What You Know Now

You’ve crossed into Part VIII, the visual side of data pack work. You now know that a resource pack is the appearance-and-sound twin of a data pack: same kind of pack.mcmeta marker file (with the same min_format/max_format mechanism from Chapter 9), but an assets/ folder instead of data/. You can lay out assets/<namespace>/ and name what each standard subfolder is for: textures/, models/, items/, lang/, sounds/. You can bundle a pack with a world as resources.zip, and you know resource packs are enabled in their own separate menu, not the data pack list.

You can now build: an empty-but-valid resource pack that loads alongside your data pack, ready to be filled. In Chapter 29 you’ll drop a custom item model and texture into the models/, items/, and textures/ folders you just made. In Chapter 30 you’ll add custom sounds (sounds/ + sounds.json) and custom wording (lang/). The shelves are built; next we stock them.