Hi,
Since I started playing with Feed The Beast mod packs, I was faced with the necessity of moving out from an outdated mod pack to a new pack. It sometimes works without problems, but last time, when going from Ultimate to Unleashed, I had to start over a new map. I have no fun playing early game, because there is no way for me to see the skeletons before I am shut to death or get ores efficiently. I can spend hours mining and come back just just a couple of pieces of iron ores and coal, which is quite exasperating. I start having fun when I can build at least a first mining turtle and have a few resources to craft things. I am at this point in FTB Unleashed but would like to play with newest Thermal Expansion, Taumcraft and IndustrialCraft. I am thus exploring possibilities of migrating a map from Unleashed to something based on Minecraft 1.6. Don't know if that will be Monsters, Horizons or Direwolf20.
There are several problems that need to be addressed when migrating a map, but all this could be done using a program and a database of item/block ids. Here are the list of problems I can think of.
I would like to push this idea one step further. For this, I would need the following:
Thanks in advance for any idea.
Since I started playing with Feed The Beast mod packs, I was faced with the necessity of moving out from an outdated mod pack to a new pack. It sometimes works without problems, but last time, when going from Ultimate to Unleashed, I had to start over a new map. I have no fun playing early game, because there is no way for me to see the skeletons before I am shut to death or get ores efficiently. I can spend hours mining and come back just just a couple of pieces of iron ores and coal, which is quite exasperating. I start having fun when I can build at least a first mining turtle and have a few resources to craft things. I am at this point in FTB Unleashed but would like to play with newest Thermal Expansion, Taumcraft and IndustrialCraft. I am thus exploring possibilities of migrating a map from Unleashed to something based on Minecraft 1.6. Don't know if that will be Monsters, Horizons or Direwolf20.
There are several problems that need to be addressed when migrating a map, but all this could be done using a program and a database of item/block ids. Here are the list of problems I can think of.
- Added mods. This only causes minor hurdles. Added mods with ore generation is the main problem here, and can be worked around just by going far enough or creating a MystCraft age.
- Removed mods. I'm not sure about how Minecraft reacts to unknown block or item ids. If this is problematic, it would be easy to remove the block by a map manipulation script or replace them with some defaults, e.g., generated ore could become plain stone, leaves from a removed mod could become air or standard oak, jungle, birch or spruce leaves. Hopefully, no mod is proposing variants of bed rock that would get replaced with air and thus create holes to the void in the overworld. Even that wouldn't be so bad, the holes would be localized and deep underground.
- Added items or blocks. Added items or blocks is not problematic at all, same as added mods. The item wasn't existing before; it can now be crafted. Good.
- Removed items or blocks. Same as removed mod, the game engine or a script need to apply a fall back, like discarding the removed item, replacing the removed block with air.
- Changed mods. This is the most problematic case. Mods modifying item and block ids from one version to another is a pity. Some mods list their item ids in a configuration file. When trying to migrate to Unleashed, I parsed such configuration files in both mod packs and created a list of mappings I passed to a world editor. This allowed the FTB Unleashed server to load with my Ultimate map, but the game was crashing right after login. There is thus more to this, probably other item id mappings to figure out.
- Changed item metadata or NBT. This can be a quite tricky hurdle. If some mods changed item metadata, it will probably be impossible to convert the items in a reliable way without the collaboration of the mod author. Removing such offending items, in the hope they are not too many, is probably the simplest way out. TinkerConstruct tools and Taumcraft items potentially fall into this category.
- Player information. Mods relying on custom player information, e.g., Taumcraft research, may misbehave if the information is in an old format. Again, migrating the player data is probably an hard task that would involve the mod authors. Probably a simple way out would be to just discard that information and recreate it during the game (redo the research, get back the achievements, etc.). Of course, after a first version of a migration tool exists, mod authors may contribute to it and improve it with metada conversion schemes.
I would like to push this idea one step further. For this, I would need the following:
- A way to get per-mod item ids from any FTB server, not only the configurable item ids, but all of them. Is there any API I could use to get such a list, that would allow me to take per-mod decisions, e.g., discard any items from an offending mod that changed too much (like Taumcraft from 3 to 4), converting item id with a name-based heuristic (e.g., if an id in Unleashed maps to Copper ingot, find the id of an item named copper ingot in the target 1.6 mod pack and map to it if different). My hope is to get this from ForgeCraft, assuming every mod register and communicate with it, but this is just an idea.
- An API to load a world, manipulate its contents and save it back to disk. It should be possible to remove blocks, items, replace blocks/item ids, edit item and player data. Why an API? This is because the conversion tool may require some user interactions, multiple iterations (e.g., perform a binary search to find which mod is crashing the game after migration), heuristics to guess item ids, maybe I will even need to figure out a way to automatically cycle between tentative conversion, server start up, simulation of a player login in, crash, restart cycle!
Thanks in advance for any idea.