Fix indexing error in timer processing
[oweals/minetest.git] / builtin / game / item.lua
index 8fd172aab6d8cbcc5a84bb27e2930dae1d411fcb..e136d4f4cdb257d8f0699fcdf0dab4ed4fc5d35d 100644 (file)
@@ -335,24 +335,36 @@ function core.item_place(itemstack, placer, pointed_thing, param2)
 end
 
 function core.item_drop(itemstack, dropper, pos)
-       if dropper.get_player_name then
+       if dropper.is_player then
                local v = dropper:get_look_dir()
-               local p = {x=pos.x+v.x, y=pos.y+1.5+v.y, z=pos.z+v.z}
-               local obj = core.add_item(p, itemstack)
+               local p = {x=pos.x, y=pos.y+1.2, z=pos.z}
+               local cs = itemstack:get_count()
+               if dropper:get_player_control().sneak then
+                       cs = 1
+               end
+               local item = itemstack:take_item(cs)
+               local obj = core.add_item(p, item)
                if obj then
                        v.x = v.x*2
-                       v.y = v.y*2 + 1
+                       v.y = v.y*2 + 2
                        v.z = v.z*2
                        obj:setvelocity(v)
                end
+
        else
                core.add_item(pos, itemstack)
        end
-       return ItemStack("")
+       return itemstack
 end
 
 function core.item_eat(hp_change, replace_with_item)
        return function(itemstack, user, pointed_thing)  -- closure
+               for _, callback in pairs(core.registered_on_item_eats) do
+                       local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing)
+                       if result then
+                               return result
+                       end
+               end
                if itemstack:take_item() ~= nil then
                        user:set_hp(user:get_hp() + hp_change)
                        itemstack:add_item(replace_with_item) -- note: replace_with_item is optional
@@ -586,4 +598,3 @@ core.noneitemdef_default = {  -- This is used for the hand and unknown items
        on_drop = nil,
        on_use = nil,
 }
-