Entity positions are serialized as F1000. Disallow placing
entities outside safe borders with the minetest.add_entity
call.
Note that this patch only enforces those boundaries for
placing entities, moving entities that move outside boundaries
aren't affected.
Thanks to @nanepiwo for pointing this out.
delete object;
return 0;
}
+
+ if (objectpos_over_limit(object->getBasePosition())) {
+ errorstream << "ServerEnvironment::addActiveObjectRaw(): "
+ << "object position outside maximum range" << std::endl;
+ if (object->environmentDeletes())
+ delete object;
+ return 0;
+ }
+
/*infostream<<"ServerEnvironment::addActiveObjectRaw(): "
<<"added (id="<<object->getId()<<")"<<std::endl;*/
typedef std::vector<MapBlock*> MapBlockVect;
+inline bool objectpos_over_limit(v3f p)
+{
+ const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT,
+ g_settings->getU16("map_generation_limit"));
+ return (p.X < -map_gen_limit
+ || p.X > map_gen_limit
+ || p.Y < -map_gen_limit
+ || p.Y > map_gen_limit
+ || p.Z < -map_gen_limit
+ || p.Z > map_gen_limit);
+}
+
inline bool blockpos_over_limit(v3s16 p)
{
const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT,