micdoodle8 / Galacticraft

An advanced Space Dimension Mod for Minecraft
Other
615 stars 333 forks source link

r1056: Broken breathable air check after world reload #416

Closed EzerArch closed 10 years ago

EzerArch commented 10 years ago

The most recent builds may have broken the breathable air updater.

Once you have reloaded the world at least once, the game fails to check if the room is closed or not, the sealer displays "Sealed" even if the room is not filled with air, it's possible to break the walls, the breathable air blocks won't vanish.

Video: http://www.twitch.tv/ezerarch/b/532248578?t=56m20s (staring @micdoodle8 )

radfast commented 10 years ago

Please post the log with 'Debug' set to true in core.conf - run it for about 2 minutes after you log in / load the world. Also check that sealer multithreading is set to false in core.conf.

EzerArch commented 10 years ago

Enable Debug Messages=true Enable Sealer Multithreading=false

World download with forge log: https://db.tt/bTirPCMi Video of the test: http://www.twitch.tv/ezerarch/b/532506694

If you see tons of .jarX and .zipX it's because I use a mod manager that blocks files I don't want to load.

radfast commented 10 years ago

UPDATE: ignore the below, I just succeeded in recreating the issue here. hmmm.

If this is enabled, areas sealed by Oxygen Sealers will run a seal check when the player breaks or places a block (or on block updates). This should be enabled for a 100% accurate sealed status is accurate, but can be disabled on servers for performance reasons.

B:"Enable Sealed edge checks"=true

radfast commented 10 years ago

Ok, this looks like a bug in Forge - not Galacticraft.

It happens only if, in Single Player, you exit a world + load the world again without closing the Minecraft game completely. (Similar to issue #346.)

The second time you load the world, Forge does not correctly call the tickStart and tickEnd methods in ServerTickHandler - I'm not sure why yet, but I'm seeing failure to call tickStart for some dimensions, and 2 consecutive calls to tickEnd for each dimension.

I'll see if I can find a workaround without spending too much time on this.

radfast commented 10 years ago

Fixed, thank you for raising this issue. Turns out GC can deal with the Forge issue by registering tickHandlers earlier in the server start process. This issue report has actually led me to three deep-but-obscure bugs in the code, all now fixed, so it's issue of the week as far as I'm concerned.