]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - builtin/item_entity.lua
Fix node replacement in not-quite-loaded chunks
[dragonfireclient.git] / builtin / item_entity.lua
index 2b12764f18dd455fdcd19653fa6feda8bf4a1873..50ce7eafedc3b8212079dfac4e4941796ef0a54a 100644 (file)
@@ -84,8 +84,9 @@ minetest.register_entity("__builtin:item", {
                local p = self.object:getpos()
                p.y = p.y - 0.3
                local nn = minetest.env:get_node(p).name
-               -- If node is not registered or node is walkably solid
-               if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable then
+               -- If node is not registered or node is walkably solid and resting on nodebox
+               local v = self.object:getvelocity()
+               if not minetest.registered_nodes[nn] or minetest.registered_nodes[nn].walkable and v.y == 0 then
                        if self.physical_state then
                                self.object:setvelocity({x=0,y=0,z=0})
                                self.object:setacceleration({x=0, y=0, z=0})
@@ -108,7 +109,11 @@ minetest.register_entity("__builtin:item", {
 
        on_punch = function(self, hitter)
                if self.itemstring ~= '' then
-                       hitter:get_inventory():add_item("main", self.itemstring)
+                       local left = hitter:get_inventory():add_item("main", self.itemstring)
+                       if not left:is_empty() then
+                               self.itemstring = left:to_string()
+                               return
+                       end
                end
                self.object:remove()
        end,