DISCLAIMER: Potterworld or Droobledore LLC is not in any way affiliated with Mojang AB, J.K. Rowling, Warner Brothers or any company, copyright or trademark.
PotterworldMC PotterworldMC PotterworldMC

Development Blog - January 2023


Greetings everybody!

Welcome to the first Technology and Development Blog of 2023! It has been quite a while since our last blog, but we wanted to take the time this month to reflect on our achievements during 2022, and give an insight towards our plans for the year ahead. In this blog, we’ll be specifically focusing on some of our internal updates that occurred in the latter half of 2022, talking about our recent minigames tournament, detailing our reasons for disabling Soulshard Wars, and concluding with a long overdue update on our server upgrade.

We recommend you check out our previous blogs from 2022 where we introduced our plans for the server upgrade, mapped out our 2022 goals, and gave an insight into some of the inner workings of our server and the types of data we collect in order to help us finetune the player experience!

August Development Blog
In this blog we first announced our plans for upgrading Potterworld to a newer version and discussed the process of developing the player backpacks system.

July Development Blog
Interested in learning how our tech is implemented in-game behind the scenes? Refer to this blog to learn the insides and outs of our Admin Panel.

May Development Blog
Potterworld collects a lot of data on the activities of its players in order to better understand patterns and tailor content to improve the player’s experience. This month’s blog looked on the surface of some of the data collected on player activities and minigames.

For this blog, we’ll be covering these topics:
A Look Back at 2022
Soulshard Wars
An Update on Our Server Upgrade Progress
Guilds
The Future



A Look Back at 2022

2022 was a huge year for development. We made it our priority to focus on updates that gave back to the playerbase, as these were long overdue. We are proud to have been able to deliver each and every one of the following updates last year:

Gauntlets and Dungeons
At the beginning of the year we brought Gauntlets back to the server. Under a new system, players were able to queue for Revenant via /gauntlets and face off against 4 bosses with up to 5 friends! Since then the 5th Battle of Hogsworth Dungeon was also introduced. The new Dungeons plugin allows for Game Designers to create their own Gauntlets and Dungeons, and we hope to see many more return to the server in due time!

Soulshard Wars
Potterworld’s spin on the classical Bed Wars gamemode was implemented as a minigame last year under the name of Soulshard Wars. This was a unique minigame that focussed on collecting spells and resources in order to destroy your opponent’s soulshards. While not very successful, we were still happy to be able to bring to life a new minigame, and it taught us valuable lessons about the future direction for Potterworld’s minigames.

Player Scoreboard Update
At the beginning of 2022 we overhauled our player scoreboard system. This allowed for players to customise what content they would like to see on their individual scoreboards. This included, but was not limited to: the next class, the current house point standings, and players’ custom balances, cooldowns, and party members!

Spell Presets
In March, we introduced Spell Presets to the server. This new system allowed for saving custom spell hotbars under different profiles for easy access when exploring the world, duelling, and general day to day spell usage.

The Return of Quabbleball
In April we welcomed back Quabbleball to the server. This update came with some long overdue bug fixes and improvements to better bring the game up to our standards. We have taken notice of the recent suggestions regarding rebalancing Quabbleball positions, and also hosting minigame tournaments for them. These have not been ignored, and we have plans in the works to hopefully bring these ideas to life very soon. This will be addressed in more detail further down in this blog!

Guilds Update
Our first update post of our April server maintenance was to bring Guilds to life. A project that had been in the work for years, and in discussion since as early on as 2015, we were excited to finally deliver them to the players. The initial guilds system started off as a way for players to create a group with their friends, assign custom prefixes, have a private chat (that never deletes), and to stockpile their gold. But we do know that this release was delivered under the interpretation that it’d be Part 1 of many, however since then we’ve had to re-evaluate how we want to see guilds, and where they sit on our list of priorities.

Since its initial release, we have however made many modifications to Guilds including allowing for the customisation of the guild channel’s text colour, assigning default prefixes, and making guilds more customisable for all those involved.

We have also learnt lessons on how best to moderate Guilds and allow them to be a private place for players to interact with friends, but ensure they are still a safe and respectful space. We will address this, and the future of Guilds in more detail below.

Friends Update
After the release of Guilds, one of our first big projects was to deliver some long overdue updates to our friends plugin. For years this was not achievable due to tech limitations, but as a result of our backend update, we were able to achieve this. We specifically addressed allowing players to have more than 50 friends, and displaying your friends’ current locations on the friends list, as well as making an interactive menu to display all your friends instead of needing to scroll through an endless amount of chat pages!

