ᴅɪꜱᴄᴏᴜɴᴛꜱ ꜰʀᴇᴇ ꜱᴇʀᴠᴇʀ ᴛᴏᴏʟꜱ ᴀꜰꜰɪʟɪᴀᴛᴇꜱ ꜱᴇᴛᴜᴘꜱ ᴍᴏᴅᴇʟꜱ ʙᴜɪʟᴅꜱ ᴏꜰꜰᴇʀꜱ ᴀ/ʙ ᴛᴇꜱᴛɪɴɢ ᴅᴇᴠᴇʟᴏᴘᴍᴇɴᴛ ᴍᴀʀᴋᴇᴛɪɴɢ

Minecraft does not draw the hotbar, hearts, or inventory from one image. Java composites screens from sprite sheets (or, before 1.20.2, from icons.png / widgets.png). Bedrock nine-slices shared panel and slot textures and draws the HUD from textures/ui/. That is why a Dark UI pack can restyle every chest by recoloring a handful of files — and why Bedrock has no inventory.png.

Section 01

Java 1.20.2 and newer — gui/sprites/

From 1.20.2 the HUD and widgets split into individual sprites under assets/minecraft/textures/gui/. Container backgrounds stayed in gui/container/; moving parts (progress arrows, slot ghosts) moved into sprites/container/.

Files Controls
sprites/hud/hotbar.png, hotbar_selection.png Hotbar strip and selected-slot frame
sprites/hud/heart/*.png Every heart state (full, half, poison, wither, freeze, absorption, hardcore, mount)
sprites/hud/food_*.png, armor_*.png, air*.png Hunger, armor points, air bubbles
sprites/hud/experience_bar_*.png, crosshair.png XP bar and crosshair
container/inventory.png, generic_54.png, furnace / anvil / villager sheets Full container backgrounds (still 256×256)
sprites/widget/button*.png Menu buttons in idle, hover, and disabled states

Target pack_format 18 or higher if you write sprites. Older clients ignore gui/sprites/ entirely. See resource pack format versions.

Section 02

Java 1.8.9–1.20.1 — the old atlases

Before 1.20.2 the HUD lived in two 256×256 sheets. A GUI editor can keep one source of truth (the modern sprites) and fold edits back into those atlases when you export for 1.20.1 or older.

  • gui/icons.png — crosshair, hearts, hunger, armor, air, XP bar
  • gui/widgets.png — hotbar, selection, buttons
  • gui/bars.png — boss bars (1.9+)
  • gui/container/*.png — same container sheets as today

Section 03

Bedrock — textures/ui/

Bedrock does not read Java’s inventory sheets. Restyle what the current vanilla pack actually draws:

  • hotbar_0.pnghotbar_8.png, start/end caps, selected_hotbar_slot.png
  • textures/gui/icons.png — crosshair cell only (the rest of that atlas is unused on Bedrock)
  • Hearts, hunger, armor, bubbles, XP bar under textures/ui/
  • dialog_background_opaque.png — the panel behind every container (the Dark UI lever)
  • cell_image.png — every inventory slot

Nine-slice .json sidecars define how those panels stretch. Leave nineslice_size and base_size alone unless you intend to change the layout; the editor copies them through unchanged.

Section 04

Export and install

  1. Start from a vanilla pack (or an existing GUI pack) and open the HUD / container files listed above.
  2. Recolor or paint the sprites, keeping each file’s original pixel size so vanilla layout still fits.
  3. Zip the edited files as a GUI-only Java pack (with pack.mcmeta for the version you chose) or a Bedrock .mcpack.
  4. Java: drop the zip into resourcepacks and enable it. Bedrock: open the .mcpack so it imports, then enable it under Global Resources (or the world’s packs).

Need the rest of the pack converted between editions or Java versions? Use the Resource Pack Converter after you finish the GUI.

FAQ

Questions

Where are Minecraft GUI textures stored on Java?

From 1.20.2 they live under assets/minecraft/textures/gui/sprites/. Older versions pack the HUD into icons.png and widgets.png. Container backgrounds such as inventory.png stayed in gui/container/.

Can I edit the Bedrock inventory screen as one PNG?

No. Bedrock composes chests and inventories from nine-sliced panel and slot textures (dialog_background_opaque and cell_image), not a single inventory.png. Restyle those shared files to change every container.

Will a bulk recolor erase pixels I painted by hand?

Not if you keep painted pixels on a separate layer (or in a copy of the file). Vanilla GUI sizes are fixed — if a heart sprite is no longer 9×9, it will sit in the wrong place in-game.