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 - February 2025


Hello everybody!

Welcome to our first Development Blog of 2025! It’s been a busy year since our last blog in March of last year, but we’ve got plenty of updates to share with everyone.

We’ll begin this blog by quickly recapping our significant achievements in 2024, before moving onto discussing where we are with our server upgrade.

March 2024 Development Blog
In last year’s blog we primarily spoke about the key challenges we encountered in our initial work on the server upgrade to 1.16. I recommended checking this out if you have forgotten before moving on to read out our latest server upgrade report!

Don't forget you can also check out all of our past Developments Blogs in the Blog Posts folder here!

For this blog, we’ll be covering these topics:
Our Recent Achievements
Server Progress Update
Introducing Curse Breakers
Spotlight on the Grounds Keepers and Poltergeists
The Future

Let's go!




Our Recent Achievements

We made significant amounts of progress this year towards the server in general and our server upgrade to 1.18. Yes, that is correct, 1.18. More information on this below!

Addressing Minigame Lag
We begun the year with an overhaul of our minigames loading code.This was a necessary change as we noticed that minigames would often significantly lag when connecting players. This was because when loading up a server, we often had to download a lot of information from our backend, load in the world, and then connect our players- all at the same time. This caused a lot of lag, and as a result we amended our code so that this loading is all done before we allow players to connect. We were quite proud of this accomplishment as it meant gone were the days where you’d spawn into a game of Flying only to find out that it had started 8 seconds ago.

Daylight Saving Issues
Only back in November did we finally fix a bug that had been plaguing us for years, and this was to do with GUIs and the daylight saving conversion. In the past, we always encountered issues where our daily cooldowns would break in the one hour crossover between 12am and 1am PST on days where daylight saving began. The process of fixing this took around 2 years as it quite literally involved only having a 1hr window twice a year to push some experimental code and check if it worked. After the fourth re-write it worked!

Player Reset Issues
A further issue that we were happy to uncover the cause of was to do with player resets. Often we would notice that when players reset themselves, there was the potential for them to reconnect to Potterworld and spawn in the Great Hall instead of in the Newcomer Experience. Funnily enough this was due to an older piece of ‘cleanup’ code that ran every hour to scoop up any sorted players who were still stuck in the intro world. However reset players were being caught in this, and if you had reset for example at 7:55pm, then logged back onto Potterworld at 8:01pm, you would be picked up by this and teleported. This was a bizarre find and we’re happy to have fixed it!

Interaction Loading
In further efforts to combat the amount of lag on the server, we turned our attention to the amount of data that we actively load and store on our worlds at any one time. A significant contributor to this was what we call our interactions system. This is the system that processes every single ‘interaction’ you make with the server while playing such as: clicking on blocks, clicking on NPCs, walking into regions, seeing particles, seeing NPC disguises, seeing holograms, and going to mob spawners. We had a lot of this information being loaded, however we found that there were also a lot of interactions from old content or that only needed to work in a specific location (such as in a classroom), that was being loaded onto every world and taking valuable space. As such, we implemented a system where we went through all our interactions in order to filter them to only load on their necessary servers. This was a big feat, but we believe it paid off.

To show the extent of this we went from loading 35024 interactions with actions, 16972 interactions with effects, 13060 interactions with holograms, 500 interactions with spawners, and 1713 interactions with disguises to only 8886 interactions with actions, 4346 interactions with effects, 3527 interactions with holograms, 221 interactions with spawners and 502 interactions with disguises on the world.

Player Bags Data Restructure
In both an effort to lessen the amount of unnecessary and duplicate data we store in our backends, but also to pave the way for some of our 1.18 work, we overhauled the backend of player bags earlier this year. Player bags are full of items that we (Potterworld) have created in our internal item system, as a result they all belong to a certain item lookup. This means that instead of needing to save our playerbags as full inventories (which take up data), we migrated to instead saving the backpacks as just containing references to the items. Once we load up your bag, we then spawn in those items based on their reference. This means we don’t need to save data in two places, since we already have it saved in our item database. The result of this was that we reduced our player bags database table from 160M to 9M.

