Jump to content

[1.7.10] Transferring FML NBT data from one level.dat into another

Rocko Bonaparte

Recommended Posts

I've been trying to modify the Lockdown mod on GitHub--with changes going back to Adubbz like a Good Boy--to set up the template world while honoring the world generation settings the user gave. My goal is for my mod pack to start the user in a tutorial dimension (DIM2) with a vacant overworld setup. When they eventually go to the Overworld, it will generate the terrain to whatever they gave in the GUI. This all must sound crazy, but I actually have that all working.


Things just went sour when I updated some mods and the mod IDs changed. When I load the actual saves, Forge does a great job of moving around the IDs. However, this all gets lost in the template, so half my world turns into molten bronze or whatever.


I am overwriting the terrain generation settings using ISaveHandler.saveWorldInfo(). It looks like that only saves the base information, so the other sections of the level.dat file get obliterated. In particular, the FML section appears to have the ID mapping that I need to persist into the new world. I have access to the original FML section from the original level.dat in the template. How can I also carry that over?


It looks like I can whip up all the original data from

NBTTagCompound leveldat = CompressedStreamTools.readCompressed(new FileInputStream(new File(path_to_level_dat)));


I can't figure out how to work with it from there. Preferably, I'd be fine if saveWorldInfo did a phase 1 save, and then I went in after and inserted the FML. I don't know what Forge functions I should be using to do this. I'm about to try to get clever and just use the more primitive NBT operations to try to achieve it, but I was hoping there was something more elegant that had more guarantees to work. My success rate with making these changes have been ... oddly successful, but I think my luck is about to run out here.

Link to comment
Share on other sites

Addendum: I just finished testing out some code that saved off the old NBT data before saveWorldInfo plowed over it. I then load the new level.dat, patch it with the old NBT data for the FML and Forge sections, and save that to disk. It looks like the operations themselves succeed, but the file has been monkeyed with by the time I get into the game. All the hotfixing I did gets removed, and with it goes the block IDs I wanted to carry over. So it's not as simple as adjusting that meta data. It looks like something in Forge goes in after me and overwrites the file with the new block ID table.


Is there some way I can replace the currently-loaded block ID table with the one I load from the original level.dat? I have the NBT string for all of this so I have the data. I am just unsure where to stuff it.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...

Important Information

By using this site, you agree to our Terms of Use.