Details about the upcoming release of uMod
- Support policy
- uMod 1.0
- Unit Testing
- New compiler
- New web client
- New database client
- TOML support
- New auth drivers
- Logging configuration
- Run-time string interpolator
- Added configuration/localization schematics
- Added file versioning
- Added locale schematics
- Added Hook Decorators
- Improved OnlinePlayers
- Command localization
- Dependency injection
- Parameter substitution
- Hook generics
- Hook events
- Hook decorators
- Hook namespacing
- Options and requires
- Duck typing
- Type promises
Introducing a single coherent vision to supercede Oxide with fundamental improvements to the deployment strategy and implementation of every major system, resulting in a more reliable, flexible and performant modding platform.
Introducing an automated testing suite for core development and universal plugin development. Improvements and updates may now be vetted properly ensuring that each update fulfills all requirements.
A new Roslyn-based compiler has replaced the old mono compiler. C# 9 features are now supported in plugins.
A new standalone web client comes bundled with uMod which enables web requests to be made using the latest security standards available regardless of game limitations.
A new standalone database client has replaced Oxide.MySql and Oxide.Sqlite. The database client can be accessed by an asynchronous API and includes an object-relational mapper.
Configuration files and localization files may now use TOML (Tom's Obvious Markup Language) format in addition to JSON.
New configuration options to store player and group data in a database (Sqlite or MySql), JSON, or protobuf files.
Logs are now stored as
.log files. Logging behavior including log formats and locations may now be configured. Multiple loggers may now be combined using the
stack driver. The new logging drivers include
Aside from existing formatting options (such as
string.Format and compile-time interpolation), a run-time string interpolator was added that allows for dynamically named parameters.
Configuration schematics are now properly supported in uMod as the default way to shape configuration and localization files.
Configuration and localization files are now versioning and file upgrades may be implemented using the new
Locales provide a simple way to scaffold localization much in the same way configuration schematics are implemented.
A hook decorator is a simple wrapper which allows for contained hooks to be managed separately and as a group.
The OnlinePlayers system is now an optional hook decorator that works for all uMod-supported games. The hooks used will not exist unless OnlinePlayers is used, which should slightly improve performance for plugins which do not use OnlinePlayers. OnlinePlayers now supports an
IPlayer key type (in addition to the game-specific
Introducing Gates to provide a simple way to authorize any hook or command using custom policies or permissions.
Command names, descriptions, and help text may be localized using the new locale provider or the legacy lang provider.
Hook parameters may now inject parameters from the service container in addition to the originally provided arguments.
GamePlayer* are now interchangable in all hook methods. Custom substitutions may also be implemented.
Type constraints are now respected in hook signatures when matching hooks.
Hook events contain state information that is passed through all hooks in any given call-stack which allows for better integration and the ability to more easily avoid hook conflicts.
Hooks may be separated into decorators which allow for multiple hooks to be managed, subscribed, and unsubscribed simultaneously.
Hooks may now be namespaced to allow for the simple separation of concerns within a single plugin.
Plugins may now name multiple plugins for a single dependency field.
PluginReference attribute (used for plugin integration) was deprecated and replaced with
Requires attributes. A
PluginReference is roughly analagous to an
Optional dependency, and
Requires is a similar concept except that it ensures a dependency is loaded. A dependency marked
Requires should not be confused with hard dependencies in Oxide that used
// Requires comment annotations. Duck-typing was added to more easily allow for the communication of type information between plugins which replaces
When a plugin fails to compile due to a missing type, uMod will automatically check any subsequent compilations for the existence of the missing type. If the missing type is found then the plugin that originally failed will be re-compiled.
Asynchronous multi-threaded operations are now easily supported via promises across all games using promises, even ones without
A new API for interacting with the filesystem and data files is now available with asynchronous I/O.