Hello. I would like to propose an overall method for accurate updating of old map chunks to new game version features (ore, plants, dungeons etc) without losing the changes a person has made within those chunks (user generated content), and doing so easily without needing to spend forever hand-splicing every block & detail manually with MCEdit (Fantastic tool btw). This tracking method could also be used right from the start with a fresh new map to allow for future clean map updates of it's future "old chunks" with greater ease.
* This will allow the tracking and transfer of all user modified blocks & content (not any unmodified blocks even in same chunk), including inventory etc, to a new Minecraft version of the same world seed via a simple coordinate difference map (Shadow map). - Allowing you to fully experience the benefits that each new version of the terrain & feature generator will provide while keeping every single block & item that you have worked so long and hard to customize. "The world will change around you!".
I am not able to do this dev work at this time and am hoping that there will be other talented souls out there able and willing to start implementing the base tools needed for this, or adding to their already existing tools the compatibility with said tools/features/functionality.
The overall concept involved that will make this ideal possible is actually very simple. I will discuss an interim version of this concept that will allow people with already existing old maps the possibility of accomplishing this goal, even if not absolutely perfectly, as well as how this idea if used from the very start of a new map could allow for easy seemless updating with each game version update.
[Edit] My original purpose for this was for SSP Single player usage, however; it should be possible to accomplish the same thing for SMP Multi-player servers as well.
- Shadow-Map file format/structure ("shadow.map", ".sdo" ?)
- Tool for creating a Shadow-map by looking at difference between a current map with user content and a clean unaltered map with same seed generated by same version of Minecraft as the original map.
- Tool that uses a Shadow-Map to merge user content from original map with a clean unaltered map of the same seed generated by a newer version of Minecraft.
- A Shadow-Map mod that will live-update the Shadow-Map with locations of new user content as it is made, and create a new blank Shadow-Map if one is not already present (for new worlds). It could also eventually include an in-game Shadow-Map Editor.
- A Visual Shadow-Map editor for helping with creation of shadow-maps of old maps or just keeping terrain features etc between versions.
* With the functionality of these tools, separate or all-in-one, it will finally be possible to Truly update our maps fully to include the new version terrain features in our "old" chunks, and do so with far greater ease.
Below is a more indepth explanation of how these tools would need to work and how they could be used:
* The Core of this method is a simple standardized binary difference file/map, which I will call a "Shadow Map" and will be in a separate file than the main map files and will be far smaller. Each block of the coordinate grid would be represented with a 0 or 1. Any block stored as 1 would mean that there is a user made change at that location on the normal map, it doesn't matter what that change is. 0 would represent blocks still in their original seed-state. This would not in any way be a copy of the normal map, it just tracks grid locations where user changes occurred.
- The map seed would also be stored in this file, preferably near the beginning of the file. And if it is known, the original game version # that generated the original map should have a place where it can be stored, and also the ability to mark it as unknown but before or after a certain version. It would also be good for it to list the most recent game version that this shadow-map has been synced with. Also, the current spawn coordinates could be stored near the beginning as well, and updated as needed.
-- With an accurate shadow-map a tool could be used to merge a newly generated world file (of the same seed) with an old map, transplanting only blocks changed by the user in the old map over the terrain of the new map. So all the new terrain and map features of the newest game version would perfectly coexist with the user-made elements of the old map (same seed).
- This would be far faster as well as more accurate than hand-editing every detail in MCEdit, though for old maps it would be very useful to have a 3D shadow-map editor for basic fixes and such. Such an editor would also be useful for when the new terrain causes the loss of waterfalls and such which were originally a default part of the terrain.
There would be a section in the shadow-map file for a simple chunk map (only chunks where there are user changes would be a part of this simple (0&1) chunk map, and another for the world block grid map. Each section would house the appropriate type of shadow map for the normal realm as well as for the Nether and be compatible with the addition of any new realms that might be added in new game versions (Sky realm etc).
- The chunk-map would make it easier for a user or an external tool to quickly see which chunks of the seed will need to be generated in a new seed-map before a merge.
This Map file would reside inside of the World folder for which it serves as a Shadow Map, but in it's own file separate from the normal maps files, making it compatible with everything else without causing any irreversable conflicts.
* There should be one standardized format for this shadow-map file so that various tools and editors can all easily make use of it, perhaps even for things that haven't been thought of yet. If the file is made so that a value other than 0 & 1 is able to be stored for each grid block then it should be standard for any value > 0 to be interpreted as 1 when being read in "Simple-ShadowMap Mode", thus preserving backward compatibility for original and basic tools and uses. Perhaps the file extension could be ".sdo" or the filename could be "shadow.map" (just some ideas).
- Perhaps this is a way that non-standard mod-blocks could be tracked and filtered out if the affecting mod ceases to be supported, yet allow the map as a whole to still be used in future game versions (those blocks could hold a value of 2 instead of 1 for instance).
* For a fully developed version of this system there would be a "Shadow-Map Mod" in place which would modify the shadow-map whenever the user makes a block change to the map in-game. Thus allowing an accurate on-the-fly shadow map to be constructed or added to. The mod could be made to work with a pre-made shadow map placed into the world folder before hand, or generate a new blank one if one wasn't already present (For new worlds).
- Perhaps eventually a "Shadow-Map Mod" could be further developed to include an in-game shadow-map editor of some kind. An in-game editor might not be necessary to begin with though. An external one might be good enough.
Chunk generation for new seed-maps
When transferring user content to a new version seed map with an already existing and accurate shadow-map, it will be necessary to first create a new seed map with the new game version and force it to generate all of the chunks shown in the shadow-map's chunk map (any chunk with user content). This will also be needed when generating a clean seed map with an old game version in order to generate a Shadow-Map for an old (in-use) map.
Ideally there will eventually be an entirely automated way in which to do this, and a standalone tool will be able to perform the entire map upgrade in one easy go. Until then it may be necessary for the user to be able to view the shadow-map chunk-map in some way and use it to move around in the new seed-map (before merging) until at least all of the required chunks have been generated. Perhaps temporary use of a flying mod could assist with this. Hopefully there will be an easy way to force the chunk generation.
Making Shadow-Maps for old maps
Making an initial useable and mostly accurate shadow-map for an already existing map made with an older version of the game than you are already using will take a little more work than if you start a brand-new map and start using a "Shadow-Map" mod to create and maintain a shadow-map right from the start.
If you have a map with user content on it you want to keep, but the map was made with the same version of the game as you are currently using, then getting started with a shadow-map should be fairly easy for you.
* First, zip-up or copy that particular world folder and date/time label it. Then you can tell the game to create a new map (be sure to give it the same exact seed as your other world) and name the folder whatever you want but perhaps also add the game version of that seed in parenthesis at the end of the name. Then put the game in Peaceful mode and travel around the map at least as far as you had in the original map, but don't change any blocks. This is to make sure you have at least the same chunks present in the new-seed map as are in the original map (you only need the chunks where you made block changes though). If you have an easier method for doing this then please use it.
- After doing this you would then need to use whatever tool becomes available that can generate a new shadow-map by comparing two maps of the same seed and game version and making the shadow-map based simply on the differences between the two. After the shadow map is made inside of the desired world folder (in this case the original world folder) you would then activate a Shadow-Map mod for that map which would then continue to live-update your new shadow-map with all of the changes you make in-game from then on.
For old maps made with a prior version of the game than what you are currently using, creating an initial shadow-map for this map will be a little more involved but worth it once made & maintained. In order to make the most accurate shadow-map possible that requires little or no manual editing you will need a pure (unaltered) copy of the same map seed from the same version of the game as the original map was made with and that has at least the same chunks generated as you have user made content in on the original map. This may mean reinstalling an older version of the game if you have it backed up. If you don't have the older version anymore you may be able to do this using the following tool: MCNostalgia
If you can't recall which game version you originally made the map with but do have an old backup of the map, you can look at the date of the oldest back-up (or unzip it and make it available to the game again and see what the last-played date is for it in the world list) then look at the Minecraft release dates list on the Minecraft wiki in order to narrow down which game version you first made it with. If there is another way to tell for certain which version of the game made the map then please post this method in this thread, thank you!
* First, like before; zip-up or copy that particular world folder and date/time label it. Then reinstall the older version of the game, using MCNostalgia if necessary. Then follow the steps above for creating a fresh unaltered seed map with the same seed as your original map and with at least the same chunks as you have user content in on the original map.
- If the version of the game is from before the version that allows you to enter the seed then you might be able to create the pure seed world by copying your current world folder then deleting everything except for the level.dat file. You would then open that as a map with the old version of the game and it should start rebuilding that seed all over again with the old algorithm.
There is the chance that the current map you have, even though started with an earlier version, may have user content in chunks made with newer versions of the game than the original. As such this method could cause new plants and such to appear on the new Shadow-map as user generated content too. In this case a visual shadow-map editor could come in very useful for clearing out non-user content like that when mastering a clean new shadow-map for your old map.
* Thank you for reading and considering this proposal! I believe that despite the length of this proposal that the method overall is fairly simple and very worth it for it's intended purpose.