mirror of
				https://github.com/mt-mods/unifieddyes.git
				synced 2025-10-26 13:35:28 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			2018-08-22
			...
			2018-08-24
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | adf1bc2c50 | ||
|  | 35d34d809e | 
							
								
								
									
										2
									
								
								API.md
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								API.md
									
									
									
									
									
								
							| @@ -152,3 +152,5 @@ If your mod never has never used Unified Dyes at all, in short, do the following | ||||
| If your colored node is based on someone else's neutral node, for example if you made a mod that creates multiple colors of minetest_game's default clay, you may find it best to create a single "stand-in" node that's identical to the neutral node, but named for your mod, hidden from the creative inventory, and has a properly-prepared grayscale texture image in addition to the above keys.  Use the neutral node and the custom hidden node as in the above craft helper call.  Then use minetest.override_item() to add the on_construct and palette keys and the ud_param2_colorable group to that "someone else's" node. | ||||
|  | ||||
| * You will need to write a run-only-once LBM to convert your old statically-colored nodes to use hardware coloring.  See above for functions that will help reduce the work required for this part. | ||||
|  | ||||
| If your mod has no colorable items, and you wish to expand it accordingly, follow the above "never used" section, skipping the "remove/delete this and that" items, and of course omitting the LBM. | ||||
|   | ||||
							
								
								
									
										181
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										181
									
								
								init.lua
									
									
									
									
									
								
							| @@ -597,180 +597,6 @@ function unifieddyes.getpaletteidx(color, palette_type) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function unifieddyes.on_use(itemstack, player, pointed_thing) | ||||