Daily Statistics
With the introduction of more daily activities, we quickly discovered an issue last year where sometimes players would not have their daily statistics tracked when doing daily activities. This was due to an issue where we were basically doing things ‘too efficiently’ and if two stats were added at the same time (such as classes attended and potion classes attended), it would jam when adding them both at the same time, and they would not track. We managed to resolve this issue, and dailies are now again being tracked correctly!

MythicMobs and Magic Teaming
In December last year, we created a new set of tech for use in classes and on the world. This was to do with player teaming, and was first showcased in the Allegiance Brawl Duelling class type. When it came to MythicMobs, we added the ability for mobs not to target and damage players if a certain condition is true (and vice versa so players cannot damage said mobs). Further we utilised Magic to allow players to not be able to cast on each other, much like party friendly fire, but in classes where the professors can create pre-defined teams. We’re excited to see the new gameplay, both in class and on the world, that this leads to!

Spell Interaction Rules
We recently overhauled our internals when it comes to processing actions that are triggered by players casting spells. Previously we used a bit of a hacky method that required you to hold your wand, click a block, and have your spell on cooldown. However, we made it easier to implement this into our tech, allowing us to now simply add one check to see if the player had cast one spell, and it instantly counts as activating that interaction, without needing to punch the block or anything! This was evident in the Winter Waltz event last year where the quests involved a lot of actions that were dependent on players casting a series of spells.

Animated NPCs
This next point is only a small feature, but we recently added support for allowing NPCs to do “physical” animations. This is not as grand as it sounds, but it does allow us to show NPCs punching their hands, or taking damage (turning red), during cutscenes or quests!

Party Visibility
One of the bigger changes we made towards the end of the year was the introduction of party visibility. This was the further we’ve come in player-configurable visibility, where we added the ability for players who are in a party to enable the visibility of their party in areas where players are normally hidden. This has been implemented into places like Echoes, Classes, Challenges and other places in the world such as quest builds!




Server Progress Update

Despite managing to do all of the above QOL improvements to the server, we also made a significant dent into our server upgrade. A large portion of this work was the decision we made in June to target 1.18 instead of 1.16. We have always said from the start that the hardest part of the upgrade was building what we referred to as our compatibility layer that allowed us to adapt our 1.10 code to 1.16+. Setting up the infrastructure in our codebase to support multiple versions of code was the largest change and took the most amount of time. With that having been set up, we were able to easily make decisions such as jumping to 1.18 instead of pursuing with 1.16. As an example, all we had to do was duplicate our 1.16 specific files (there are 31 of these), and re-create them with 1.18 specific code. This often just involved changing a few values here and there to reflect updated Minecraft functions, and in some cases even streamline our code. The other 2,147 files we have remain untouched as they support all versions of Minecraft.

The next question naturally is, why did we pick 1.18, and why did we not go higher. The process begun by scouting the Minecraft wiki, one version at a time to see what differed between them and 1.16. We noticed that 1.17 and 1.18 were the same update that had been split into two parts. 1.17 involved the introduction of new blocks, whereas 1.18 added a lot of behind the scenes things that we wanted to take advantage of. Some of the appealing features of the 1.18 jump were that we could have larger resource packs, it removed some hard coded character limits in places like the scoreboard, as well as extending the height of the world!

While there was an option to jump even higher to say 1.19 or 1.20 as the plugin compatibility existed, we opted not to. This was primarily due to the fact that 1.19 introduced a lot of changes to Minecraft’s chat, which we figured would only delay us further if we had to rewrite our chat completely. So instead we decided to target 1.18, and once 1.18 is out and alive, we will begin to work towards higher versions.

However this jump to 1.18 was not met without challenges as Minecraft also reworked all their internals, which has caused us a few issues and slowed down our work. We were also required to change a lot of our infrastructure as Minecraft required us to run newer software (i.e. a more recent Java version). Nevertheless we have been chipping away at it, and got a pretty decently running server up where we have actually had a few staff members online testing content and playing minigames! Along the way we did encounter some issues with Magic as we’ve also upgraded our Magic plugin to include newer features. However we’ve been grateful to have been working directly with NathanWolf on fixing these issues! We also had to fix issues in our minigames where we had chunks spawning in our ‘void’ worlds, causing the games to lag a lot. In this case, we had ocean biomes and Drowned Zombies spawning in our minigames, so we were required to write some custom code to ensure that our minigames always stay in the ‘void’ and don’t try to turn into a survival server with huge underwater caves. We have also been watching our backend closely as running 1.18 is a lot more demanding, so we have had to tweak general memory allocation along the way to find the perfect balance.

