Jump to content

[1.7.2] Why does BiomeCache$Block occasionally call chunkManager.getBiomeGenAt?


Recommended Posts

Not strictly a Forge question, but relevant. I'm making a world type composed of developed modern-world elements like roads, towns, buildings, etc. I generate the location of these elements in big 100*100 chunk cells. When a chunk loads for the first time it checks to see if its big cell and surrounding cells have been generated yet, and if not it kicks off said generation. Works pretty well for the most part, except I find that as I'm flying through my worlds in creative mode, every minute or so my mod will start generating a group of cells really far away from me. Sometimes thousands of chunks away, as if the game were loading a chunk way over there across the world, nowhere near where it should be operating.


Whatever process was generating these calls was doing so by calling the getBiomeGenAt() method in my chunk manager, so I threw in a stack trace to see what it was. Turns out there's an extra class hidden away inside of net.minecraft.world.biome.BiomeCache called Block (Not to be confused with the Block that represents in-game voxel blocks, I believe) that is occasionally polling my chunk manager for the biome and rainfall data for random freaking far-away chunks every minute or so. This call then of course triggers the generation of my mod's cell data for that area of the map, a process that can take a minute or so and thus halts all chunk loading and mob events for the player in the meantime.


I can fix this by checking what class is making the call to getBiomeGenAt() and not respond to calls from BiomeCache$Block, but I don't know why it does this and thus am wary to make that change lest I break something that I don't understand. Does anyone know why BiomeCache$Block does this, and if there is a better way to go about dealing with the issue?

Link to comment
Share on other sites

Update: I tried blocking calls from BiomeCache$Block by returning the array it passes right back to it, and that pretty dependably crashes the game. I may just modify my getBiomeGenAt() to pretend it's vanilla if the call comes from BiomeCache$Block.


@Anon10W1z: I may try that. Only reason I'm on 1.7.2 is because it was current when I started development, was planning on updating everything to the current version once I had something playable but I may update to 1.7.10 right now since I hear it's relatively painless to do so.


@diesieben07: My mod is not altering the use of getBiomeGenAt() at all, it's still returning a 16*16 array of biome IDs as it was before. It's just that my biomes correspond to municipal regions, streets and properties now so in order to return that biome array I have to generate that graph of shapes first if it hasn't been done yet. The shape generation is done by other classes, but can be kicked off by getBiomeGenAt(). I'm using Java Topology Suite for the calculation of all those municipal geometries for maximum efficiency.

Link to comment
Share on other sites

Agreed, and that's the reason I was wondering *why* BiomeCache$Block is calling it in the first place with such far-out values. If I can confirm that these calls are relatively inconsequential or erroneous then I won't have a problem just returning an array of BiomeGenBase.plains (Which is what I just started doing and that seems to make it happy) or some other "filler" data that doesn't kick off my heavier methods. If this call is relatively important, then I may have to rethink/restructure my world gen to account for the fact that the game occasionally needs accurate gen data for such far-away lands. I haven't taken the time yet to fly to one of these random chunks to see if it does indeed result in a chunk of Plains biome, so we'll see.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...

Important Information

By using this site, you agree to our Terms of Use.