Jump to content

[1.20] Surface rules in custom biome generation


Robin Roloff

Recommended Posts

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 by Robin Roloff
Included github repo link
Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

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 :)

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.

Guest
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.