Party Update
To make more use of our party system, our Party Update was released to accommodate more features that players can utilise to play with other players! This update included party queuing for minigames, as well as displaying the location of party members found in the party member list. This gave parties a more beneficial use which we hoped to achieve in this update.

Ignore System
A long overdue request was to make it possible for players to ignore the messages of other players. Last year we were able to deliver on that very system.

Housing Update
One of our greatest highlights from 2022 was releasing the Housing update. This included a lot of quality of life improvements and bug fixes to not only Housing, but also the Mine Depot. We made it easier for players to customise permissions on their housing, set custom house descriptions, rename their House Elves and Shopkeepers, and added more accessibility to house fly. We also brought back the ability to modify cakes and brewing stands, unlocking many new decorations for players to utilise in their houses.

Player Backpacks
In August after years of development, we were happy to deliver player backpacks. The player backpacks serve as a way to allow players to have more storage across the world, and house various items from a predefined set of configurable categories made by the Game Designer team.

If you’d like to learn more about our backpacks and the challenges we encountered in developing them, please refer to our August Development blog here.

Minigames Update
Our final big player update for 2022 was the Minigames Update. This update featured the release of two new Party Games modes, Speed Build and Parkour Race, as well as the revamp of Capture the Pixies. We also added long overdue support for rejoining select minigames if you crash out; these included Party Games, our Gauntlets and Dungeons, and Flying! We also made various other small improvements to our existing minigames.




It did not end there, however. We also delivered numerous updates for our staff team which not only made their lives easier, but also helped to push the boundaries of the content that is created and delivered back to the players.

April Maintenance
A lot of these updates were all made possible by our April maintenance. This maintenance was not a gameplay update, but instead aimed at upgrading our old infrastructure and making our backend more accessible for other developers to work on. During this time we made various code improvements and refined our very outdated code. You can read more about it in the original post found here and the April Development blog here.

Leaderboards
Earlier last year, we delivered support for having real-time leaderboards in-game. These would have been seen in recent events, such as the Pride, Halloween, and Winter Waltz events to display the top players in various activities. This is also the same system that is utilised in Reputation to display the top players of each town. This was a long overdue feature, and our hope was that it makes it just a little bit more fun to compete with other players in content around the server!

Skin Library
A long time pain-point for our staff team was implementing the skins of the NPCs that are found all around our world. Until this update, we were limited, and the process for setting skins involved uploading the skins to a staff member’s account (or alt), restarting our servers, setting the skin to the NPC, and restarting again. This was a very painful process for large events and releases which had over 20+ NPCs. This process would take numerous hours and involve several staff members.

Additionally our disguises system was limited by not allowing disguises to have custom skins unless they were permanently set on a staff member’s alt. Disguises are the NPCs that change their appearance or visibility during quests.

We were fortunate to be able to resolve this pain point by creating a full online library of all our ever skins created. This new library permanently stores skins on the server, and all a staff member needs to do is run a command, enter the skin ID, and it will be applied to the NPC forever without the need to ever upload the skin to a staff member’s account or restart any of our servers!

Holograms
Towards the end of the year we delivered an internal update to our holograms system. These are the floating pieces of text that you see around the server, namely above NPCs. In previous Development Blogs we spoke about wanting to tweak this system to remove the flashing element from them. This was caused by reloading the text on the hologram every second to account for any updates.

To fix this, the system was redesigned to only send an update when the content of the hologram changes. This removes the constant flashing!

With this update also came the support of adding items to holograms to display when certain conditions are met, instead of just text. We hope these item holograms will allow for more customisation in tech making, where quests will allow players to physically place down and pick up items, and the items will adjust accordingly.

We understand there are still some bugs with this system that do need ironing out, but that is being worked through as we speak!

Minigame Tournaments
Finally we were able to execute a series of minigame tournaments during the Winter Waltz event in collaboration with the Academics team. We believe these were a success, and we are looking forward to hosting many more as this year progresses.



Soulshard Wars

We recently made the decision to disable Soulshard Wars after months of deliberation and analysis of the game’s popularity, concept and our own structural limitations within the Developer team. This was not a decision we made lightly, as countless hours went into the building, coding, testing and balancing of this minigame.

In full transparency, Soulshard Wars has been for the last year our lowest performing minigame. It goes through most months receiving only a very minimal amount of plays, and unfortunately when weighing these factors up, we could not justify at this present point in time the amount of work that’d be required to overhaul the game when we wanted to shift our focus to improving already existing parts of our server, as well as upgrading to a higher version.

