From c3036aba004bc35b4d8ba91ed07864de2a058326 Mon Sep 17 00:00:00 2001
From: Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com>
Date: Tue, 28 Aug 2018 22:39:09 -0400
Subject: handle special case of split palette with full colors in node name
 also check for ud_param2_colorable before proceeding to airbrush also handle
 new -> old color names in split palette switching

---
 API.md   |  4 +++-
 init.lua | 36 ++++++++++++++++++++++++------------
 2 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/API.md b/API.md
index c8abd8b..bd06164 100644
--- a/API.md
+++ b/API.md
@@ -28,7 +28,9 @@ minetest.register_node("mymod:colored_node", {
 - "unifieddyes_palette_colorwallmounted.png"
 - or one of the "split" hues palettes (see below).
 
-`groups`: If your node can be colored by punching it with dye, its groups entry must contain the key ud_param2_colorable = 1, among whatever else you'd normally put there. If the node is software-controlled, as might be the case for some mesecons-digilines aware node, then this group key should be omitted.
+`groups`: If your node can be colored by using the airbrush, its groups entry must contain the key ud_param2_colorable = 1, among whatever else you'd normally put there. If the node is software-controlled, as might be the case for some mesecons-digilines aware node, then this group key should be omitted.
+
+If your node if of the kind where you need the split palette, but you need to put the *full color name* into the node name, as opposed to just the hue, then add the keys `ud_color_start` and `ud_color_end` and set them to the positions of the first and last characters of the color name (where 1 is the first character of the mod name at the start of the node name, i.e. "mymod:foo_bar_orange_baz" would have the start set to 15 and the end at 20).
 
 `on_construct`: see below.
 
diff --git a/init.lua b/init.lua
index 77d42d3..85ef525 100644
--- a/init.lua
+++ b/init.lua
@@ -665,7 +665,7 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
 		return
 	end
 
-	if not def.palette then
+	if not def.palette or not (def.groups and def.groups.ud_param2_colorable > 0) then
 		minetest.chat_send_player(player_name, "*** That node can't be colored.")
 		return
 	end
@@ -699,29 +699,41 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing)
 	end
 
 	local oldidx = node.param2 - fdir
-
 	local name = def.airbrush_replacement_node or node.name
 
 	if palette == true then
-		local s = string.sub(def.palette, 21)
-		local oldcolor = string.sub(s, 1, string.find(s, "s.png")-1)
-
 		local modname = string.sub(name, 1, string.find(name, ":")-1)
 		local nodename2 = string.sub(name, string.find(name, ":")+1)
+		local oldcolor = "snozzberry"
+		local newcolor = "razzberry" -- intentionally misspelled ;-)
+
+		if def.ud_color_start and def.ud_color_end then
+			oldcolor = string.sub(node.name, def.ud_color_start, def.ud_color_end)
+			newcolor = string.sub(painting_with, 5)
+		else
+			if hue ~= 0 then
+				newcolor = unifieddyes.HUES[hue]
+			else
+				newcolor = "grey"
+			end
 
-		local a,b
+			local s = string.sub(def.palette, 21)
+			oldcolor = string.sub(s, 1, string.find(s, "s.png")-1)
+		end
 
-		local newcolor = "grey"
-		if hue ~= 0 then
-			newcolor = unifieddyes.HUES[hue]
+		if newcolor == "spring" then newcolor = "aqua"
+		elseif newcolor == "azure" then newcolor = "skyblue"
+		elseif newcolor == "rose" then newcolor = "redviolet"
 		end
 
-		local a,b = string.gsub(nodename2, oldcolor, newcolor)
-		name = modname..":"..a
+		name = modname..":"..string.gsub(nodename2, oldcolor, newcolor)
+		if not minetest.registered_items[name] then
+			minetest.chat_send_player(player_name, "*** "..string.sub(painting_with, 5).." can't be applied to that node.")
+			return
+		end
 	elseif idx == oldidx then
 		return
 	end
-
 	minetest.swap_node(pos, {name = name, param2 = fdir + idx})
 	if not creative or not creative.is_enabled_for(player_name) then
 		inv:remove_item("main", painting_with)
-- 
cgit v1.2.3