mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 07:25:22 +01:00 
			
		
		
		
	Add callback to preserve node metadata as item metadata
This commit is contained in:
		| @@ -150,8 +150,22 @@ end | ||||
|  | ||||
| local function drop_attached_node(p) | ||||
| 	local n = core.get_node(p) | ||||
| 	local drops = core.get_node_drops(n, "") | ||||
| 	local def = core.registered_items[n.name] | ||||
| 	if def and def.preserve_metadata then | ||||
| 		local oldmeta = core.get_meta(p):to_table().fields | ||||
| 		-- Copy pos and node because the callback can modify them. | ||||
| 		local pos_copy = {x=p.x, y=p.y, z=p.z} | ||||
| 		local node_copy = {name=n.name, param1=n.param1, param2=n.param2} | ||||
| 		local drop_stacks = {} | ||||
| 		for k, v in pairs(drops) do | ||||
| 			drop_stacks[k] = ItemStack(v) | ||||
| 		end | ||||
| 		drops = drop_stacks | ||||
| 		def.preserve_metadata(pos_copy, node_copy, oldmeta, drops) | ||||
| 	end | ||||
| 	core.remove_node(p) | ||||
| 	for _, item in pairs(core.get_node_drops(n, "")) do | ||||
| 	for _, item in pairs(drops) do | ||||
| 		local pos = { | ||||
| 			x = p.x + math.random()/2 - 0.25, | ||||
| 			y = p.y + math.random()/2 - 0.25, | ||||
|   | ||||
| @@ -579,6 +579,20 @@ function core.node_dig(pos, node, digger) | ||||
| 		digger:set_wielded_item(wielded) | ||||
| 	end | ||||
|  | ||||
| 	-- Check to see if metadata should be preserved. | ||||
| 	if def and def.preserve_metadata then | ||||
| 		local oldmeta = core.get_meta(pos):to_table().fields | ||||
| 		-- Copy pos and node because the callback can modify them. | ||||
| 		local pos_copy = {x=pos.x, y=pos.y, z=pos.z} | ||||
| 		local node_copy = {name=node.name, param1=node.param1, param2=node.param2} | ||||
| 		local drop_stacks = {} | ||||
| 		for k, v in pairs(drops) do | ||||
| 			drop_stacks[k] = ItemStack(v) | ||||
| 		end | ||||
| 		drops = drop_stacks | ||||
| 		def.preserve_metadata(pos_copy, node_copy, oldmeta, drops) | ||||
| 	end | ||||
|  | ||||
| 	-- Handle drops | ||||
| 	core.handle_node_drops(pos, drops, digger) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user