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.