When shields have no pattern(s) applied, they use the damage value to determine color instead of the Base field in BlockEntityTag. This field is also used to track the durability of the shield, which has two effects:
Changing the durability of the shield (by taking damage or repairing it) changes the color
Crafting a new shield creates one that has lost 0 to 15 points of durability
A simple fix would be to always add the BlockEntityTag when crafting a new shield and always set the damage value to 0, and for shields without BlockEntityTag (e.g. obtained through /give), to always display their color as black.
Linked issues
is duplicated by 35
relates to 1
Comments 16
Can confirm that it works with shields obtained by give command. If you give yourself a shield with a damage value, it takes the color of that value.
I've made yellow and white shields, and each has spontaneously turned into a "black shield" with a display color that changes every time it takes a hit (melee or projectile).
Fixed in w36a per https://www.reddit.com/r/Minecraft/comments/3jd4pv/minecraft_snapshot_15w36a/cuo7igf
Quick testing confirms fix.
Could not recreate. Could you provide screenshots?
EDIT: Can confirm with what Tom Udding said. You must /give @p shield for it to work