From 58dd71e561a3831102e9ffcfcf1888299e3569b2 Mon Sep 17 00:00:00 2001 From: cheapie Date: Sat, 1 Dec 2018 17:59:00 -0600 Subject: [PATCH] Add function to get the hex color from a dye name (oh, and https://www.youtube.com/watch?v=OEVFbrEv83w too) --- init.lua | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/init.lua b/init.lua index 9edd87f..e19cbf3 100644 --- a/init.lua +++ b/init.lua @@ -630,6 +630,19 @@ function unifieddyes.getpaletteidx(color, palette_type) end end +function unifieddyes.get_color_from_dye_name(name) + if name == "dye:black" then + return "000000" + elseif name == "dye:white" then + return "ffffff" + end + local item = minetest.registered_items[name] + if not item then return end + local inv_image = item.inventory_image + if not inv_image then return end + return string.match(inv_image,"colorize:#(......):200") +end + -- punch-to-recolor using the airbrush function unifieddyes.on_airbrush(itemstack, player, pointed_thing) @@ -640,8 +653,28 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing) painting_with = unifieddyes.player_current_dye[player_name] end + if not painting_with then + minetest.chat_send_player(player_name, "*** You need to set a color first.") + minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,") + minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.") + minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.") + return + end + local pos = minetest.get_pointed_thing_position(pointed_thing) - if not pos then return end + if not pos then + local look_angle = player:get_look_vertical() + if look_angle > -1.55 then + minetest.chat_send_player(player_name, "*** No node selected") + else + local hexcolor = unifieddyes.get_color_from_dye_name(painting_with) + local r = tonumber(string.sub(hexcolor,1,2),16) + local g = tonumber(string.sub(hexcolor,3,4),16) + local b = tonumber(string.sub(hexcolor,5,6),16) + player:set_sky({r=r,g=g,b=b,a=255},"plain") + end + return + end local node = minetest.get_node(pos) local def = minetest.registered_items[node.name] @@ -652,14 +685,6 @@ function unifieddyes.on_airbrush(itemstack, player, pointed_thing) return end - if not painting_with then - minetest.chat_send_player(player_name, "*** You need to set a color first.") - minetest.chat_send_player(player_name, "*** Right-click any random node to open the color selector,") - minetest.chat_send_player(player_name, "*** or shift+right-click a colorized node to use its color.") - minetest.chat_send_player(player_name, "*** Be sure to click \"Accept\", or the color you select will be ignored.") - return - end - if not (def.groups and def.groups.ud_param2_colorable and def.groups.ud_param2_colorable > 0) then minetest.chat_send_player(player_name, "*** That node can't be colored.") return