Ultimately we believe that one of the underlying causes of Soulshard Wars’ demise was that it did not easily fit into our style of minigames. Almost all of our games revolve around a highly interactive and fast-paced environment. In Soulshard Wars this was not the case. Games went on for up to half an hour, and progressed at a slow pace that involved running around and collecting resources without interacting with other players all that often. For this reason, it was quite easy to get bored and thus after the newness of the game wore off, it became quite unpopular. We also acknowledge that when we polled the community in January 2021, the idea of Bed Wars was one of the lowest ranked outcomes.

Furthermore, with the readjustment of spells, introduction of talents, and the changing nature of the Developer team and its priorities, it was no longer feasible to maintain the gamemode. It is our focus this year to put our server upgrade project at the front, and we have realised that this outweighs work that goes into creating huge new gamemodes.

When it comes to minigames we believe that our priorities should be creating more fun and interactive Party Games modes, as they are not only smaller, but they also have better chances to be played through the Party Games phase rotations. We also plan to focus on improving our existing games and giving their maps a fresh coat of paint. In that regard, we’re excited to announce we have a new Party Games mode in the works at the moment, and are continuing to work away at creating new maps for our already existing gamemodes! Furthermore we look forward to bringing back more seasonal minigames, for example our Star Battle modes, and also hosting more minigame tournaments as the year progresses.




Server Upgrade Progress

Since we first confirmed our plans to upgrade our server version from 1.10 to 1.16 (and beyond) in August, we are glad to report that we have made significant progress towards this goal.

Before we detail our progress, we wanted to first describe in detail our selected approach to upgrading the server, and how this will make it easier to continue to maintain our 1.10, 1.16 and any future Minecraft versions.

Our approach towards moving our codebase to 1.16 involves utilising a Compatibility Layer, a concept that is utilised in NathanWolf’s Magic plugin. This concept is quite simple, it can be pictured as a way of plugging in certain areas of code depending on what version of Minecraft the server is running. This is especially useful in our case as Minecraft has changed quite a lot of their naming conventions since 1.10.

We decided to go with this approach because we found it more efficient than rewriting large portions of code that already worked perfectly fine between the two versions. This was an approach that was utilised in the past, but it came to a point where there was just too much to convert and update, and it became overwhelming. It also meant that we could not continue to develop towards the 1.10 codebase of the server, as our two versions of code had split so far apart that they were unrecognisable after all the changes had been made.

By utilising the Compatibility Layer approach, we’ve been able to commit to both codebases, while only changing small portions of code. For example this might mean renaming a material, changing a field that doesn’t exist anymore, or simply utilising a more efficient method for achieving something that wasn’t possible in earlier Minecraft versions. What this looks like in our code is simply an external call to our Compatibility Layer from inside the main code that asks it to return a piece of code that is compatible with the current version.

An example of this would be our code for preventing Skeleton Horses from spawning on the world. In 1.10 there was no explicit way to tell if a Skeleton Horse had spawned, instead we had to unpack the data of the spawned entity and see if its values added up to those of a Skeleton Horse. In 1.16 however they added support for explicitly stating if an entity was of the type SKELETON_HORSE. In this case, we made a method in our Compatibility Layer to check if the passed entity was a Skeleton Horse or not.

Compare the three pieces of code below! The first displays our 1.10 Compatibility Layer (and existing) code, the second is our 1.16 Compatibility Layer code, and the third is its implementation in our base code.




In the above code we can see the difference between the 1.10 and the 1.16 code. It is now a whole lot cleaner, and easier to implement. However, as this new code is not accessible in 1.10, we must use our Compatibility Layer support to make sure that it is only accessed on the server that is running 1.16. To do this we have declared a Compat which consists of an EntityUtil (where these snippets of the above code are from), however one runs for 1.10 and the other for 1.16. When the plugin is loaded, it will only load the correct file based on the server version, as seen in the image below.


We can now see that from our above code in the third screenshot, when we call for getEntityUtil(), it will grab the corresponding file for this version. And that in a nutshell is how our Compatibility Layer works!

One challenge we have encountered directly relates to the fact that Minecraft has changed a lot of the names of their materials. This is quite problematic when it comes to our saved item data such as shops, vaults, bags, as well as in-game menus that use manually inputted item names. For example one of the many renamed materials includes what was known in 1.10 as a DIAMOND_SPADE, but is now a DIAMOND_SHOVEL in 1.16+. This is something that we will be working through over the next few weeks, and is our next mini-milestone.

  • GOLDEN_SHOVEL -> GOLD_SPADE
  • GOLD_AXE -> GOLDEN_AXE
  • WATCH -> CLOCK
  • SKULL_ITEM -> PLAYER_HEAD
  • FIREWORK -> FIREWORK_ROCKET
  • BOOK_AND_QUILL -> WRITABLE_BOOK
  • FIREWORK_CHARGE -> FIRE_CHARGE
  • EMPTY_MAP -> MAP
  • WORKBENCH -> CRAFTING_TABLE
  • ENCHANTMENT_TABLE -> ENCHANTING_TABLE
  • CAKE_BLOCK -> CAKE
  • … and more!​
