Wynntils is a Minecraft mod using Architectury to support Fabric and NeoForge, currently supporting 1.21 & 1.21.1. It is a rewrite (originally codenamed Artemis) of the original Wynntils mod, now known as Wynntils Legacy. I started out porting a feature from the original mod that was yet to be added and eventually added more over time to the point where I was asked to join the official development team.
The mod was originally released in an alpha state with many features missing from the original but a lot of the framework existed for them to be added. Over time, many of these features were ported from different contributors and also some new features not present in the original were added.
This is the first open source project I have contributed to so it has definitely helped me to have a better understanding on working on a bigger project and the process to go through getting a feature merged.
Since I have now become an official member of the development team, I also have more experience working on a larger project as a team member since I can easily communicate with the other developers and I am more accustomed to reviewing others code.
GitHub Links
Prominent Contributions
Listed below are some of the more prominent contributions I have made to the project. As of the time of writing this I have over 200 contributions to the project so listing them all here would not be practical.
The waypoint manager was the very first contribution I made to Wynntils. It existed in the original version of the mod and was something I liked for the brief period I used that old version for so I decided to port it myself.
At the time it was missing 3 features from the original version those being the import button, export button and icon filtering. Importing was added by another developer at a later date and I added exporting later too. The icon filtering did not come until I remade the GUI as I was more confident in my skills.
The redesign of the screen featured searching for waypoints by name. Sorting waypoints by icon, name or any of the coordinates. Filtering by icon to only display waypoints using specified icons. Selectable widgets so you could mass delete or export specific waypoints. And finally the list of waypoints was now scrollable instead of paginated.
The pull request for the original port is here.
The pull request for the export button is here.
The pull request for the redesign is here.
After the waypoint manager another UI feature that I thought could be interesting to work on was the custom seaskipper screen.
This screen replaced the container shop that the base game uses and instead replaces it with a map view and creates clickable borders around the destinations available. Clicking one of these destinations will press the corresponding item in the original UI automatically.
Another developer commented on the original post with an idea for a departure board
that would list all available destinations so for users who did not know the map locations they could use that instead, whilst still having a visually improved UI compared to the base game.
Eventually I decided to merge the two screens and make a few changes as well, such as making the departure board list scroll so that it would be better suited for when more destinations were added.
The pull request for the original port is here.
The pull request for the departure board is here.
The pull request for the redesign is here.
Banks on Wynncraft allow players to store items in various types of bank which contain a number of pages. As navigating through up to 21 pages can take time they have the ability to quick jump
to specific pages.
Due to vanilla limitations they can only have a set amount of destinations, so a feature from the old mod allowed users to set custom destinations and the mod would use the default destinations and the next/previous buttons to navigate to the desired destination as fast as possible.
I ported this feature over for regular banks originally and then expanded it to support other bank types like the bookshelf, misc bucket and block bank.
Another feature from the original mod was the ability to set custom names for each of the pages in your bank, so I also ported that functionality including support for the newer bank types.
After the Wynncraft 2.1 update, banks were overhauled and their quick jump buttons were removed and instead now required pressing 1-9 whilst hovering the next/previous page buttons to perform the quick jumps. To work with the new banks I opted to add a widget to the side of the screen with buttons to jump to any page, instead of just 6 custom destinations.
As the new UI for banks no longer displayed the page name, I had to rework the custom page names feature too so I merged the quick jumps feature with the custom names feature and the names are displayed on the same widget.
The pull request for the original quick jumps port is here.
The pull request for adding bookshelf and misc bucket support for quick jumps is here.
The pull request for adding block bank support for quick jumps is here.
The pull request for porting custom page names is here.
The pull request for reworking the features for the 2.1 update is here.
On Wynncraft there are 3 languages. English, Ancient Wynnic and High Gavellian. English is what most NPC's speak and the majority of the playerbase too but certain NPC's will occasionaly speak in one of the other two languages. These use certain unicode characters that are changed via the server resource pack.
What this feature does is convert those unicode characters back into plain English characters so they can actually be read by players, this works for both player chat messages and NPC dialogue.
It also allows players to easily send messages in these languages either via surrounding the text in <<>> for Wynnic or [[]] for Gavellian, or by pressing the buttons in the corner of the chat screen to change input language.
The pull request is here.
In the mod there are many features each with varying amounts of configuration options so the settings screen needs to be easy to navigate to help users more easily configure the mod to their liking.
Up until this redesign, the screen was just 2 book pages, the left with a list of features, a search bar and a save and cancel button. And the right with the config options for the feature. Both sides originally had fake
scrolling, so whilst there was a scroll bar it still used pagination and the mouse handle didn't follow the mouse cursor properly.
For the redesign I added tags on the sides of the book to free up more space on the left page to see more features at once and also category tags so you could filter to find relevant features quickly. There are also checkboxes by features to quickly enable/disable them.
Searching was also improved, features now show a number next to a feature to say how many config options match the search query and selecting a feature will scroll the config list to ensure that matched option is visible.
Both the feature and config list also now have smooth scrolling and the scroll handle correctly follows the mouse.
The pull request is here.
Due to Wynncraft being based on vanilla Minecraft they use chests (containers) for most of their user interfaces and using the server resource pack they can modify the texture of the background and various items to create those custom interfaces.
As many of our features rely on knowing if we are on a specific container a ContainerModel class was made so that other classes can query it to check if the current screen is the requested one. This was done by calling a method such as isSeaskipperScreen or isLootChest. This meant the class needed methods for every container and also stored the pattern for the container title.
For the refactor I instead created a new abstract class WynncraftContainer (renamed to just Container in a later pr by another developer) that had a Pattern as the only parameter for construction that would be used to create a Predicate. The Model registered all known WynncraftContainers on initialization so that each time a container screen opened it would check the registered containers for a match, then other classes could simply request the current container and do and instanceof check to see if it was what they wanted.
Certain containers also have different properties such as ScrollableContainerProperty or FullscreenContainerProperty. These are helpful for other features so they don't need to store certain information, such as for ScrollableContainerProperty the slots of where the next/previous buttons are can be stored in a scrollable containers class.
The pull request is here.
The mod has an advanced filtering system that allows users to filter items on our guide screens or in their own banks but the syntax isn't the most user friendly.
To search for items with Mana Regen greater than 5 requires entering manaRegen:>5
or to sort by level sort:level
and reversing that sort sort:^level
.
What this screen does is present the user with a UI that will create the filter queries for them they only have to interact with buttons and type in the values for the filters, instead of also typing the filter name.
The pull request is here.
Raids are a feature on Wynncraft that see players team up to tackle challenges and a boss fight. This features adds an overlay to the screen showing your time spent in each of the 3 challenge rooms and the boss room and prints the data to chat after completing the raid.
Originally the feature worked by looking for labels to detect current room, all challenges besides 1 had a label with the text Instructions
on it and all of the power up rooms have a Blacksmith in them, so checking for that nametag worked for finding that room. A combination of chat and title checks were also used for seeing what a challenge was completed or the raid itself was completed or failed.
With the 2.1 update for Wynncraft the raid system was overhauled and so the tracking had to be updated as well. It now uses the scoreboard to display progress so that is used for determining current room for most situations and chat is checked for the completed message as some challenges hide the scoreboard to play a cutscene on completion and the title is still checked for raid completion/failure.
The pull request for the original feature is here.
The pull request for the 2.1 update is here.
The overlay selection and management screens are essentially a separate settings screen specifically for overlays. The previous selection screen was just a list of overlays that you would click on and that would take you to the management screen to move and resize them.
For the redesign, the selection screen now also has the config options for overlays so you don't need to go back to the settings screen to edit them. It also features a preview button and filters to only show built in or custom overlays and there are buttons to add new info boxes and custom bars instead of having to run a command to add new ones.
The management screen didn't need as much of a redesign as it already worked well, the main change was being able to see the actual overlay as you moved and resized them instead of the green box showing the area it covers.
The pull request is here.
There are a few config options and screens that allow users to input a custom colour to be used and previously this had to be entered by the hex value but this feature adds a screen that allows users to easily pick a colour by using sliders and their mouse to select a colour.
The pull request is here.
The 2.1.1 update was a minor update for Wynncraft that changed a few things that broke compatibility with the mod.
I updated the mod to be compatible with the beta version of the server so that once the update fully released then we could release an update to support it.
The pull request is here.