diff options
| author | DS <vorunbekannt75@web.de> | 2022-10-01 21:21:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-01 15:21:06 -0400 |
| commit | 22cbc058080127445b69d2137e346ad52f8b3387 (patch) | |
| tree | bd42bead55d1a05acf5c65385cc59d64bbfa9617 /builtin/game/item_entity.lua | |
| parent | 977f656e09c4b542e09ec210b202ba46eb45ac5e (diff) | |
| download | minetest-22cbc058080127445b69d2137e346ad52f8b3387.tar.xz | |
Add an item pick up callback (2) (#7712)
Co-authored-by: SmallJoker <mk939@ymail.com>
Co-authored-by: Jude Melton-Houghton <jwmhjwmh@gmail.com>
Diffstat (limited to 'builtin/game/item_entity.lua')
| -rw-r--r-- | builtin/game/item_entity.lua | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index 53f98a7c7..f321bb1dd 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -318,16 +318,29 @@ core.register_entity(":__builtin:item", { end end, - on_punch = function(self, hitter) - local inv = hitter:get_inventory() - if inv and self.itemstring ~= "" then - local left = inv:add_item("main", self.itemstring) - if left and not left:is_empty() then - self:set_item(left) - return - end + on_punch = function(self, hitter, ...) + if self.itemstring == "" then + self.object:remove() + return + end + + -- Call on_pickup callback in item definition. + local itemstack = ItemStack(self.itemstring) + local callback = itemstack:get_definition().on_pickup + + local ret = callback(itemstack, hitter, {type = "object", ref = self.object}, ...) + if not ret then + -- Don't modify (and don't reset rotation) + return + end + itemstack = ItemStack(ret) + + -- Handle the leftover itemstack + if itemstack:is_empty() then + self.itemstring = "" + self.object:remove() + else + self:set_item(itemstack) end - self.itemstring = "" - self.object:remove() end, }) |