Why have these been renamed? Probably to be more consistent with what the actual items are in-game.



In terms of our progress, we have successfully converted a majority of our Core plugin to operate under a Compatibility Layer. However this is only the tip of the iceberg. Potterworld also consists of an API which is hooked up to all of our plugins and contains several of the key objects and managers used across our codebase. For this reason, the API will also need support for a Compatibility Layer added. In addition to that, all our minigames, our classes and housing plugin, as well as any other in-house plugins will also need to be refactored to support more than one version. Finally, our external plugins, such as Magic and MythicMobs need to be updated.

This is no easy feat, and requires several hours of careful testing and debugging to ensure that nothing goes wrong. After that, the true testing begins, as well as the world migration to 1.16 and tweaks to the resource pack and other resources.

This may sound very complicated and overwhelming, and the truth is it is, but we have placed this on the top of our todo list for this year and hope to make as much progress as we can. While we have made the notion towards upgrading to 1.16, we hope that through creating this skeleton of the code via our Compatibility Layer, it’ll make it easier to jump even higher, whether that be done at once or later down the track.

We hope this makes sense, and we are happy to take questions in the comments! Our goal is also to start to provide more regular status updates as the year progresses.




Guilds

When Guilds were initially released, it was revealed under the premise that there would be three phases, each building upon the previous and delivering more features. However as times changed and team members came and went, we realised that creating a whole gameplay element for guilds was too big of a task to take on at the present time.

For that reason, for the foreseeable future we will be placing Guild enhancements onto the backburner. There are still things we would like to do such as Guild housings, or adding a use for Guild balances, however at this present point in time, we have higher priorities that we’d prefer to focus on first.

We have also learned lessons in how we wish to moderate Guilds, and that our previous policies were not the best course of action. Initially the plan was to create a safe place where all elements of Guilds would be moderated, and those who infringe upon the rules would be banned. We have since realised that this was impractical and took away from the fun of Guilds as well.

From here onwards, we changed the way that Guilds are moderated. From now on, only guild names, descriptions and banners will be subject to moderation. Guild prefixes are now also private and will only be shown to the members within your Guild.
Our Guild rules are also accessible at any time via the following link: https://potterworldmc.com/rules/server/#guilds

Finally we wanted to address the bugs with Guild chat. We are not 100% certain why the chat will sometimes stop working, but we believe it to be an issue when multiple Guild members join the server at once. The temporary fix for now is for your Guild members to all swap servers and then rejoin the broken server one at a time, but we hope to eventually fix this so that it is no longer an issue.

We hope these modifications make Guilds more enjoyable, and we also hope that this section clarifies our aims for Guilds, and why they have been put on hold for the time being.




The Future

While a majority of our attention this year will be focused on upgrading the server, our plan is to still release smaller updates throughout the year.

We believe that our minigames are an important part of the server, so it is our goal to work away at our existing games throughout the year. First up we will be giving the powerups in Melting Floor a fresh coat of paint, as well as implementing a new Party Games gamemode. We’re excited to show these off once they are done!

We would also like to revisit the recent Quabbleball feedback, and create a space for real-time feedback as we plan on tweaking the abilities of each position. We believe this to be the best way to ensure that the game gets the attention it deserves!

In addition to our minigames, we also have noticed that in recent times varying opinions about our minigame maps. In that regard, our intention for later on this month is to add support for leaving a review for the maps you play in minigames. This will work similar to the reviews in Party Games phases, and we hope to then use this data in determining which maps are popular for not only our map rotations, but also for future map building!

Finally, we would like to bring back more tournaments, including Quabbleball tournaments! While the Quabbleball ones might be a while away due to wanting to overhaul the positions first, we are aiming to host tournaments for our other games such as our seasonal Star Battle ones when May 4th comes around.

That’s all we have for now, but there’s no telling what else might be in store. As always we’ll continue to review forum suggestions for various other areas of Development and consider them where applicable!




Conclusion

And that brings this month’s Development Blog to a close. Thank you everyone for reading and we hope you enjoyed it. We’d like to note that there will be no fixed schedule for these blogs as we’d rather be able to deliver detailed blogs with key information, than rushed blogs that don’t provide much insight. As always however, feel free to leave your feedback or ask questions in the comments below and we’ll try to address them!​
 

Comments