In terms of where we are now: we have a working 1.18 server, which we will be opening to all staff testing very soon. There are still a few bugs along the way that we hope to iron out, but for the most part we just want to stress test it to see what falls out. We have also converted almost all our minigames to 1.18 (except Quabbleball), as well as our classes plugin. We are yet to tackle housing as a lot of environmental things changed in 1.18, and we also need to continue working on our code that safely migrates houses from 1.10 to 1.18!

We are very excited to see what we are able to achieve over these next few months, and cannot wait to put Potterworld onto 1.18 and begin work on the even higher versions.




Curse Breakers

All the action hasn’t been solely dominated by the Developers however. In December we also welcomed back the Curse Breakers to Tech and Dev. We did this to grow the Tech and Dev department and bring our programming roles closer together. We are super excited to see what they achieve in Tech and Dev, as well as have their assistance in upgrading our Magic and Mobs to be 1.18 compatible! As noted above, we are also running a newer version of Magic on 1.18 and cannot wait to capitalise on the new features that it gives us, as well as the new features we get by upgrading MyhicMobs too.

This is also a good time to mention that Curse Breaker applications are open and we’re always looking for new people to join the team. For those who do not know what the role is, our Curse Breakers engage in a variety of requests ranging from warp key effect spells, to death effects, to the particles you see when holding your wand, to the bosses you see in events, quests and Gauntlets, and the cool spells that are added to collectable items. You do not need to be an expert or have even touched any of the plugins in your life to apply. All we ask is that you are interested and passionate, and want to learn, and we will teach you!

You can view the application for Curse Breaker here!​




The Grounds Keepers and Poltergeists

I also wanted to turn the final section of the blog to Tech and Dev as a whole. In December of last year, our Head of Tech and Dev Alexis stepped down. I would like to thank Alexis for her hard work as our head over the last four years, we are forever in debt for her leadership and counsel.

I am also grateful to all of our staff in Tech and Dev. The entire department works extremely hard in getting the content to the high standard that it is when it is delivered to players. I’d like to thank the Grounds Keepers for the endless hundreds of hours put into bug testing every little piece of content that appears on the server (whether it’s an event or a singular message in an NPC).

The Poltergeists also play an important role in ensuring that we are kept accountable to you, the players, and that what we produce is always to a high standard and aligns with what the community wants. Last year we revamped the process that the Poltergeists follow in order to optimise it and ensure that we handle feedback in a more timely manner from all corners of the server. We also introduced our Discord Forums which we are very proud of and think have run extremely well, boosting engagement in player suggestions.




The Future

When it comes to the future, our primary goal is to continue the 1.18 upgrade. However we still like to work on 1.10 Potterworld as we go and add bits and bobs that makes the game more fun and enjoyable. We always enjoy seeing your suggestions and fixing your bugs!

Otherwise in the background we are continuing to do improvements to our backend to make it run smoothly and fix some annoying bugs often caused by a miscommunication between the server and our backend. An example of this is when our GUIs freeze which result in all commands and worlds lagging out. We’ve been improving this code lately and hope to have addressed the issue and fixed it!




Conclusion

That concludes the blog for today. We hope to do these more frequently, especially as we head into staff testing for 1.18. Until then we’re always open to hear your thoughts and answer any questions that you may have!​
 

Comments

Pankakes

Animorphus
Minecraft IGN: Pankakes_81
Griffin
#3
The process of fixing this took around 2 years as it quite literally involved only having a 1hr window twice a year to push some experimental code and check if it worked.
My heart goes to whoever had to suffer the pain of dealing with time, timezones and DST.
 

Harrison

Head of Technology & Development
Head Staff
Staff
Minecraft IGN: Teheeo
Auralock Dark Follower Staff Head Staff Phoenix Raven Vampire Werewolf Arithmancer SPEW Linked Faerie
#4