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 bargui/widgets.png— hotbar, selection, buttonsgui/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.png…hotbar_8.png, start/end caps,selected_hotbar_slot.pngtextures/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
- Start from a vanilla pack (or an existing GUI pack) and open the HUD / container files listed above.
- Recolor or paint the sprites, keeping each file’s original pixel size so vanilla layout still fits.
- Zip the edited files as a GUI-only Java pack (with
pack.mcmetafor the version you chose) or a Bedrock.mcpack. - Java: drop the zip into
resourcepacksand enable it. Bedrock: open the.mcpackso 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.