MC Toolkit

Guides / Building & Resources

Custom paintings and music discs without replacing the originals

Both became datapack registries, so you can add new ones instead of overwriting vanilla. Here are the two files each needs and the sizing rule paintings must follow.

The old way to get a custom painting was to overwrite paintings_kristoffer_zetterstrand.png and lose a vanilla one. Both paintings and music discs are now registries, so you add rather than replace.

Paintings need two files

A datapack entry defining the painting:

data/<namespace>/painting_variant/my_art.json
{
  "asset_id": "my_pack:my_art",
  "width": 2,
  "height": 2,
  "title": { "text": "My Art" },
  "author": { "text": "Me" }
}

And a resource pack supplying the image:

assets/my_pack/textures/painting/my_art.png

width and height are in blocks, and the texture must match that ratio. Vanilla draws 16 pixels per block, so a 2×1 painting is 32×16 — but 64×32 works just as well. Get the ratio wrong and it stretches; there is no auto-fit.

Vanilla sizes are 1×1 up to 4×4. Larger works but needs a wall to match.

Making it obtainable

Adding the variant does not put it in the game. Two routes:

  • The placement tag — add it to #minecraft:placeable so a normal painting item can randomly become it.
  • Directly — /give @p painting[entity_data={id:"minecraft:painting",variant:"my_pack:my_art"}]

Most map-makers want the second: a specific painting, not a random one.

Music discs need three

data/<namespace>/jukebox_song/my_song.json
{
  "sound_event": { "sound_id": "my_pack:music/my_song" },
  "description": { "text": "My Artist - My Song" },
  "length_in_seconds": 154,
  "comparator_output": 12
}

Plus sounds.json mapping that sound id to a file, plus the .ogg itself:

assets/my_pack/sounds.json
assets/my_pack/sounds/music/my_song.ogg

Three details matter:

  • length_in_seconds must be right. It drives when the jukebox stops — the particles, its redstone output, and the audio, which is cut off at that point. Too long means silence at the end; too short cuts the track off.
  • comparator_output is 0–15 and is what a comparator reads. Vanilla has 22 discs and only 15 values, so seven pairs already share one; pick a value none of the discs your redstone must tell apart uses.
  • Stream the ogg. "stream": true in sounds.json for anything music-length.

Then give it:

/give @p music_disc_13[jukebox_playable="my_pack:my_song"]

Any disc item works as the carrier — the component decides what plays.

Why this is better than overwriting

A pack that replaces vanilla assets conflicts with every other pack that does the same, and breaks when Mojang renames a file. Registry additions are namespaced, so two packs adding paintings coexist. It is also the only approach that survives a version bump without editing.

Build painting variants, jukebox songs, totems and chat emoji into one ready resource pack zip with the Custom Content Pack Makers.

Custom Content Pack Makers →

More guides

Browse all →