Ad Astra

Ad Astra

22M Downloads

Seed and chunk corruption on 1.18 fabric

Abalieno opened this issue · 5 comments

commented

I've run tons of tests, originally the problem was thought to be Terralith, because overworld would show massive chunk corruption when you reloaded a game.

After running too many tests with different mixes of mods, this is the breakdown:

  • terralith + incedium + spectrum = seed corruption
  • terralith + spectrum = fine
  • terralith + ad astra + spectrum = seed corruption
  • ad astra + spectrum (no terralith or others) = seed corruption

What I've observed is that seed corruption happens whenever a mod tries to give a specific seed to a dimension.

Incendium sets Nether seed to 41. This causes on a reload the Spectrum dimension to get its seed reset to zero. On more reloads this seed corruption spreads to overworld.

Spectrum, if launched on its own, simply takes for its dimension the same general "/seed" of the world. By default, Overworld, Nether and End all share the same general seed. This is the only way to stay clear of this bug.

Ad Astra also causes a mess because it sets a different seed for every dimension it creates. This is fine the first time you log in game. But reloading causes one of the other dimensions lose its seed. Then Overworld gets set to zero, and eventually also all Ad Astra planets get their seed reset to single or double digits (since it seems the logic of Ad Astra is to add a +1 to the same seed, the seed gets erased, so Ad Astra will have one dimension being set to a seed of 3, then 4, and so on).

This appears to be an unsolvable Minecraft bug.

There are only two solutions:

  • Have ALL dimensions share the same general seed.
  • Have ALL dimensions have a different but fixed specific seed.

Since setting dimensions to a fixed seed is unfeasible, because you'll still cause corruption to other mods that use variable seeds... What I'd recommend is to avoid touching seeds in Ad Astra.

Just have all the dimensions stick to the standard /seed and don't try to touch it because it wrecks havoc on everything else.

(seed corruption is only observable after full reloads of a modpack, and only when you move to a new region that wasn't previously generated, so it might not be obvious initially. After figuring the problem I've used NBT Explorer on the level.dat to track seed corruption more easily, but it still needs a full reload of the modpack, and logging in the game again)

commented

Thanks for reporting this. I'm going to replace this system with this instead https://github.com/HyperCubeMC/Seedfix

commented

Okay. So I've done some testing, both on client and a large dedicated server with SeedFix, and it seems to fix the seed corruption issue while providing each dimension with a unique seed. SeedFix uses the exact same seed circumvention system as Terralith, which I've tested with, and it works without issue.

There might still be issues with, say, Ad Astra + incedium + spectrum. But honestly, I'm not a fan of either of the solutions you've presented. SeedFix seems to be the best of both worlds. Let me know if this is still happening with the latest version. And a huge thanks for the remarkably detailed and intricate issue!

commented

I've run a test and it seems to be working.

But it doesn't seem to be working as you intended.

I created a world and indeed all dimensions, including Ad Astra, share the same general seed.

A new world on first log in:

yukyukeww

On a reload, no seed gets corrupted, thankfully. So this works. But every dimensions there shares the exact same seed.

Also beware that I don't think Terralith seedfix works. It's hard to troubleshoot because once you seedfix a dimension, that one doesn't get corrupted since it's bound to the seed you directly set. But corruption happens on other dimensions.

The current mod version has no seed curruption, but that's because it's keeping the same seed.

commented

Alright. So from my understanding, each custom dimension shares the same seed between worlds. So all the worldgen is identical across each planets, as it is bound to the world’s seed. I’m disappointed that I couldn't get each dimension to have a unique seed, but the most important thing is that the seed corruption issue is fixed. It’s a good middle ground between identical worldgen across every world and seed corruption.

commented

worldgen would be identical depending on spawn location and what input you give. If all the planets share the same exact algorithm for terrain then they produce the same terrain. But if you change some values it should come out all different.