Some map border related fixes

1. Check for entity addition success in spawn_item implementation
2. Check for success in item_drop callback, so that the player
doesn't lose the item if they are outside bounds and try to drop it.
3. When existing player joins game, check that their position is inside
map bounds. If not, set their position to the return value of findSpawnPos().
4. Make findSpawnPos() respect the border

2 fixes a lua crash if a player drops an item outside map bounds.
3 fixes an assertion crash if a player leaves when being outside map bounds,
and then rejoins.
This commit is contained in:
est31 2015-09-29 17:26:07 +02:00 committed by Nils Dagsson Moskopp
parent 37a94ffa9d
commit e1b5a8789e
Signed by: erle
GPG Key ID: A3BC671C35191080
2 changed files with 12 additions and 5 deletions

View File

@ -349,12 +349,16 @@ function core.item_drop(itemstack, dropper, pos)
v.y = v.y*2 + 2
v.z = v.z*2
obj:setvelocity(v)
return itemstack
end
else
core.add_item(pos, itemstack)
if core.add_item(pos, itemstack) then
return itemstack
end
end
return itemstack
-- If we reach this, adding the object to the
-- environment failed
end
function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)

View File

@ -4,7 +4,10 @@ function core.spawn_item(pos, item)
-- Take item in any format
local stack = ItemStack(item)
local obj = core.add_entity(pos, "__builtin:item")
obj:get_luaentity():set_item(stack:to_string())
-- Don't use obj if it couldn't be added to the map.
if obj then
obj:get_luaentity():set_item(stack:to_string())
end
return obj
end