1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00: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:
Jürgen Rühle 2025-04-20 20:48:48 +02:00 committed by GitHub
parent 23bfb2db72
commit 2f464843cb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 4 deletions

View file

@ -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()

View file

@ -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`