Back in 2017, surva network operated its own server network with a variety of game modes - it was shut down in mid 2017. Some of those game modes included huge plot worlds where players could get their own plot and build stuff on it.
Recently, I received a message from a former player if it would be possible to publish the world of the creative plots. I liked the idea of enabling players to explore this world of the shut down server again, however, it could be challenging to get such a large world in an over 6 years old format working in a recent server version.
In this post, we're explaining our journey of upgrading the data to a usable format, publish it and provide a server experience for players to explore the world and find their plot again.
Upgrading the world data to a modern format
When checking out the world data folder, I found out it was last changed in May 2017 and about 11 GB of size.
So the first attempt I tried was to just drop it into the world's folder of a server running on the latest version of PocketMine-MP. As expected, it failed.
Changing the generator to a generic one
It started complaining about the plot world generator was not present on the server. It wasn't the plan to upgrade the plots plugin, so the first thing I did was changing the generator to something generic like FLAT
(which would just generator a flat grass world when a player enters chunks which have not been generated yet).
For editing the level.dat
file, I used a web-based tool called Dovetail to change both the generator name and options in order to get the world loaded:
Upgrading the world data format
The actual process of converting the old world data to the current default format went actually straight-forward. After loading the world using the Worlds plugin, PocketMine started the upgrade process of converting the chunks to the new format.
However, the world data was huge and 11 GB of chunk data had to be converted. There were 2.609.098 (2.6 million) chunks in the world, and the conversion process was running with average performance. It was more or less converting about 1.000 chunks per second on my local machine.
Calculating further, it would take about 43 minutes for the process to finish. I was taking into consideration running the process on a stronger cloud machine which could probably do it way faster than my 7 years old i7-6700K with 8 GB of RAM, but in the end, I decided to wait for the 43 minutes and write this blog article meanwhile.
The 2.6 million chunks were finally converted in 41 minutes with an average of 1063 chunks/sec.
The conversion also had a very positive impact on the size of the data: in the new format, it was just 337 MB of size. Compared to 11 GB, that's just 3 % of the original size! Great to publish the data later as I already started getting concerns about traffic cost.
Testing to enter the world
The moment of tension had come, let's try if I could enter the world and it was in an acceptable state.
And it was working fine!
However, there were several minor issues I noticed, and some of them needed to be fixed.
First, there was this strange "building" which was likely created due to a bug during world conversion.
As I couldn't find more of them, I decided to ignore this issue and just break the one I encountred next to the spawn manually.
Second thing I noticed was that some blocks in the world were deceasing, including bushes, or snow melting. This can be solved easily using a plugin blocking those processes later.
And the last thing, also nothing critical, were some error messages about non-existing blocks on the server's console:
[11:56:32.509] [Server thread/CRITICAL]: pocketmine\data\SavedDataLoadingException: "No deserializer found for ID minecraft:empty_map" (EXCEPTION) in "pmsrc/src/item/Item" at line 723
Probably they just removed, renamed, however, some single blocks. As the world made a good impression on the overview, I didn't investigate further.
Enabling players to find their plot
The next challence was to build a way for enabling players to find or teleport to their plot. There's only a bunch of players which still know how to find their plot from the world's spawn. Most players, including myself, have relied on the teleport feature of the plot plugin.
The idea on solving this was to build a simple plugin just to show the plots of a username and teleport to them based on the backed up data source of the plots plugin.
Accessing the plot data
After trying attempts of putting the database dump into a JSON file or SQLite database, both of them failed because the amount of data was just too much and performance of both my data IDE and probably later the game server broke down.
So it was additionally required to deploy an SQL database server for querying the player's plots. I started importing the data to my home lab SQL server and try out some queries, which worked out fine:
Creating an in-game plugin for finding plots
On top of this data, a plugin was created where players can enter their old player name which is associated to their plot, and can then choose one of their plots they like to visit from a list. Of course, it also works the same way for the plots of their friends.
Final result: world data and exploration server
In this section, we provide the world data for playing on your own, local server.
Download the world
You can also download the world for exploring it on your own, local server. This will also enable you to build in the world.
Download link for the creative plot world: static.surva.net/server-memories/creative-plots.zip
You can add this world to the worlds folder of a PocketMine-MP server. For details on how to setup it, see the docs.
License
The provided data is solely available for your personal use. Commercial use, e.g. on a public server, is not permitted. Additional permissions may be gained in written form by the surva network team.