Upgrading Minecraft to get to the newest features is always fun unless it breaks your old maps and creates huge and ugly artifacts across them. Read on as we show you how you can take an old Minecraft map and bring it into a new version of Minecraft without risking really ugly glitches in your terrain.
What’s the Problem?
Minecraft’s enormous and procedurally generated map is created using a terrain generator algorithm fed by the world’s seed (an alpha-numeric string either generated at the time the world is created based on the system timestamp or supplied by the player). This seed serves as a pseudo-random number that is fed into a complex equation that then generates the Minecraft world around the player, chunk by chunk.
This system works very well, and it’s the magical underpinning of the Minecraft universe wherein players can keep roaming and roaming with new hills, mountains, caves, and more generated on the fly for them to explore.
Where it breaks down (and what we’re concerned with today) is when players bring an old map from a previous version of Minecraft into a new version of Minecraft. The world seed remains with the world map for the life of that map but what the terrain generation algorithm creates based on that seed can change significantly between major Minecraft versions.
This means if you load a map created in Minecraft 1.6.* into Minecraft 1.8.* then the transitional areas between the area you’ve already explored and the new areas you will explore in the future will be very ugly as the terrain generator will generate completely mismatched terrain. Mountains will plunge down sheer faces into oceans, strange perfectly square patches of forest will appear in deserts, and other ugly artifacts will appear on your maps.
Let’s take a look at how ugly that can be by loading creating a map with Minecraft 1.6.4 and then loading in Minecraft 1.8.3. First, here’s a screenshot of our sample map. The seed for our map, if you wish to play along at home, is 1261263041493870342. For information on using seeds, check out our Minecraft lesson Creating Custom Maps.
First, let’s highlight our methodology. We’ve loaded the map in Creative mode and flown straight up from our starting square. The view distance is set to “Far” (early versions of Minecraft didn’t allow for numeric chunk-based view distance, but we know that Far is equivalent to a view distance of 16 chunks). This means that surrounding our spawn point there is a grid of 32×32 chunks generated by the terrain generator.
After creating this map we waited for all the chunks to generate and our view to populate in all directions. We then we logged out and loaded the same map in Minecraft 1.8.3 and set our view distance to 32 chunks. After waiting for the distance to render we flew around the edge of the old map (approximately 16 chunks away from the center) and looked at where the edges of map generated with the old algorithm merged with the new one. You know the village you can see in the distance in the desert above? It has a rather peculiar shoreline now.
The above screenshot was taken after flying to the other side of the desert village, looking back toward the center of the map from the newly generated terrain. The old generator read the seed and said, “Make this area a desert!” but the new generator said, “Make this area an ocean!” You can see the crisp line traveling horizontally that delineates the old terrain from the new.
If that’s not glitchy and ugly enough for you, consider this screenshot from the jungle area seen to the north of the spawn point and the village in the image above.
There it is, a big beautiful mountainous jungle biome. Let’s take a look at how great it looks from the other side.
Lovely. More ocean and, thanks to the height of the terrain generated before we loaded the old map into the newer version of Minecraft, the drop from the top of the of the jungle mountain to the ocean below is a around 50 blocks. Perhaps we should be thankful the glitch generated an ocean and not a field as such a drop would have surely done us in.
Just in case you’re still not convinced that rendering glitches aren’t completely hideous, let’s enlist the help of our old friend Mapcrafter to render a 3D Google Earth-style view of the map we’re currently exploring to show you how truly brutal the clashing of terrain generators really is.
What we can determine from this top-down view is that the seed in the 1.6.4 generator wanted to create an area around the spawn point that was an intersection of jungle, desert, plains, and taiga snow forests. What the 1.8.3 generator wanted to create in that exact same place is a huge ocean with a spattering of small islands and a large (as seen in the lower area) land mass with mountains and forests.
When the two clashed together Minecraft essentially said, “OK, these chunks already exist so we will not attempt to generate them again, but the player needs new chunks so we’ll apply the current version’s generator.” The result is the horrible mishmash you see above.
Now, we’ll be the first to tell you that our perfect 32×32 out-of-place square is an extreme example where the edges are painfully obvious. We purposely created a small square map in Minecraft 1.6.4 expressly to both hyper accentuate and localize the extreme changes between the old and new terrain to showcase it for you.
A “lived in” map where you’ve been organically exploring and playing the game won’t have such a perfect square shape but will instead have all sorts of forks, curves, and such where you’ve moved around the map without thoroughly exploring every inch edge-to-edge. This kind of map will have sprawling glitches along the extensive edges as well as pockets of glitches inside the interior map where the player never ventured and thus no chunks were very generated. Those too, the missing interior chunks, will suffer from generation glitches that will leave strange artifacts behind (like a perfectly square patch of desert sand in a the middle of a snowy biome).
Fortunately for all of us, there’s a very clever tool out there which does a fantastic job smoothing the seams between the old terrain generated by a previous version of Minecraft and the new terrain generated by the new version. Let’s take a look at how we can save our maps from a life of ugly glitched-out terrain with it.
Smoothing Terrain Transitions with MCMerge
MCMerge is an open source Minecraft editor that does one thing and one thing very well: it carefully massages the borders between old terrain and new terrain so that the transitional space is a gentle slope down to a river that unites the two biomes without the jarring and unnatural transitions we saw in the previous section.
You deploy MCMerge in between upgrades so that it can learn and chart the boundaries of your old map, then you load the map in the new version of Minecraft and do some exploring (or use a tool like Minecraft Land Generator to do the exploring for you with automatic chunk-generation), and then you run MCMerge again, and it traces over the seams between the old terrain and the new terrain, sculpting them into natural looking valleys and crevices with a river at the bottom such that your transitions no longer look like broken china but natural landscaping.
Let’s break down the sequence of events outlined above and illustrate the transitions with screenshots and renderings to highlight how the changes take shape.
Select Your Map
For the purposes of this tutorial we’ve opted to use the same seed and the same before and after Minecraft versions as we did in the previous section: Minecraft 1.6.4 and Minecraft 1.8.3. The only difference is that we recreated the map with the same seed and then roamed around in a more organic fashion in survival mode to create a more natural map shape (and not the perfect square we previously showcased).
Here’s what the tutorial map looks like when rendered in Mapcrafter.
We’ve zoomed in on the south-western edge where we’ll easily see, later on, where the new seam is smoothed over.
Whichever of your maps you select it’s important that you absolutely, under no circumstances, load and explore the map from your old version of Minecraft in the newer version of Minecraft until you complete the first round of the MCMerge process as doing so may introduce irreparable glitches to your map.
Also, before you proceed it is important you’ve backed up your selected map for safekeeping. We’ve had no trouble with MCMerge or, for that matter, any of the numerous world editing tools we’ve used over the years, but it’s always better to be safe than sorry.
You can grab a copy of the most recent edition of MCMerge over at the official MCMerge topic on the Minecraft forums. The download comes in two flavors, the Python code for Mac OS X, Linux, and other OS users (which requires you to download and install Python for your OS and a handful of dependencies outlined in the readme file) or the pre-compiled Windows version which only requires you download the Microsoft Visual C++ 2008 Redistributable Package (x86) if it is not already installed on your machine.
Note: For this tutorial we’ll be using the Windows version; for those following along with the Python version simply replace “mcmerge.exe” in all the commands that follow with “python mcmerge.py” as a substitution. All additional command switches and modifiers remain in place.
Copy the save directory of the world you wish to work with into the /MCMerge/ folder before proceeding. (e.g. If your world is called “Funland” there should now be a directory /MCMerge/Funland/.)
Running the Initial MCMerge Pass
With the save directory placed in the /worlds/ folder, it’s time to proceed to running the first pass. This is the stage of the procedure where MCMerge will perform a contour trace along the existing map boundaries and make a note of which chunks lie directly on the edge of the explored world.
To perform the trace run the following command from within the /MCMerge/ directory via the command line where “world” is the name of your world save directory.
mcmerge.exe trace “world”
The tracing process is pretty snappy, even for large worlds, and you’ll an output like this.
Getting existing world contour…
Tracing world contour…
Recording world counter data…
World contour detection complete
At this point MCMerge has the data it needs. You can confirm the process by looking in your world directory, there should now be a new folder labeled “##MCEDIT.TEMP##” and file named “contour.dat”. If the command results in an error and/or no extra files appear in the folder then you may need to run the command as an administrator.
Generate New Chunk Data
Once the contour process is complete the next step is to load your Minecraft map in the new version of Minecraft. We can’t emphasis that bit enough as if you load it with the original version of Minecraft you won’t get the new biomes from the new terrain generator; you’ll get the old biome data which renders the whole process worthless as you’ll have to start all over again.
There are two ways to generate the new chunk data. You can actually play the game and fly around in creative mode, following the border of your world and loading new data. If you have a very small map like the one we’re using for this tutorial that’s a perfectly plausible method.
If you have a larger map the process of exploring the old world border could take anywhere from hours to days. Further you may wish to skip the actual exploration for fear of spoiling surprises in a survival mode map. To that end, it’s useful to use the Minecraft Land Generator to automatically load map data without the requirement that you play the game and manually explore.
If you don’t want to explore all the borders and the Minecraft Land Generator is more tweaking than you care to do right now, don’t worry. The contour data we made in the last step doesn’t expire as it precisely charted out the outline of your old map. You can run the merge function as many times as you want in the future as you uncover areas that don’t render well.
After completing the contour pass, copy your world data back to your Minecraft directory and then load the map with the new version of Minecraft. Roam around the edges of the map until you end up with the kind of jagged and ugly seams seen in the render above.
Once you’ve explored the map and generated the new chunk data it’s time to perform the cleanup pass.
Merging the Chunk Data
The final step of the process is to copy over the save file from your Minecraft save directory (now that you’ve generated the new data with the new version of Minecraft) back to the /MCMerge/ folder you were working in.
With the updated map file in place, run the following command:
mcmerge.exe merge “world”
Sit back and relax. The process on a small world is a few minutes long, the process on a very large world could take the better part of an hour or more. When the process is complete copy the save file from the MCMerge directory back to your Minecraft saves directory and load it up. Your freshly updated world will now have radically smoother transitions between biomes without jagged and jarring transitions between old and new terrain.
Remember how obvious the transitions were in the render above? Let’s look at a new render of the new map data with the merged edges in place.
Not bad at all. It’s hard to tell just how smooth everything looks from way up in the sky, however, so let’s zoom down and compare a spot from an in-game perspective. Here’s a location where there was a distinct and ugly stair-step pattern where the forest met the ocean biome and then, in the same view, an ugly seam between the plains area and the mountain area.
In the MCMerge fixed map, seen below from a slight different angle that really shows off the changes, the shoreline is chopped up and varied and the seam between the plains and the mountains is fixed with a river and elevation adjustment on the edge of the mountain biome.
What was a very apparent eyesore that would make you assume the game had glitched out now looks right at home in the Minecraft world, no questions asked. Even when you have a long and linear seam to conceal it still looks pretty natural.
In the screenshot below you can see a spot, dozens of chunks long, where two biomes met along a very straight line. Although the generated river looks a tad bit unnatural given the normally meandering nature of Minecraft rivers (and a sharp eyed player would certainly note it’s unusually straight nature from a high vantage point) it still looks far more natural than a perfectly straight line marking the border between the two biomes.
When dealing with perfectly straight seams MCMerge does a definitely-good-enough job cleaning up and fuzzing the seams (to the point that only when viewed from the air or in a rendering to the lines become obvious). When dealing with more organic and wandering map edges, the clean up job is virtually undetectable.
In today’s tutorial we used the default settings under less than ideal circumstances (our map had a mix of both sharp straight edges and meandering stair-step edges) and we still had great results. If you run MCMerge on a larger more organically explored map and you further fuss around with the merging options (check the readme file to see how you can adjust the fuzzing algorithm, depth of the river valley and surrounding cover, and so on) you can create merged edges so natural in appearance that it would be easy to forget, even as the person who inserted them, where they were.
Have a pressing Minecraft question big or small? Shoot us an email at firstname.lastname@example.org and we’ll do our best to answer it!