The large majority of effort in 2019 was put into the development of uMod, which will be replacing Oxide and provide a much more flexible and extensive platform for plugin development and game server modding.
Some of the major developments include...
- New compiler. The new incremental compiler will upgrade plugins from C# 6 to C# 7, with C# 8 around the corner.
- New database client and abstraction layer. The new DBAL replaces the Oxide.Sqlite and Oxide.Mysql extensions, making database a first-class citizen in uMod. There is a lot to mention with this, but expect more information when the documentation is released.
- Unit testing! We have implemented nearly 200 unit tests for uMod core and another 100 tests across the secondary systems. We cannot understate how important this development is. Unit tests have allowed us to iterate quickly over systems that suffered from serious technical debt and dramatically improve uMod while ensuring that we don’t break existing functionality.
- Coding against interfaces. We have added nearly 60 interface to describe core functionality. These interfaces ensure the core is less brittle, easier to test, and is crucial for the new dependency injection implementation.
- Dependency injection. Hooks now have the benefit of dependency injection. We will provide more details about this in the upcoming documentation.
- The old DirectCallMethod implementation for invoking hooks was replaced with a new implementation based on ExpressionTree.Invoke which dramatically improves the flexibility of hook invocation with negligible performance impact.
- Asynchronous filesystem I/O. One the biggest bottlenecks in Oxide is reading and writing to/from the filesystem on the main thread. An extensive and shiny new filesystem API was added which performs these operations on a background thread which frees up the main thread to do other things.
- TOML configurations. We have changed uMod (not Oxide) configurations to use the TOML format and added the ability for plugin developers to use TOML in their configuration and localization files.
- Expanded pooling. Oxide has a very limited pooling system. We have dramatically expanded the pooling options and implemented it throughout uMod to minimize the overall memory footprint.
- Expanded logging. The Oxide logging system was decent, but not very configurable. The new logging system is much more configurable.
- String interpolation. With help from LaserHydra, we have implemented a runtime string interpolation system which allows for named variables when formatting strings.
- There is more, but in total the overhaul is a significant departure from Oxide in many important and fundamental ways. We'll make sure to post more on each change as we move forward.
While the focus these past months has been mainly on the uMod core and related tools necessary for everything to come together, we do have a few tidbits we have been working on with the site...
- Plugin collaboration and patching was added to give developers better options to collaborate without requiring them to use GitHub.
- ElasticSearch. We implemented the ElasticSearch search engine for plugin and user searching. ElasticSearch dramatically improves the performance and flexibility of searching. More work will be done on expanding this to more systems and improving the ability to search by particular things (like commands or documentation) as time permits.
- Guides. We have added a new dynamic documentation system called “guides.” The uMod documentation will use this new system. We are incrementally moving all of the documentation to the new dynamic system.
- Site performance. Calytic is constantly working to make sure the site is performing smoothly and there are little to no interruptions. We've had to deal with a few attacks within the past year, along with some abuse of our site. Tireless!
- Unlicensed plugin warning. We added a notice to unlicensed plugins to warn server owners and developers about using unlicensed plugins. We will be encouraging plugin developers to apply a permissible open source license to their plugins going forward.
We know that you are all eager to use the Marketplace and sell your work there, we're just as eager to get it launched! A lot of the functionality for the Marketplace hinges on uMod being released along with the tools necessary to make the Marketplace secure, easy-to-use, and reliable.
We will be focusing on the Marketplace more once uMod builds start rolling out for testing to ensure that everything is working and running smoothly for its public launch.
We've been working to involve some of our more dedicated community members in the plugin review process for plugins. This will help speed up the approval process and allow the Calytic and myself to focus on the other aspects of the project and website. It's easy to get burnt out, so we certainly appreciate the help!
The purpose of reviewing plugins is to point out potential issues, check for malicious code, and to make sure that the plugin generally follows our general guidelines and standards for public plugins. Please keep in mind that this process is still being developed and fine tuned, so bear with us.
There are still a few plugins that need some loving attention! If you are a currently an active developer in our community and you are interested helping out by taking over maintaining a plugin or two, take a look at the list of unclaimed plugins. If you have not yet submitted any of your own plugins that have been approved, you won't be able to claim any of these yet.
ADVERTISE WITH US
Currently there are 15 ad placement spots throughout the site, which can be found where the "Advertise with Us" or existing partner banners are located. Some of these slots are already spoken for, such as the ones currently showcasing Game Server Kings; but if you are interested in advertising with us to support the project, please contact us along with details about what you're looking for and we'll see what we can work out!
As many of you have already discovered, we do have a Discord! While we are planning to have the Discord linked/synced with our site eventually, you can for the time being join using this link. Keep in mind that this Discord is not instant chat support, but feel free to chat and get to know some of the community more.
We've had a few community members jump in and help with community support, writing guides, reviewing plugins, helping our in Discord, etc. We certainly appreciate the help! If you see one of them around, make sure to say thanks!