fix multiple crash points if luaentity.entities or values returned from

luaentity.add_entity() are nil
This commit is contained in:
Vanessa Ezekowitz 2015-06-23 12:24:35 -04:00
parent 5822f60ba9
commit d0952a97fc
2 changed files with 7 additions and 0 deletions

View File

@ -6,6 +6,7 @@ function pipeworks.tube_inject_item(pos, start_pos, velocity, item)
-- Take item in any format -- Take item in any format
local stack = ItemStack(item) local stack = ItemStack(item)
local obj = luaentity.add_entity(pos, "pipeworks:tubed_item") local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
if not obj then return end
obj:set_item(stack:to_string()) obj:set_item(stack:to_string())
obj.start_pos = vector.new(start_pos) obj.start_pos = vector.new(start_pos)
obj:setvelocity(velocity) obj:setvelocity(velocity)

View File

@ -22,6 +22,7 @@ end
local function read_entities() local function read_entities()
local t = read_file() local t = read_file()
if not t then return end
for _, entity in pairs(t) do for _, entity in pairs(t) do
setmetatable(entity, luaentity.registered_entities[entity.name]) setmetatable(entity, luaentity.registered_entities[entity.name])
end end
@ -29,6 +30,7 @@ local function read_entities()
end end
local function write_entities() local function write_entities()
if not luaentity.entities then return end
for _, entity in pairs(luaentity.entities) do for _, entity in pairs(luaentity.entities) do
setmetatable(entity, nil) setmetatable(entity, nil)
for _, attached in pairs(entity._attached_entities) do for _, attached in pairs(entity._attached_entities) do
@ -251,6 +253,7 @@ end
-- end -- end
function luaentity.add_entity(pos, name) function luaentity.add_entity(pos, name)
if not luaentity.entities then return end
local index = luaentity.entities_index local index = luaentity.entities_index
while luaentity.entities[index] do while luaentity.entities[index] do
index = index + 1 index = index + 1
@ -281,6 +284,7 @@ end
-- todo: check if remove in get_staticdata works -- todo: check if remove in get_staticdata works
function luaentity.get_staticdata(self) function luaentity.get_staticdata(self)
if not luaentity.entities then return end
local parent = luaentity.entities[self.parent_id] local parent = luaentity.entities[self.parent_id]
if parent and parent._remove_attached then if parent and parent._remove_attached then
parent:_remove_attached(self.attached_id) parent:_remove_attached(self.attached_id)
@ -295,6 +299,7 @@ function luaentity.on_activate(self, staticdata)
end end
function luaentity.get_objects_inside_radius(pos, radius) function luaentity.get_objects_inside_radius(pos, radius)
if not luaentity.entities then return end
local objects = {} local objects = {}
local index = 1 local index = 1
for id, entity in pairs(luaentity.entities) do for id, entity in pairs(luaentity.entities) do
@ -309,6 +314,7 @@ minetest.register_globalstep(function(dtime)
if not luaentity.entities then if not luaentity.entities then
luaentity.entities = read_entities() luaentity.entities = read_entities()
end end
if not luaentity.entities then return end
for id, entity in pairs(luaentity.entities) do for id, entity in pairs(luaentity.entities) do
local master = entity._attached_entities_master local master = entity._attached_entities_master
if master then if master then