Glitchfiend / TerraBlender

TerraBlender is a library mod for adding biomes in a simple and compatible manner with Minecraft's new biome/terrain system.
https://www.curseforge.com/minecraft/mc-mods/terrablender
GNU Lesser General Public License v3.0
82 stars 27 forks source link

Placeholder biome generating #140

Closed isakurs closed 7 months ago

isakurs commented 7 months ago

What's the issue you encountered?

The biome "terrablender:deferred_placeholder" is generating in my game.

How can the issue be reproduced?

Generate a world with the mods I have

Logs

https://gist.github.com/isakurs/c1650cbc8024ebe0eb8d5ca6fd580fd1

Mod Version

3.0.0.170

Additional information

the placeholder biome sucks (duh its a placeholder not meant to generate) and i dont want it to generate in my worlds

Adubbz commented 7 months ago

It isn't possible for the placeholder biome to generate with TerraBlender alone. This would require some sort of bad behaviour from world generation mixins or broken registries from other mods to occur. Your log is filled with many json errors from things like wilderwild and slabsextended. You need to remove mods one by one and narrow this down for anything to be done here.

NohanMV commented 7 months ago

@isakurs Had this problem for a while, seems to be coming from Nature Arise on my side, I've checked your mod list it seems you have it as well, disable it and try doing a /locate biome terrablender:deferred_placeholder to check if any placeholder biomes have been generated in your world, also it seems that most mods with the highest TerraBlender compatibility will enable a compatibility layer or module, such as Cinderscape. Following this example, if removing Nature Arise doesn't fix it, remove any custom world/biome generation mod that doesn't posses a compatibility module until you find which mod is causing the issue. Good luck !

DavidGmc18 commented 7 months ago

I am a developer of Nature Arise, and this issue has been reported to me. This bug occurs when both Nature Arise and the Terraformers mod, along with Terrablender, are present. I done investigation and this is what I found out: I cloned Terrablender, built the fabric example, and ran it with Terrestria. Surprisingly, the same issue was present. After further investigation, I discovered that it happens when biome is added to a region using a custom parameter point (adding a biome by replacing a vanilla biome works with no problems). Now, I am wondering if this is an issue on the Terrablender, Terraformers MC , or Nature Arise side.

Adubbz commented 7 months ago

For reference, on TerraBlender's side all instances of the placeholder biome are replaced during biome selection with whatever is in the Vanilla set of parameter points as per https://github.com/Glitchfiend/TerraBlender/blob/1.20.4/Common/src/main/java/terrablender/mixin/MixinParameterList.java#L130. If it's somehow still generating it suggests to me that something more serious is going on causing breakage. One way this could happen is if another mod is modifying Vanilla's parameter points and using some sort of registry scraping

DavidGmc18 commented 7 months ago

I investigated further, and I found out (when the Nature Arise and Terraformers mods are present): Screenshot 2023-12-15 140830 This image is for reference only. During testing, I made sure that I was testing only one parameter changed and for one biome, so I could clearly determine when it causes generation of terrablender:deferred_placeholder and when not.

The image is split into three parts by red lines. The first and second parts are the same as in the TerraBlender example (there is an 'if' for config, but from my testing, it has no effect on this issue). The first one causes the generation of terrablender:deferred_placeholder, while the second and third do not cause the generation of terrablender:deferred_placeholder.

If I understand correctly, the third one is an alternative (the same) as the first one. Based on this, I would say that the third one should be used instead of the first one. The problem is that the same point that worked in the first one, in most cases, doesn't work in the third one (tested by locating the biome).

Adubbz commented 7 months ago

In the case of the first example you've highlighted, deferred_placeholder would be being used as it's how the overlay builder is implemented. The issue at hand is why aren't all instances of it being replaced with Vanilla biomes as they should be by the code I linked before (https://github.com/Glitchfiend/TerraBlender/blob/1.20.4/Common/src/main/java/terrablender/mixin/MixinParameterList.java#L130). That's the fundamental purpose of the placeholder - to be replaced by other biomes. I checked against TerraBlender's examples earlier (including those that use VanillaParameterOverlayBuilder) and deferred_placeholder wasn't being generated (as expected). I still think there's something else going on here.

Adubbz commented 7 months ago

I've confirmed that the test mod, which relies upon deferred_placeholder, works correctly with just TerraBlender and breaks upon adding Terrestria, Cinderscapes or Traverse. This wouldn't be a Natures Arise issue, it'd likely be to do with the mixins shared by those mods.

Adubbz commented 7 months ago

Alright, this appears to be caused by Biolith, which is embedded in the jars of all of those mods. You can confirm this yourself by removing the embedded jar and its accompanying entry in Traverse/Terrestria/Cinderscapes' fabric.mod.json. This will need to be reported to them as it's likely their mixins causing the problem. I haven't studied their code closely, but I imagine it's something to do with https://github.com/TerraformersMC/Biolith/blob/master/src/main/java/com/terraformersmc/biolith/impl/mixin/MixinMultiNoiseBiomeSource.java and how it interacts with TerraBlender's own https://github.com/Glitchfiend/TerraBlender/blob/1.20.4/Common/src/main/java/terrablender/mixin/MixinParameterList.java and https://github.com/Glitchfiend/TerraBlender/blob/1.20.4/Common/src/main/java/terrablender/mixin/MixinMultiNoiseBiomeSource.java

DavidGmc18 commented 7 months ago

I have reported this issue to TerraformersMC: Traverse Issue-Placeholder biome generation #107.

gniftygnome commented 7 months ago

Yes; apologies Addubz, I've tried not to make more work for you but in this case it is my fault. When I wrote our TerraBlender compatibility layer, at that time I could not find any clear evidence of the deferred placeholder mechanism actually being used. The noise search function is so expensive and so frequently called that one of the guiding principles in Biolith is not to increase calls to it. So I couldn't bring myself to add that second call without a clear need. I see the situation has changed and I need to go ahead and add it now.

Please feel free to consider this issue resolved on TB's end at any time. I will deal with this in Biolith.

Adubbz commented 7 months ago

Thank you for that, closing the issue on this side in that case.