mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Make it more convenient to customize node drops (#15872)
* Provide tool and digger to get_node_drops This gives games/mods the ability to modify node drops depending on item and/or player metadata without overriding node_dig or other workarounds. * Copy wielded item to prevent modification in get_node_drops * Also pass node pos to get_node_drops Allowing properties of the node and its surroundings to affect node drops. * Copy pos to prevent modification in get_node_drops Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com> * Don't pass empty item stack to get_node_drops if wielded is nil --------- Co-authored-by: sfan5 <sfan5@live.de> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
This commit is contained in:
		@@ -513,7 +513,8 @@ function core.node_dig(pos, node, digger)
 | 
			
		||||
		.. node.name .. " at " .. core.pos_to_string(pos))
 | 
			
		||||
 | 
			
		||||
	local wielded = digger and digger:get_wielded_item()
 | 
			
		||||
	local drops = core.get_node_drops(node, wielded and wielded:get_name())
 | 
			
		||||
	local drops = core.get_node_drops(node, wielded and wielded:get_name(),
 | 
			
		||||
				wielded and ItemStack(wielded), digger, vector.copy(pos))
 | 
			
		||||
 | 
			
		||||
	if wielded then
 | 
			
		||||
		local wdef = wielded:get_definition()
 | 
			
		||||
 
 | 
			
		||||
@@ -6910,11 +6910,16 @@ Item handling
 | 
			
		||||
      given `param2` value.
 | 
			
		||||
    * Returns `nil` if the given `paramtype2` does not contain color
 | 
			
		||||
      information.
 | 
			
		||||
* `core.get_node_drops(node, toolname)`
 | 
			
		||||
    * Returns list of itemstrings that are dropped by `node` when dug
 | 
			
		||||
      with the item `toolname` (not limited to tools).
 | 
			
		||||
* `core.get_node_drops(node, toolname[, tool, digger, pos])`
 | 
			
		||||
    * Returns list of itemstrings that are dropped by `node` when dug with the
 | 
			
		||||
      item `toolname` (not limited to tools). The default implementation doesn't
 | 
			
		||||
      use `tool`, `digger`, and `pos`, but these are provided by `core.node_dig`
 | 
			
		||||
      since 5.12.0 for games/mods implementing customized drops.
 | 
			
		||||
    * `node`: node as table or node name
 | 
			
		||||
    * `toolname`: name of the item used to dig (can be `nil`)
 | 
			
		||||
    * `tool`: `ItemStack` used to dig (can be `nil`)
 | 
			
		||||
    * `digger`: the ObjectRef that digs the node (can be `nil`)
 | 
			
		||||
    * `pos`: the pos of the dug node (can be `nil`)
 | 
			
		||||
* `core.get_craft_result(input)`: returns `output, decremented_input`
 | 
			
		||||
    * `input.method` = `"normal"` or `"cooking"` or `"fuel"`
 | 
			
		||||
    * `input.width` = for example `3`
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user