Name: Module++
Summary: A number of improvements to the core module system, to help for the basis for future modding support
Scope: Engine
Current Goal: Improved shaping during downloading
Phase: Implementation
Curator: Immortius
The goal of this arc is to lay the foundation for future mod support, by firming up module support. Tasks falling under this arc are:
Summary: A number of improvements to the core module system, to help for the basis for future modding support
Scope: Engine
Current Goal: Improved shaping during downloading
Phase: Implementation
Curator: Immortius
The goal of this arc is to lay the foundation for future mod support, by firming up module support. Tasks falling under this arc are:
Some initial cleanup to the metadata systems for components/events.DONEIdentify Components and Events with URIs, to prevent potential name conflicts between packages.DONEAdd an improved name resolution system. This will work in the context of a module and its dependencies, so if a prefab in "testmod" has a "location" component this will be resolved to "engine:location", ignoring the presence of "someOtherMod:location" if it is not a dependency of "testmod". If "testmod" did have a dependency on "someOtherMod", then "location" would not resolve fully, and "testmod"'s prefab would have to use a full uri.DONEFix anything that is loaded or save to support full and partial uris appropriately.DONEModule versioning support. Modules will have three-part versions (MAJOR.minor.revision), and when declaring dependencies will specify a dependency range. When connecting to a server the versions will also be propagated. Then when loading modules the latest available version that meets all requirements will be used. In some cases this will be impossible (Module A asks for Module C 3.*.*, Module B asks for Module C 1.0.2), which will need to be detected and reported. This will also mean that multiple versions being present (but not running) needs to be supported.DONE- Prefab extension system - The ability to add extra components into prefabs as part of a module. This would need to be available both programatically, and through some sort of asset.
Module sandboxing. Modules should have restricted access to many features, such as file system access and network access. This will be handled by restricting modules to accessing only approved classes and classes from other modules, as well as installing a java security manager to prevent access to reflection capabilities.DONE- Add support for modules requesting higher access, which requires approval by the user.
Module download from server. Given sandboxing, enable clients to download mods from the server as needed.DONE- Improved shaping of connections during downloads.
- Updating the modules used by a saved game.
- Implement byte code generation based support to replace our current reflection based system for interacting with components/events/etc.
- Allow servers to point to another location to download mods from (so their bandwidth isn't vampirised by connecting clients)
- Any improvements to block definitions (that will be a separate incubator)