Tech Reborn

Tech Reborn

30M Downloads

World will not load after constructing Industrial Grinder Multiblock.

varukasalt opened this issue ยท 8 comments

commented

Using the same seed, 3 times in a row I have created a world, then using creative mode, built and powered and Industrial Grinder multiblock. Each time after exiting the world normally, it will fail to load and hang up on the Loading World Building Terrain screen. Grinder is being fed water from an EnderIO Reservoir, power from EnderIO Vibrant Capacitor Banks and receiving and exporting material with EnderIO Item Conduits. Also, conduits will not remove any products from the 3rd output slot.

commented

Seems to be resolved in latest release.

commented

I can have the logs please?

commented

I don't have any crash logs. I just exit normally, then the next time I try to load the world it hangs. is there any other info I can give you?

commented

No, when I get a chance I will look into it my self.

commented

Thank you.

commented

@modmuss50 I am getting similar issue while I am making an ic2 addon in my dev environment (1.10.2) today. And after several test, I suspect this in TilePowerAcceptor, because I used to have similar code in my mod as well:

    @Override
    @Optional.Method(modid = "IC2")
    public void onLoad() {
        if(FMLCommonHandler.instance().getEffectiveSide().isServer())
            MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
        super.onLoad();
    }

For whatever reason this will cause infinite loop when you load your world again:

    at reborncore.common.tile.TilePowerAcceptor.onLoad(TilePowerAcceptor.java:72) ~[TilePowerAcceptor.class:?]
    at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:875) ~[Chunk.class:?]
    at net.minecraft.world.chunk.Chunk.addTileEntity(Chunk.java:852) ~[Chunk.class:?]
    at net.minecraft.world.chunk.storage.AnvilChunkLoader.loadEntities(AnvilChunkLoader.java:519) ~[AnvilChunkLoader.class:?]
    at net.minecraftforge.common.chunkio.ChunkIOProvider.syncCallback(ChunkIOProvider.java:96) ~[ChunkIOProvider.class:?]
    at net.minecraftforge.common.chunkio.ChunkIOExecutor.syncChunkLoad(ChunkIOExecutor.java:94) ~[ChunkIOExecutor.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:121) ~[ChunkProviderServer.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:92) ~[ChunkProviderServer.class:?]
    at net.minecraft.world.gen.ChunkProviderServer.provideChunk(ChunkProviderServer.java:138) ~[ChunkProviderServer.class:?]
    at net.minecraft.world.World.getChunkFromChunkCoords(World.java:349) ~[World.class:?]
    at net.minecraft.world.World.getChunkFromBlockCoords(World.java:341) ~[World.class:?]
    at net.minecraft.world.World.getBlockState(World.java:911) ~[World.class:?]
    at ic2.core.energy.leg.EnergyNetLocalLeg.addTileEntity(EnergyNetLocalLeg.java:187) ~[EnergyNetLocalLeg.class:?]
    at ic2.core.energy.leg.EventHandler.onEnergyTileLoad(EventHandler.java:27) ~[EventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_27_EventHandler_onEnergyTileLoad_EnergyTileLoadEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:72) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:168) ~[EventBus.class:?]
    at reborncore.common.tile.TilePowerAcceptor.onLoad(TilePowerAcceptor.java:72) ~[TilePowerAcceptor.class:?]

And the easiest solution I know so far is post EnergyTileLoadEvent in update() which is provided by ITickable, and cache the status of whether the event has been posted or not, as it only need to be posted one time.

However, it seems possible (while i am not sure how to implement so) to post EvenrTileEvent during onLoad() and onChucnkUnload(), as it is mentioned in the usage.txt bundled in ic2 api jar:

You can detect the loading by either using the 1st iteration of update() or by waiting for
the next world tick after TileEntity.validate(). The 2nd approach is obviously more sophisticated
and requires to use some tick queuing mechanism.

Just a quick reply~~, so if there is any technical mistake please ignore~~.

commented

I have ic2 and many other mods running as well. I can provide a complete list if that is of any assistance.

commented

This now also seems to be happening with Single Block machines such as the Grinder.