From 937ec64ee621d5943306fe3118e4fd487a62a144 Mon Sep 17 00:00:00 2001
From: Perttu Ahola <celeron55@gmail.com>
Date: Thu, 26 Jul 2012 04:05:39 +0300
Subject: [PATCH] Make wools colorable by any dye (not just the ones in the dye
 mod)

---
 mods/dye/README.txt |  2 ++
 mods/wool/init.lua  | 48 ++++++++++++++++++++++++++++-----------------
 2 files changed, 32 insertions(+), 18 deletions(-)

diff --git a/mods/dye/README.txt b/mods/dye/README.txt
index c7ae077..d414c2c 100644
--- a/mods/dye/README.txt
+++ b/mods/dye/README.txt
@@ -1,6 +1,8 @@
 Minetest 0.4 mod: dye
 ======================
 
+See init.lua for documentation.
+
 License of source code and media files:
 ---------------------------------------
 Copyright (C) 2012 Perttu Ahola (celeron55) <celeron55@gmail.com>
diff --git a/mods/wool/init.lua b/mods/wool/init.lua
index c0b4467..44ea29e 100644
--- a/mods/wool/init.lua
+++ b/mods/wool/init.lua
@@ -5,40 +5,52 @@ minetest.register_alias("wool:dark_blue", "wool:blue")
 minetest.register_alias("wool:gold", "wool:yellow")
 
 local wool = {}
+-- This uses a trick: you can first define the recipes using all of the base
+-- colors, and then some recipes using more specific colors for a few non-base
+-- colors available. When crafting, the last recipes will be checked first.
 wool.dyes = {
-	{"white",      "White"},
-	{"grey",       "Grey"},
-	{"dark_grey",  "Dark Grey"},
-	{"black",      "Black"},
-	{"violet",     "Violet"},
-	{"blue",       "Blue"},
-	{"cyan",       "Cyan"},
-	{"dark_green", "Dark Green"},
-	{"green",      "Green"},
-	{"yellow",     "Yellow"},
-	{"brown",      "Brown"},
-	{"orange",     "Orange"},
-	{"red",        "Red"},
-	{"magenta",    "Magenta"},
-	{"pink",       "Pink"},
+	{"white",      "White",      nil},
+	{"grey",       "Grey",       "basecolor_grey"},
+	{"black",      "Black",      "basecolor_black"},
+	{"red",        "Red",        "basecolor_red"},
+	{"yellow",     "Yellow",     "basecolor_yellow"},
+	{"green",      "Green",      "basecolor_green"},
+	{"cyan",       "Cyan",       "basecolor_cyan"},
+	{"blue",       "Blue",       "basecolor_blue"},
+	{"magenta",    "Magenta",    "basecolor_magenta"},
+	{"orange",     "Orange",     "excolor_orange"},
+	{"violet",     "Violet",     "excolor_violet"},
+	{"brown",      "Brown",      "unicolor_dark_orange"},
+	{"pink",       "Pink",       "unicolor_light_red"},
+	{"dark_grey",  "Dark Grey",  "unicolor_darkgrey"},
+	{"dark_green", "Dark Green", "unicolor_dark_green"},
 }
 
 for _, row in ipairs(wool.dyes) do
 	local name = row[1]
 	local desc = row[2]
+	local craft_color_group = row[3]
 	-- Node Definition
 	minetest.register_node("wool:"..name, {
 		description = desc.." Wool",
 		tile_images = {"wool_"..name..".png"},
 		groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,flammable=3},
 	})
-	if name ~= "white" then
+	if craft_color_group then
 		-- Crafting from dye and white wool
 		minetest.register_craft({
+			output = 'wool:'..name..' 16',
+			recipe = {
+				{'group:'..craft_color_group},
+				{'wool:white'},
+			}
+		})
+		-- Shapeless group recipes don't currently work
+		--[[minetest.register_craft({
 			type = "shapeless",
 			output = 'wool:'..name..' 16',
-			recipe = {'dye:'..name, 'wool:white'},
-		})
+			recipe = {'group:'..craft_color_group, 'wool:white'},
+		})--]]
 	end
 end