From 83f779c52dcd64ecd55a590b2a06baf5da9a9814 Mon Sep 17 00:00:00 2001 From: sfence Date: Sun, 4 Feb 2024 21:24:08 +0100 Subject: [PATCH] Fix active object adding to not generated block (#14311) --- doc/lua_api.md | 3 +++ src/serverenvironment.cpp | 22 +++++++++++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/doc/lua_api.md b/doc/lua_api.md index 469292a72..14ca7e835 100644 --- a/doc/lua_api.md +++ b/doc/lua_api.md @@ -5948,8 +5948,11 @@ Environment access * `minetest.add_entity(pos, name, [staticdata])`: Spawn Lua-defined entity at position. * Returns `ObjectRef`, or `nil` if failed + * Entities with `static_save = true` can be added also + to unloaded and non-generated blocks. * `minetest.add_item(pos, item)`: Spawn item * Returns `ObjectRef`, or `nil` if failed + * Items can be added also to unloaded and non-generated blocks. * `minetest.get_player_by_name(name)`: Get an `ObjectRef` to a player * `minetest.get_objects_inside_radius(pos, radius)`: returns a list of ObjectRefs. diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp index 7b188f60f..753899fb8 100644 --- a/src/serverenvironment.cpp +++ b/src/serverenvironment.cpp @@ -1044,7 +1044,8 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime) <m_static_objects.clearStored(); // do not set changed flag to avoid unnecessary mapblock writes } @@ -1892,11 +1893,6 @@ u16 ServerEnvironment::addActiveObjectRaw(std::unique_ptr ob return 0; } - // Register reference in scripting api (must be done before post-init) - m_script->addObjectReference(object); - // Post-initialize object - object->addedToEnvironment(dtime_s); - // Add static data to block if (object->isStaticAllowed()) { // Add static object to active static list of the block @@ -1915,12 +1911,20 @@ u16 ServerEnvironment::addActiveObjectRaw(std::unique_ptr ob MOD_REASON_ADD_ACTIVE_OBJECT_RAW); } else { v3s16 p = floatToInt(objectpos, BS); - errorstream<<"ServerEnvironment::addActiveObjectRaw(): " - <<"could not emerge block for storing id="<getId() - <<" statically (pos="<getId()); + return 0; } } + // Register reference in scripting api (must be done before post-init) + m_script->addObjectReference(object); + // Post-initialize object + object->addedToEnvironment(dtime_s); + return object->getId(); }