Noxesium is a Fabric mod developed by Noxcrew, and it just got a big update that we want to talk about! This article will briefly start what Noxesium does for those unfamiliar with it before diving into a more technical explaination about the update and Noxesium's purpose and future.
What does it do? Some of the key features in Noxesium v1.0.0 include:
- Significantly improving FPS and performance on MCC Island (and other servers!)
- Offering additional visual details, such as showing player heads in the UI
- Fixing various bugs in Minecraft that affected MCC Island e.g. such as the TAB menu not displaying the hat layer, weird blinking on the moving walls in HITW or models not rendering when you don't look directly at them
- Adding a system which gives the server more control over the client's actions, such as locking the camera (for smoother camera paths), disabling trident collisions or preventing glitches
- Creating a platform for other community developers to create client-side mods that interact with MCC Island
This shows the different types of features we plan to add to Noxesium: improving performance, fixing bugs, improving player experience and giving power to community developers. We will continue iterating on Noxesium over time, but this release represents the starting line. Noxesium has everything we want it to have and now we can continue building onto it into the future.
If you want to start using Noxesium you can get it in two different ways: it's bundled into Lunar Client, so if you use a recent version of Lunar Client with Fabric & Sodium, you should also have Noxesium installed already. Alternatively, you can manually install Fabric and download it from Modrinth and GitHub. It make take some time for Lunar Client to get the latest Noxesium update as they have to test for issues when combined with their other mods, but it shouldn't take too long.
If you're not a developer or interested in the technical things behind mods, that's really all you need to know!
Now for the technical details Now that you've signed up to hear all the technical details, we should clarify that last key feature a bit more. It is quite an important part of Noxesium; with the recent update, Noxesium was restructured to be a better platform for others to work with. Now, Noxesium can be hooked into by other client mods to receive additional information sent by MCC Island. Additionally, we have made parts of our server implementation open source which should help community members that want to write their own server-side implementations. Although we are in the early days of this system, we hope to expand it in the future and help it grow into a useful tool for community developers. More on this later.
What is the vision? We hope for Noxesium to offer us a way to make useful changes to the client that improve the experience of players, this includes improving performance in situations specific to MCC Island (situations that aren't already optimised by other mods), fixing bugs and adding features. However, we're still going to try and make things for all users first! We only intend to add something to Noxesium if there is no way to make it work without making client changes. We might still add some occasional exclusive features through Noxesium, but we want to keep the number of exclusive features limited. Developing features just for Noxesium users takes up quite a bit of time and not everyone uses it, as such we see it more as a place to direct people that want the best experience rather than a bandage to cover up a bad experience, not using Noxesium should still offer a good experience, it's just even better with.
A good example of how this vision comes into play is adding music to MCC Island. We have talked about it a lot and have come up with a way that it could be built into Noxesium, but we are still primarily looking at a solution where any user can opt-in to download a resource pack with the music added in. After doing so, we can then look into improvements for Noxesium users to download music in the background. That way, Noxesium users get both music and fast pack loading, while regular users still get the music. This is also one of the reasons why it has taken a while, we are still looking into the best approach to add an opt-in version of the pack that works with our backend tooling for resource pack creation, and admittedly it's not very high on our priority list.
What about improving fps/performance? Another goal of Noxesium is improving performance as that's really important for many users with low-end computers. MCC Island has a unique relation with client performance in that there are incredible mods like Sodium that do a great job optimizing already, but while you’ll achieve a high FPS in single player, your FPS on MCC Island may not improve as much. This is because performance improvements largely function through reducing bottlenecks; your FPS is limited by the slowest running part of the game.
In single player that is usually chunk rendering, which Sodium optimizes by an incredible amount. But, on MCC Island, you don't move around and load too many chunks and the chunks don't change too much either. Instead, most frametime is taken up by entity rendering in the hub and UI rendering in the games. For example, rendering the chunks might only be 5% of the rendering time, so even with the recent Sodium 0.5 update which doubled chunk rendering performance for some, that's still only 2.5% less time spent rendering chunks on MCCI.
As such, in Noxesium's recent update, we looked into optimising entity rendering and managed to improve fps by 15-20% based on early testing, which should amount to a noticeable improvement of fps on MCCI. The goal for the future is to further optimize entity rendering by switching to display entities as well as looking into changes to our UI rendering to improve performance in games.
Is there anything interesting for community developers? An oddly specific question, but yes, there are many interesting things. With Noxesium's recent update, we've overhauled the entire API and released v1 of it. This includes the creation of a module in the Noxesium GitHub repository called "api". This module contains some code that MCCI uses for its server-side implementation that handles interacting with Noxesium. We hope this allows others to more easily use Noxesium for their own projects.
The API is now also built around an extensive versioning scheme, allowing the gap to be bridged between different client and server versions more easily. To be specific, any arrangement of outdated client/server combinations now works, a client can send data in an outdated syntax to support an older server, and an older server can send data in an outdated syntax to support an older client. This should allow us to update Noxesium on both the client and server’s end without requiring users to update immediately or community devs to constantly update their mods. All data is now also structured using fabric networking packets. The packet-like structure should make it easier to understand data structures and build your own server implementations.
The API module is also published on our new Noxcrew Maven repository, so anyone should be able to easily use it as a dependency. You can also find SheepLib, a library we created that helps with adding HUD elements in the form of dialogs which we use for one of our internal mods.
As previously mentioned Noxesium is also our way to provide client mods extra information through so-called plugin messages. These are additional packets sent by MCC island that client mods can hook into for their own code. These packets are directly implemented in Noxesium which means we can easily share information on syntax changes with the community through keeping the packets in Noxesium updated. Anyone can have a look at them and easily see the format they can expect to receive the information in. Currently, we are in the early days of this system so only 2 custom data packets are sent: one that sends which server you connected to and one that sends the current game phase. This should allow basic detection of the current server and current game phase (pre-game, post-game, podium, etc.).