diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
index 49a400a0dc..1914120c01 100644
--- a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs
@@ -174,6 +174,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController
module.AddRegion(scene);
scene.AddRegionModule(module.Name, module);
}
+
+ // This is needed for all module types. Modules will register
+ // Interfaces with scene in AddScene, and will also need a means
+ // to access interfaces registered by other modules. Without
+ // this extra method, a module attempting to use another modules's
+ // interface would be successful only depending on load order,
+ // which can't be depended upon, or modules would need to resort
+ // to ugly kludges to attempt to request interfaces when needed
+ // and unneccessary caching logic repeated in all modules.
+ // The extra function stub is just that much cleaner
+ //
+ foreach (ISharedRegionModule module in m_sharedInstances)
+ {
+ module.RegionLoaded(scene);
+ }
+
+ foreach (INonSharedRegionModule module in list)
+ {
+ module.RegionLoaded(scene);
+ }
}
public void RemoveRegionFromModules (Scene scene)
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
index 9f1867f759..5893a113c3 100644
--- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
+++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs
@@ -136,6 +136,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain
LoadPlugins();
}
+ public void RegionLoaded(Scene scene)
+ {
+ }
+
public void RemoveRegion(Scene scene)
{
lock (m_scene)
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
index 265b464b98..9d2327ac03 100644
--- a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
+++ b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs
@@ -71,6 +71,19 @@ namespace OpenSim.Region.Framework.Interfaces
/// A
///
void RemoveRegion(Scene scene);
+
+ ///
+ /// This will be called once for every scene loaded. In a shared module
+ /// this will be multiple times in one instance, while a nonshared
+ /// module instance will only be called once.
+ /// This method is called after AddRegion has been called in all
+ /// modules for that scene, providing an opportunity to request
+ /// another module's interface, or hook an event from another module.
+ ///
+ ///
+ /// A
+ ///
+ void RegionLoaded(Scene scene);
}
}