| 	local stackname = itemstack:get_name() | ||||
| 	local playername = player:get_player_name() | ||||
|  | ||||
| 	if pointed_thing and pointed_thing.type == "node" and unifieddyes.select_node(pointed_thing) then | ||||
| 		if minetest.is_protected(unifieddyes.select_node(pointed_thing), playername) | ||||
| 		  and not minetest.check_player_privs(playername, "protection_bypass") then | ||||
| 			minetest.chat_send_player(playername, "Sorry, someone else owns that spot.") | ||||
| 			return | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	if pointed_thing and pointed_thing.type == "object" then | ||||
| 		pointed_thing.ref:punch(player, 0, itemstack:get_tool_capabilities()) | ||||
| 		return player:get_wielded_item() -- punch may modified the wielded item, load the new and return it | ||||
| 	end | ||||
|  | ||||
| 	if not (pointed_thing and pointed_thing.type == "node") then return end  -- if "using" the dye on nothing at all (e.g. air) | ||||
|  | ||||
| 	local pos = minetest.get_pointed_thing_position(pointed_thing) | ||||
| 	local node = minetest.get_node(pos) | ||||
|  | ||||
| 	local nodedef = minetest.registered_nodes[node.name] | ||||
|  | ||||
| 	if not nodedef then return end -- target was an unknown node, just bail out | ||||
|  | ||||
| 	-- if the node has an on_punch defined, bail out and call that instead, unless "sneak" is pressed. | ||||
| 	if not player:get_player_control().sneak then | ||||
| 		local onpunch = nodedef.on_punch(pos, node, player, pointed_thing) | ||||
| 		if onpunch then | ||||
| 			return onpunch | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- if the target is unknown, has no groups defined, or isn't UD-colorable, just bail out | ||||
| 	if not (nodedef and nodedef.groups and nodedef.groups.ud_param2_colorable) then | ||||
| 		minetest.chat_send_player(playername, "That node can't be colored.") | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local newnode = nodedef.ud_replacement_node | ||||
| 	local palette_type | ||||
|  | ||||
| 	if nodedef.palette == "unifieddyes_palette_extended.png" then | ||||
| 		palette_type = "extended" | ||||
| 	elseif nodedef.palette == "unifieddyes_palette.png" then | ||||
| 		palette_type = false | ||||
| 	elseif nodedef.paramtype2 == "colorfacedir" then | ||||
| 		palette_type = true | ||||
| 	elseif nodedef.paramtype2 == "colorwallmounted" then | ||||
| 		palette_type = "wallmounted" | ||||
| 	end | ||||
|  | ||||
| 	if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then | ||||
| 		minetest.record_protection_violation(pos, playername) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local pos2 = unifieddyes.select_node(pointed_thing) | ||||
| 	local paletteidx, hue = unifieddyes.getpaletteidx(stackname, palette_type) | ||||
|  | ||||
| 	if paletteidx then | ||||
|  | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local prevdye = meta:get_string("dye") | ||||
| 		local inv = player:get_inventory() | ||||
|  | ||||
| 		if not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then | ||||
| 			if inv:room_for_item("main", prevdye) then | ||||
| 				inv:add_item("main", prevdye) | ||||
| 			else | ||||
| 				minetest.add_item(pos, prevdye) | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 		meta:set_string("dye", stackname) | ||||
|  | ||||
| 		if prevdye == stackname then | ||||
| 			local a,b = string.find(stackname, ":") | ||||
| 			minetest.chat_send_player(playername, "That node is already "..string.sub(stackname, a + 1).."." ) | ||||
| 			return | ||||
| 		elseif not creative_mode then | ||||
| 			itemstack:take_item() | ||||
| 		end | ||||
|  | ||||
| 		node.param2 = paletteidx | ||||
|  | ||||
| 		local oldpaletteidx, oldhuenum = unifieddyes.getpaletteidx(prevdye, palette_type) | ||||
| 		local oldnode = minetest.get_node(pos) | ||||
|  | ||||
| 		local oldhue = nil | ||||
| 		for _, i in ipairs(unifieddyes.HUES) do | ||||
| 			if string.find(oldnode.name, "_"..i) and not | ||||
| 				( string.find(oldnode.name, "_redviolet") and i == "red" ) then | ||||
| 				oldhue = i | ||||
| 				break | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 		if newnode then -- this path is used when the calling mod want to supply a replacement node | ||||
| 			if palette_type == "wallmounted" then | ||||
| 				node.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) | ||||
| 			elseif palette_type == true then  -- it's colorfacedir | ||||
| 				if oldhue ~=0 then -- it's colored, not grey | ||||
| 					if oldhue ~= nil then -- it's been painted before | ||||
| 						if hue ~= 0 then -- the player's wielding a colored dye | ||||
| 							newnode = string.gsub(newnode, "_"..oldhue, "_"..unifieddyes.HUES[hue]) | ||||
| 						else -- it's a greyscale dye | ||||
| 							newnode = string.gsub(newnode, "_"..oldhue, "_grey") | ||||
| 						end | ||||
| 					else -- it's never had a color at all | ||||
| 						if hue ~= 0 then -- and if the wield is greyscale, don't change the node name | ||||
| 							newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) | ||||
| 						end | ||||
| 					end | ||||
| 				else | ||||
| 					if hue ~= 0 then  -- greyscale dye on greyscale node = no hue change | ||||
| 						newnode = string.gsub(newnode, "_grey", "_"..unifieddyes.HUES[hue]) | ||||
| 					end | ||||
| 				end | ||||
| 				node.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) | ||||
| 			else -- it's the 89-color palette, or the extended palette | ||||
| 				node.param2 = paletteidx | ||||
| 			end | ||||
| 			node.name = newnode | ||||
| 			minetest.swap_node(pos, node) | ||||
| 			if palette_type == "extended" then | ||||
| 				meta:set_string("palette", "ext") | ||||
| 			end | ||||
| 			if not creative_mode then | ||||
| 				return itemstack | ||||
| 			end | ||||
| 		else -- this path is used when you're just painting an existing node, rather than replacing one. | ||||
| 			newnode = oldnode  -- note that here, newnode/oldnode are a full node, not just the name. | ||||
| 			if palette_type == "wallmounted" then | ||||
| 				newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 8) | ||||
| 			elseif palette_type == true then -- it's colorfacedir | ||||
| 				if oldhue then | ||||
| 					if hue ~= 0 then | ||||
| 						newnode.name = string.gsub(newnode.name, "_"..oldhue, "_"..unifieddyes.HUES[hue]) | ||||
| 					else | ||||
| 						newnode.name = string.gsub(newnode.name, "_"..oldhue, "_grey") | ||||
| 					end | ||||
| 				elseif string.find(minetest.get_node(pos).name, "_grey") and hue ~= 0 then | ||||
| 					newnode.name = string.gsub(newnode.name, "_grey", "_"..unifieddyes.HUES[hue]) | ||||
| 				end | ||||
| 				newnode.param2 = paletteidx + (minetest.get_node(pos).param2 % 32) | ||||
| 			else -- it's the 89-color palette, or the extended palette | ||||
| 				newnode.param2 = paletteidx | ||||
| 			end | ||||
| 			minetest.swap_node(pos, newnode) | ||||
| 			if palette_type == "extended" then | ||||
| 				meta:set_string("palette", "ext") | ||||
| 			end | ||||
| 			if not creative_mode then | ||||
| 				return itemstack | ||||
| 			end | ||||
| 		end | ||||
| 	else | ||||
| 		local a,b = string.find(stackname, ":") | ||||
| 		if a then | ||||
| 			minetest.chat_send_player(playername, "That node can't be colored "..string.sub(stackname, a + 1).."." ) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- re-define default dyes slightly, to add on_use | ||||
|  | ||||
| for _, color in ipairs(default_dyes) do | ||||
| 	minetest.override_item("dye:"..color, { | ||||
| 		on_use = unifieddyes.on_use | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| -- build a table to convert from classic/89-color palette to extended palette | ||||
|  | ||||
| -- the first five entries are for the old greyscale - white, light, grey, dark, black | ||||
| @@ -825,7 +651,6 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do | ||||
| 		if minetest.registered_items["dye:"..val..hue] then | ||||
| 			minetest.override_item("dye:"..val..hue, { | ||||
| 				inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", | ||||
| 				on_use = unifieddyes.on_use | ||||
| 			}) | ||||
| 		else | ||||
| 			if (val..hue) ~= "medium_orange" | ||||
| @@ -834,7 +659,6 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do | ||||
| 					description = S(desc), | ||||
| 					inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", | ||||
| 					groups = { dye=1, not_in_creative_inventory=1 }, | ||||
| 					on_use = unifieddyes.on_use | ||||
| 				}) | ||||
| 			end | ||||
| 		end | ||||
| @@ -857,7 +681,6 @@ for _, h in ipairs(unifieddyes.HUES_EXTENDED) do | ||||
| 				description = S(desc.." (low saturation)"), | ||||
| 				inventory_image = "unifieddyes_dye.png^[colorize:#"..color..":200", | ||||
| 				groups = { dye=1, not_in_creative_inventory=1 }, | ||||
| 				on_use = unifieddyes.on_use | ||||
| 			}) | ||||
| 			minetest.register_alias("unifieddyes:"..val..hue.."_s50", "dye:"..val..hue.."_s50") | ||||
| 		end | ||||
| @@ -878,7 +701,6 @@ for y = 1, 14 do -- colors 0 and 15 are black and white, default dyes | ||||
| 			description = S(desc), | ||||
| 			inventory_image = "unifieddyes_dye.png^[colorize:#"..rgb..":200", | ||||
| 			groups = { dye=1, not_in_creative_inventory=1 }, | ||||
| 			on_use = unifieddyes.on_use | ||||
| 		}) | ||||
| 		minetest.register_alias("unifieddyes:"..name, "dye:"..name) | ||||
| 	end | ||||
| @@ -886,19 +708,16 @@ end | ||||
|  | ||||
| minetest.override_item("dye:grey", { | ||||
| 	inventory_image = "unifieddyes_dye.png^[colorize:#888888:200", | ||||
| 	on_use = unifieddyes.on_use | ||||
| }) | ||||
|  | ||||
| minetest.override_item("dye:dark_grey", { | ||||
| 	inventory_image = "unifieddyes_dye.png^[colorize:#444444:200", | ||||
| 	on_use = unifieddyes.on_use | ||||
| }) | ||||
|  | ||||
| minetest.register_craftitem(":dye:light_grey", { | ||||
| 	description = S("Light grey Dye"), | ||||
| 	inventory_image = "unifieddyes_dye.png^[colorize:#cccccc:200", | ||||
| 	groups = { dye=1, not_in_creative_inventory=1 }, | ||||
| 	on_use = unifieddyes.on_use | ||||
| }) | ||||
|  | ||||
| unifieddyes.base_color_crafts = { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user