pyMCdyes

Explore 4 million+ leather dye recipes for Minecraft


Project maintained by pudquick Hosted on GitHub Pages

The In-Depth Study of Leather Dyeing


As of development build 12w34a, Minecraft includes the ability to dye leather armor using the 16 different dyes that were already present in the game.

The color your armor receives is calculated as an average of the RGB color values of the dyes you apply in the crafting grid.

For example, the following combination:

... results in greenish-brown boots with a color of: #72723F (Red: 114, Green: 114, Blue: 63)


The Math Bit

The average color above is the sum of the colors, divided by the number of colors:

Armor that has been dyed already can also be re-dyed - with its current color becoming part of the average. The color of the armor acts like an additional dye placed into the crafting grid.

Take this example:

which gives us this math (averaging 4 colors - 3 dyes + the armor's old color):

... which results in our new "Clam shell" color boots: #CFAFA2 (Red: 207, Green: 175, Blue: 162)


The Dream of Available Colors

If every RGB combination were possible with dyeing (reachable values of 0 to 255 for R/G/B), there would be 16,777,216 possible (256*256*256) dyed leather armor colors.

However, when you average colors, you can't end up with an R/G/B lower (or greater) than the colors you put into it. While Bone Meal dye is able to provide us with the high value of 255 for R/G/B, the darkest dye we have available to us is Ink Sac dye (#191919 - Red: 25, Green: 25, Blue: 25).

With a range of values now only from 25 to 255, it would appear we're reduced to 12,326,391 possible (231*231*231) colors ... if we ignored the other limits.


The Theory of Available Colors

It might be more useful to think of applying a dye color to an item as slowly "pulling" the color of the item towards the dye color. Repeatedly applying the same color of dye over and over again will pull it closer and closer to the actual dye color until, finally, they end up the same.

When you apply two different colors, you slowly pull the item towards a color that's equally distant from the two dyes you're applying. If you were to draw a line between those two colors in 3D RGB color space, you'd be pulling your item to a point that lies exactly 50% of the way between the two dyes.

Now expand that idea.

Plot out all 16 of the dye colors in RGB color space. Draw the 15 lines from each point to every other point. It'll look like a mess, but you'll end up with a shape. It'll be a shape with 12 outer points (as the colors for Gray Dye, Light Gray Dye, Cocoa Beans dye, and Cactus Green dye will be contained deep within the shape).


(Yes, I did chart this out in Minecraft as a level - available if interested)

This shape defines (mostly)* every single TRULY POSSIBLE color.

Think of the shape as all the possible points you could pull a leather armor item's color towards. Applying a combination of dyes? Then you're only pulling it towards a point somewhere in-between the individual dyes (deeper within the shape). The 12 outer points represent the farthest you can pull an item's color in any individual direction.

The number of RGB points that are contained by this shape?    3,894,778

... That's a hell of a lot less than the 12.3 million we estimated above!

(and sadly none of those colors are anywhere near the color of diamond armor, sorry PvPers!)


The Reality of Available Colors

You may have noticed I said "(mostly)*" above.

That's because of that "rounded down to the nearest integer" bit involved with figuring out the new average color.

Because of that little bit of math, that means it's possible to generate an average color that technically falls outside of the 12 pointed shape we made above.

For example:

If you take Ink Sac dye - #191919 (Red: 25, Green: 25, Blue: 25) and averaged it with Lapis Lazuli dye - #3366CC (Red: 51, Green: 102, Blue: 204), your average color of the 2 comes out as:

... a dark "Venice Blue" color of #263F72 (Red: 38, Green: 63, Blue: 114).

This color does NOT fall within our 12 pointed shape - because the true average is what's contained in the shape: Red: 38, Green: 63.5, Blue: 114.5. Those 0.5 point differences in Green and Blue are the difference between being inside and being outside our "all possible" color boundary.

As a result of this, the FACTUALLY POSSIBLE colors "leak" a bit beyond that 12 pointed shape.

... They leak enough that, so far, I've found the recipes for a total of 4,001,584 colors.

... Yes, I have the recipes. All 4,001,584 of the ones I've found so far. Want them?

If you've got python (2.6+, haven't tested on 3.x) installed on your computer, check out my pyMCdyes tool and give it a whirl. It's an interactive tool I've written to instantly show you a set of steps and dyes (not guaranteed to be the most efficient, just guaranteed to work) that you can use to get the color you want.

Enjoy!

$ python pymcdyes.py
Loading color map (FAST) ...
... Done!
Reading cached map key (SPEEDY-ISH - takes a few seconds) ...
... Level 8 of 8 ...
... Level 7 of 8 ...
... Level 6 of 8 ...
... Level 5 of 8 ...
... Level 4 of 8 ...
... Level 3 of 8 ...
... Level 2 of 8 ...
... Level 1 of 8 ...
... Validating ...
... Done!
[4,001,584 color recipes loaded]

[Enter RRGGBB hex color to find or Q to quit]: C6C6C6

Goal color: #C6C6C6 - col(r=198, g=198, b=198)
Checking ...
... FOUND!

(Apply these dye sets, in order, starting with a new leather item!)

Recipe for color:
-----------------
- [Bone Meal+Bone Meal+Bone Meal+Gray Dye+Light Gray Dye]

Recipe Verified: GOOD

[Enter RRGGBB hex color to find or Q to quit]: ABC123

Goal color: #ABC123 - col(r=171, g=193, b=35)
Checking ...
... FOUND!

(Apply these dye sets, in order, starting with a new leather item!)

Recipe for color:
-----------------
- [Ink Sac+Dandelion Yellow+Dandelion Yellow+Dandelion Yellow]
- [Lime Dye+Orange Dye+Orange Dye]
- [Lime Dye+Orange Dye]
- [Orange Dye]
- [Lime Dye]

Recipe Verified: GOOD

[Enter RRGGBB hex color to find or Q to quit]: Q