From 7de142dd34e100b6b1211542d0081dea932b0260 Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Fri, 26 Mar 2021 03:20:19 -0400 Subject: [PATCH] fix airbrush not showing color picker dialog when doing sneak + right-click on a node which has a formspec in its metadata. Right-clicking any node without a formspec in its meta will trigger the color picker as usual, without holding sneak. This also makes the "use this thing's color" feature use aux1 + right-click on most nodes, when it was sneak + right-click before. On a node with a formspec in its meta, the engine will intercept the right-click before UD can see it, but then drop back to UD if the user is holding sneak, so to pick the color of one of these nodes, use sneak + aux1 + right-click. (on my setup, sneak is bound to "Shift", aux1 is "E"). --- airbrush.lua | 78 ++++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/airbrush.lua b/airbrush.lua index 2e9cb6b..44f155f 100644 --- a/airbrush.lua +++ b/airbrush.lua @@ -388,45 +388,6 @@ function unifieddyes.show_airbrush_form(player) minetest.show_formspec(player_name, "unifieddyes:dye_select_form", table.concat(t)) end -minetest.register_tool("unifieddyes:airbrush", { - description = S("Dye Airbrush"), - inventory_image = "unifieddyes_airbrush.png", - use_texture_alpha = true, - tool_capabilities = { - full_punch_interval=0.1, - }, - range = 12, - on_use = unifieddyes.on_airbrush, - on_place = function(itemstack, placer, pointed_thing) - local keys = placer:get_player_control() - local player_name = placer:get_player_name() - local pos = minetest.get_pointed_thing_position(pointed_thing) - local node - local def - - if pos then node = minetest.get_node(pos) end - if node then def = minetest.registered_items[node.name] end - - unifieddyes.player_last_right_clicked[player_name] = {pos = pos, node = node, def = def} - - if (not keys.sneak) and def.on_rightclick then - return def.on_rightclick(pos, node, placer, itemstack, pointed_thing) - elseif not keys.sneak then - unifieddyes.show_airbrush_form(placer) - elseif keys.sneak then - if not pos or not def then return end - local newcolor = unifieddyes.color_to_name(node.param2, def) - - if not newcolor then - minetest.chat_send_player(player_name, "*** That node is uncolored.") - return - end - minetest.chat_send_player(player_name, "*** Switching to "..newcolor.." for the airbrush, to match that node.") - unifieddyes.player_current_dye[player_name] = "dye:"..newcolor - end - end -}) - minetest.register_on_player_receive_fields(function(player, formname, fields) if formname == "unifieddyes:dye_select_form" then @@ -496,3 +457,42 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) + +minetest.register_tool("unifieddyes:airbrush", { + description = S("Dye Airbrush"), + inventory_image = "unifieddyes_airbrush.png", + use_texture_alpha = true, + tool_capabilities = { + full_punch_interval=0.1, + }, + range = 12, + on_use = unifieddyes.on_airbrush, + on_place = function(itemstack, placer, pointed_thing) + local keys = placer:get_player_control() + local player_name = placer:get_player_name() + local pos = minetest.get_pointed_thing_position(pointed_thing) + local node + local def + + if pos then node = minetest.get_node(pos) end + if node then def = minetest.registered_items[node.name] end + + unifieddyes.player_last_right_clicked[player_name] = {pos = pos, node = node, def = def} + + if not keys.aux1 then + unifieddyes.show_airbrush_form(placer) + elseif keys.aux1 then + if not pos or not def then return end + local newcolor = unifieddyes.color_to_name(node.param2, def) + + if newcolor and string.find(def.paramtype2, "color") then + minetest.chat_send_player(player_name, "*** Switching to "..newcolor.." for the airbrush, to match that node.") + unifieddyes.player_current_dye[player_name] = "dye:"..newcolor + else + minetest.chat_send_player(player_name, "*** That node is uncolored.") + end + elseif def.on_rightclick then + return def.on_rightclick(pos, node, placer, itemstack, pointed_thing) + end + end +})