Slots different

  • How is it that the slots are different with the same mods just on different computers?

    From the no replies I think I must have done something stupid and will rethink it.

  • How? Well, I'd guess at Forge ID Resolver. I strongly suspect it only resolves conflicts when the config files generate, which for the most part is equivalent to "when the mod is first installed".

    So if on one computer you install mod A first and then mod B, and on the other computer you install mod B first and then mod A (and run minecraft between each install, so that the older mod gets a chance to write its config), then you could potentially get a situation where the first computer would've given priority to mod A and shuffled B's block IDs around, and on the second computer the opposite happened and A's block IDs were shuffled.

    The easiest solution is not letting Forge ID Resolver have anything to do in the first place -- once you have working config files on one computer, copy them to the other one, which ensures both have the same block IDs and other configuration settings.

    All of this is pure guesswork, of course, I'm not even sure that you really mean "block IDs" when you say "slots".

  • His computer:

    Block. Name: tile.engine. ID: 4043
    Block. Name: tile.harvester. ID: 4044
    Block. Name: tile.planter. ID: 4045
    Block. Name: tile.firsapling. ID: 4046
    Block. Name: tile.oreCopper. ID: 4047
    Block. Name: tile.stained. ID: 4048
    Block. Name: tile.mill. ID: 4049
    Block. Name: tile.machine. ID: 4050
    Block. Name: tile.apatite. ID: 4051
    Block. Name: tile.soil. ID: 4052
    Block. Name: tile.oilMoving. ID: 4053
    Block. Name: tile.oilStill. ID: 4054
    Block. Name: ID: 4055
    Block. Name: tile.libraryBlock. ID: 4056
    Block. Name: tile.architectBlock. ID: 4057
    Block. Name: tile.builderBlock. ID: 4058
    Block. Name: tile.fillerBlock. ID: 4059
    Block. Name: tile.pathMarkerBlock. ID: 4060
    Block. Name: tile.markerBlock. ID: 4061
    Block. Name: ic2.common.BlockBarrel. ID: 4062
    Block. Name: tile.blockCrop. ID: 4063
    Block. Name: tile.blockDynamiteRemote. ID: 4064
    Block. Name: tile.blockDynamite. ID: 4065
    Block. Name: tile.blockNuke. ID: 4066
    Block. Name: tile.blockITNT. ID: 4067
    Block. Name: ic2.common.BlockPersonal. ID: 4068
    Block. Name: tile.blockMiningTip. ID: 4069
    Block. Name: tile.blockMiningPipe. ID: 4070
    Block. Name: tile.blockLuminator. ID: 4071
    Block. Name: tile.blockLuminatorD. ID: 4072
    Block. Name: ic2.common.BlockMachine2. ID: 4073
    Block. Name: ic2.common.BlockMachine. ID: 4074
    Block. Name: ic2.common.BlockElectric. ID: 4075
    Block. Name: tile.blockReactorChamber. ID: 4076
    Block. Name: ic2.common.BlockGenerator. ID: 4077
    Block. Name: ic2.common.BlockCable. ID: 4078
    Block. Name: ic2.common.BlockMetal. ID: 4079
    Block. Name: tile.blockIronScaffold. ID: 4080
    Block. Name: tile.blockScaffold. ID: 4081
    Block. Name: tile.blockWall. ID: 4082
    Block. Name: tile.blockFoam. ID: 4083
    Block. Name: tile.blockDoorAlloy. ID: 4084
    Block. Name: tile.blockAlloyGlass. ID: 4085
    Block. Name: tile.blockAlloy. ID: 4086
    Block. Name: tile.blockFenceIron. ID: 4087
    Block. Name: tile.blockRubber. ID: 4088
    Block. Name: tile.blockHarz. ID: 4089
    Block. Name: tile.blockRubSapling. ID: 4090
    Block. Name: tile.leaves. ID: 4091
    Block. Name: tile.blockRubWood. ID: 4092
    Block. Name: tile.blockOreUran. ID: 4093
    Block. Name: tile.blockOreTin. ID: 4094
    Block. Name: tile.blockOreCopper. ID: 4095

    My computer: I did change the 4094 on mine.

    Block. Unused ID: 4033
    Block. Unused ID: 4034
    Block. Unused ID: 4035
    Block. Unused ID: 4036
    Block. Unused ID: 4037
    Block. Unused ID: 4038
    Block. Unused ID: 4039
    Block. Unused ID: 4040
    Block. Unused ID: 4041
    Block. Unused ID: 4042
    Block. Unused ID: 4043
    Block. Unused ID: 4044
    Block. Unused ID: 4045
    Block. Unused ID: 4046
    Block. Unused ID: 4047
    Block. Unused ID: 4048
    Block. Unused ID: 4049
    Block. Unused ID: 4050
    Block. Unused ID: 4051
    Block. Unused ID: 4052
    Block. Unused ID: 4053
    Block. Unused ID: 4054
    Block. Unused ID: 4055
    Block. Unused ID: 4068
    Block. Unused ID: 4075
    Block. Unused ID: 4076
    Block. Unused ID: 4077
    Block. Unused ID: 4078
    Block. Unused ID: 4079
    Block. Unused ID: 4080
    Block. Unused ID: 4081
    Block. Unused ID: 4082
    Block. Unused ID: 4083
    Block. Unused ID: 4084
    Block. Unused ID: 4085
    Block. Unused ID: 4086
    Block. Unused ID: 4087
    Block. Unused ID: 4088
    Block. Unused ID: 4089
    Block. Unused ID: 4090
    Block. Unused ID: 4091
    Block. Unused ID: 4092
    Block. Unused ID: 4093
    Block. Name: tile.CompactSolar. ID: 4094
    Block. Name: tile.stained. ID: 4095

  • I believe at least some/most mods do a dynamic ID mapping system (That or forge attempts this). They search for an unused ID and then assign themselves that ID (and put it in their config file for future reference). From my 2-3 months of using mods and my programming experience these are my guesses as to why there's a difference. (Thus I may be making some assumptions that are very wrong, any mod makers please correct me)

    • Mods were initially loaded in a different order than the other machine
    • The first computer had the mods loaded from previous versions which eventually upgraded. This can lead to some weirdness.

      • The new version of the mod needed a new ID (or multiple), so it then dynamically finds a free ID to use and sets it in the config file. The second computer using this later mod for the first time allocates all of the IDs in one go before the next mod loads
      • The new version of the mod removed or was able to condense IDs using metadata. The IDs may or may not be released but the other mods have already decided what ID it will use and your save games would be screwy if it tried to 'condense/reuse' the IDs. Another reason the mod may not 'release' the other IDs is because old save games will still use these IDs, which it can detect and replace them with the new ID with a metadata value. The second computer using this mod for the first time allocates only the IDs it needs to for the mod and then the next mod has a go at it (and most likely will use IDs just after the mod which were previously occupied in the first computer)

    Some examples would probably be better:
    Suppose you have 3 Mods: Alice, Bob, and Charlie
    Alice v1.0 needs 3 IDs
    Bob v0.9 needs 5 IDs
    Charlie v2.1 needs 2 IDs

    First time on the first computer you load the mods in (alphabetical) order

    • System loads Alice v1.0 for the first time and allocates IDs 400, 401, and 402
    • System loads Bob v0.9 for the first time and allocates IDs 403, 404, 405, 406, and 407
    • System loads Charlie v2.1 for the first time and allocates IDs 408, and 409

    Scenario 1: Loading mods in a different order
    You then load the mods on the second machine but not in the same order

    • System loads Alice v1.0 for the first time and allocates IDs 400, 401, and 402
    • System loads Charlie v2.1 for the first time and allocates IDs 403, and 404
    • System loads Bob v0.9 for the first time and allocates IDs 405, 406, 407, 408, and 409

    Note the disparity between IDs and Mods

    Scenario 2: Mod Updates on for first computer but you load the latest on the second machine
    Mod Alice updates to 1.1 but there's no change in how many IDs it uses
    Mod Bob updates to 1.0 and discovers metadata in blocks and now only needs 1 ID (instead of 5)
    Mod Charlie updates to v2.2 adds a new block ID for its use

    First computer updates

    • System loads Alice v1.1, no more or less IDs needed so no change, still uses 400, 401, and 402
    • System loads Bob v1.0 which now needs only 1 ID, it still uses 403, and possibly deallocates 404, 405, 406, and 407 (though unlikely because your save games would have IDs that aren't mapped to any mod)
    • System loads Charlie v2.2 which still uses 408 and 409, requests a new ID, most likely this will be 410 depending on how it decides to find a new ID and if Bob actually deallocates the IDs it was using

    Second computer uses latest mods for the first time, even in the same order

    • System loads Alice v1.1 for the first time and allocates IDs 400, 401, and 402
    • System loads Bob v1.0 for the first time and allocates IDs 403
    • System loads Charlie v2.2 for the first time and allocates IDs 404, 405 and 406
  • I use MultiMC for loading mods. I have them in the same order and all are exactly the same. It does this on every new world I make for either one. I thought the moder chose which slot they would be. I just find it strange with all things being equal on our part that the slots end of being different. It's giving him alot of conflicts with BuildCraft.

  • Quote

    once you have working config files on one computer, copy them to the other one

    Since no one knew I did this to make it right. Someday someone will know.