Posted December 25, 20231 yr Hey  I'm trying to make a custom biome and so far it's going pretty great. I need some help with the surface rules. https://prnt.sc/XOYbI89RvBzg This is what the mountains look like. I want to have a smoother transition betewen grass and stone and between stone and snow, optimally I would like to have snow only at the top 10 blocks or something like that. I'm assuming I have to use some noise_threshold for the smoother transitions, but I don't know how to quite do that. And for top 10 blocks of the biome, I also can't find something. I found the y block check with the anchor "below_top", but apparently that is relative to the building limit. So... that's my problem. I'm hoping someone can help me, thanks in advance  https://github.com/robinroloff/alpinemod/ Edited December 26, 20231 yr by Robin Roloff Included github repo link
December 26, 20231 yr I'm assuming you are using the Terrablender API for this (if not please tell me how you added a new biome to the Overworld without that, since it looks like that's the only way 🤣). Anyway you coul always look at how vanilla does declare these Surface Rules, specifically the one for the mountain biomes (I think they are actually defined in the JSON file, but from the code you can get an idea of how these conditions works). One condition I can think would be interesting is the SurfaceRules.VerticalGradientConditionSource condition. Judging from the name you can guess that this is the condition used to create some gradients. For instance, if we look at the Overworld noise settings file (worldgen/noise_settings/overworld.json), this is used to generate the Bedrock layer at the bottom of the World and make it transitioning from Bedrock to Deepslate to not have it flat  { "type": "minecraft:condition", "if_true": { "type": "minecraft:vertical_gradient", "false_at_and_above": { "above_bottom": 5 }, "random_name": "minecraft:bedrock_floor", "true_at_and_below": { "above_bottom": 0 } }, "then_run": { "type": "minecraft:block", "result_state": { "Name": "minecraft:bedrock" } } } And a similar condition is also applied to generate the Deepslate transition from Stone starting from Y level 8 to Y level 0 (notice the "false_at_and_above" and "true_at_and_below" properties) { "type": "minecraft:condition", "if_true": { "type": "minecraft:vertical_gradient", "false_at_and_above": { "absolute": 8 }, "random_name": "minecraft:deepslate", "true_at_and_below": { "absolute": 0 } }, "then_run": { "type": "minecraft:block", "result_state": { "Name": "minecraft:deepslate", "Properties": { "axis": "y" } } } } So starting from this you can get an idea of how to create smooth transitions between your "biome layers". Now, to generate blocks only at the top 10 blocks of the biome right now I can't think about any vanilla biome that does a similar thing, but maybe looking at how the Badlands or the Snowy Slope biome are constructed may be a good ay to follow Don't blame me if i always ask for your help. I just want to learn to be better
December 26, 20231 yr Author 10 hours ago, JimiIT92 said: I'm assuming you are using the Terrablender API for this (if not please tell me how you added a new biome to the Overworld without that, since it looks like that's the only way 🤣). Anyway you coul always look at how vanilla does declare these Surface Rules, specifically the one for the mountain biomes (I think they are actually defined in the JSON file, but from the code you can get an idea of how these conditions works). One condition I can think would be interesting is the SurfaceRules.VerticalGradientConditionSource condition. Judging from the name you can guess that this is the condition used to create some gradients. For instance, if we look at the Overworld noise settings file (worldgen/noise_settings/overworld.json), this is used to generate the Bedrock layer at the bottom of the World and make it transitioning from Bedrock to Deepslate to not have it flat  { "type": "minecraft:condition", "if_true": { "type": "minecraft:vertical_gradient", "false_at_and_above": { "above_bottom": 5 }, "random_name": "minecraft:bedrock_floor", "true_at_and_below": { "above_bottom": 0 } }, "then_run": { "type": "minecraft:block", "result_state": { "Name": "minecraft:bedrock" } } } And a similar condition is also applied to generate the Deepslate transition from Stone starting from Y level 8 to Y level 0 (notice the "false_at_and_above" and "true_at_and_below" properties) { "type": "minecraft:condition", "if_true": { "type": "minecraft:vertical_gradient", "false_at_and_above": { "absolute": 8 }, "random_name": "minecraft:deepslate", "true_at_and_below": { "absolute": 0 } }, "then_run": { "type": "minecraft:block", "result_state": { "Name": "minecraft:deepslate", "Properties": { "axis": "y" } } } } So starting from this you can get an idea of how to create smooth transitions between your "biome layers". Now, to generate blocks only at the top 10 blocks of the biome right now I can't think about any vanilla biome that does a similar thing, but maybe looking at how the Badlands or the Snowy Slope biome are constructed may be a good ay to follow It seems like I've forgotten to include my repo link... sorry. Yes I am using TerraBlender. I've included the link in the main post now. Anyway: Thanks for your help, I will see if I get something to work
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.