diff --git a/mods/pipeworks/default_settings.txt b/mods/pipeworks/default_settings.txt index a95038d9..bbf02ce0 100755 --- a/mods/pipeworks/default_settings.txt +++ b/mods/pipeworks/default_settings.txt @@ -18,3 +18,5 @@ pipeworks.enable_mese_sand_tube = true pipeworks.enable_one_way_tube = true pipeworks.enable_priority_tube = true pipeworks.enable_cyclic_mode = true + +pipeworks.delete_item_on_clearobject = true \ No newline at end of file diff --git a/mods/pipeworks/item_transport.lua b/mods/pipeworks/item_transport.lua index e8553dab..037cad72 100755 --- a/mods/pipeworks/item_transport.lua +++ b/mods/pipeworks/item_transport.lua @@ -55,6 +55,7 @@ local function go_next(pos, velocity, stack) end for _, vect in ipairs(can_go) do local npos = vector.add(pos, vect) + minetest.load_position(npos) local node = minetest.get_node(npos) local reg_node = minetest.registered_nodes[node.name] if reg_node then diff --git a/mods/pipeworks/luaentity.lua b/mods/pipeworks/luaentity.lua index 3fe891f3..e13c6131 100755 --- a/mods/pipeworks/luaentity.lua +++ b/mods/pipeworks/luaentity.lua @@ -149,8 +149,8 @@ local entitydef_default = { _remove_attached = function(self, index) local master = self._attached_entities_master local entity = self._attached_entities[index] - local ent = entity.entity - entity.entity = nil + local ent = entity and entity.entity + if entity then entity.entity = nil end if index == master then self:_detach_all() local newmaster @@ -315,10 +315,11 @@ minetest.register_globalstep(function(dtime) end for id, entity in pairs(luaentity.entities) do local master = entity._attached_entities_master - if master then - local master_def = entity._attached_entities[master] - local master_entity = master_def.entity - entity._pos = vector.subtract(master_entity:getpos(), master_def.offset) + local master_def = master and entity._attached_entities[master] + local master_entity = master_def and master_def.entity + local master_entity_pos = master_entity and master_entity:getpos() + if master_entity_pos then + entity._pos = vector.subtract(master_entity_pos, master_def.offset) entity._velocity = master_entity:getvelocity() entity._acceleration = master_entity:getacceleration() else @@ -330,9 +331,21 @@ minetest.register_globalstep(function(dtime) entity._velocity, vector.multiply(entity._acceleration, dtime)) end - entity:_add_loaded() - if entity.on_step then - entity:on_step(dtime) + if master and not master_entity_pos then -- The entity has somehow been cleared + if pipeworks.delete_item_on_clearobject then + entity:remove() + else + entity:_remove_attached(master) + entity:_add_loaded() + if entity.on_step then + entity:on_step(dtime) + end + end + else + entity:_add_loaded() + if entity.on_step then + entity:on_step(dtime) + end end end end)