Every item, block and mob in Minecraft is painted with small pixel images. Good textures make an add-on feel like it belongs in the game. This guide explains where texture files go, how the game finds them, and how to paint pixel art that looks right next to vanilla.
The quick way: GodCraft
GodCraft has a pixel editor built in, and it saves every texture to the right place with the right short name.
- Open the Workshop and open any item, block or mob.
- Tap the texture to open the pixel editor.
- Start from a vanilla texture and recolor it, or draw from scratch.
- Save. When you export, the PNG files and the texture lists are written for you.
Starting from a vanilla texture is a great trick: you get Minecraft's shading style for free and only change the colors and shape.
By hand
The basics: 16x16 PNG
Minecraft's textures are PNG images. Items and blocks are usually 16x16 pixels. That is tiny, so every single pixel matters.
- Use a pixel art program, not a normal photo editor that blurs edges. Turn off anti-aliasing and use a 1-pixel pencil.
- Save as PNG with transparency (RGBA). JPG does not keep transparent pixels and adds blurry noise.
- File names should be lowercase with underscores, like
ruby_sword.png.
Where textures go
Textures live in your resource pack (RP):
| Kind | Folder | Example |
|---|---|---|
| Items | RP/textures/items/ | ruby.png |
| Blocks | RP/textures/blocks/ | ruby_block.png |
| Mob skins | RP/textures/entity/ | critter.png |
Mob skins are not 16x16: their size matches the texture_width and texture_height of the model, such as 64x32. See Your first custom mob.
Short names: item_texture.json and terrain_texture.json
Items and blocks do not point at a PNG directly. They use a short name, and two list files turn short names into paths. Note that the paths have no .png at the end.
For items:
{
"resource_pack_name": "myname",
"texture_name": "atlas.items",
"texture_data": {
"ruby": {
"textures": "textures/items/ruby"
}
}
}The item then uses the short name ruby in its icon component. See Your first custom item.
For blocks:
{
"resource_pack_name": "myname",
"texture_name": "atlas.terrain",
"texture_data": {
"ruby_block": {
"textures": "textures/blocks/ruby_block"
}
}
}The block then uses ruby_block in minecraft:material_instances. See Your first custom block.
One file, many textures
You only ever have one item_texture.json and one terrain_texture.json per pack. Add every new texture as another entry inside texture_data.
Transparency
Fully transparent pixels (alpha 0) are how you make shapes that are not squares, like swords, flowers and glass panes.
- Items: the empty space around the item should be fully transparent. Partly see-through pixels work too.
- Blocks: what you see depends on the block's
render_methodinmaterial_instances:opaque: no transparency at all. Transparent pixels show up as solid color. Best for stone, ores and planks.alpha_test: each pixel is either fully shown or fully hidden. Good for leaves, flowers and plain glass.blend: allows half see-through pixels, like stained glass.
- Mobs: use the
entity_alphatestmaterial in the client entity to let fully transparent pixels disappear.
Higher resolutions
You can use 32x32, 64x64 or bigger textures. Keep these rules in mind:
- Keep the image square for items and blocks, and use a power of two (16, 32, 64, 128).
- Keep the same size across a whole set so things look consistent. A 64x64 sword next to 16x16 vanilla swords can look out of place.
- Bigger textures use more memory, especially on phones. 16x16 is the classic Minecraft look and the safest choice.
Animated block textures (flipbooks)
Blocks like sea lanterns, magma and lava are animated. They use a flipbook: one tall image with all the frames stacked on top of each other.
- Make a PNG 16 pixels wide and 16 times the frame count tall. Four frames means 16x64.
- Add it to
terrain_texture.jsonlike a normal block texture, for example asglowing_ore. - Create
flipbook_textures.jsonto tell the game it is animated:
[
{
"flipbook_texture": "textures/blocks/glowing_ore",
"atlas_tile": "glowing_ore",
"ticks_per_frame": 8
}
]flipbook_textureis the path to the tall PNG, without.png.atlas_tileis the short name fromterrain_texture.json.ticks_per_frameis how long each frame stays. There are 20 ticks in a second, so 8 means each frame shows for 0.4 seconds.- Optional
framesis a list of frame numbers to play in a custom order, starting from 0. Vanilla prismarine uses it to show some frames longer than others. - Optional
blend_framesset tofalsemakes frames switch sharply instead of fading into each other.
Note
Flipbooks are for blocks. Item icons do not use flipbook_textures.json.
Tips for good pixel art
Use a small palette
Pick 3 to 5 shades of one color, from dark to light, and stick to them. Too many colors make 16x16 art look noisy. Vanilla textures often use only a handful of colors per material.
- Make dark shades a bit more saturated or shift them slightly toward blue or purple. Make light shades shift toward yellow. This "hue shifting" looks far more alive than adding plain black or white.
- Borrow palettes from vanilla textures so your add-on matches the game.
Light comes from the top-left
Minecraft items and many blocks are shaded as if light shines from the top-left:
- Fill the shape with your middle shade.
- Put the lightest shade along the top and left edges.
- Put the darkest shade along the bottom and right edges.
- Add a few brightest pixels as a highlight, like the shine on a gem.
Outlines and readability
- Item icons usually have a darker outline so they stand out on any inventory background.
- Avoid single lonely pixels of a random color: they read as noise at small sizes.
- Zoom out often. Your texture will be seen tiny on screen, so check it at 100% size.
Blocks must tile
Block textures repeat next to each other. Make sure the left edge flows into the right edge and the top into the bottom, or you will see a grid pattern on big walls. Avoid a strong border on every side unless you want a tile look, like bricks.
Troubleshooting textures
Purple and black checkerboard
The game could not find the texture. Check the short name is spelled the same everywhere, and the path in the texture list matches the real file without .png.
- Texture looks blurry. The PNG was resized with smoothing. Redraw at the real size or resize with "nearest neighbor".
- Transparent parts show as black or white on a block. Change the block's
render_methodtoalpha_testorblend. - Changes do not show up. Make sure you exported the new version and reloaded the world. See Troubleshooting.