Jump to content

(1.18.2) Modifying features in the vanilla biomes


badkraft

Recommended Posts

I'm researching the how to create biomes in json. There is a great tool for creating the jsons online. Using the vanilla `river` biome, I want to essentially create a custom disk feature that mixes 3 blocks instead of a single-block provider. Any ideas on where to start with that?

Link to comment
Share on other sites

Not sure if this is what you're looking for, but this webpage explains the keys/values for the custom biome json file.

https://minecraft.fandom.com/wiki/Custom_biome

And this link is to slicedlime's GitHub where he posts the vanilla worldgen template files. He's kept it up to date until they started working on 1.19.3. This will give you pretty much everything you need for a worldgen datapack.

https://github.com/slicedlime/examples/commits/master

But, I will admit that I'm not sure I entirely understand what you mean by block provider. This is what the file for the disk_clay feature, in the configure_feature folder, looks like in vanilla:

{
  "type": "minecraft:disk",
  "config": {
    "half_height": 1,
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "max_inclusive": 3,
        "min_inclusive": 2
      }
    },
    "state_provider": {
      "fallback": {
        "type": "minecraft:simple_state_provider",
        "state": {
          "Name": "minecraft:clay"
        }
      },
      "rules": []
    },
    "target": {
      "type": "minecraft:matching_blocks",
      "blocks": [
        "minecraft:dirt",
        "minecraft:clay"
      ]
    }
  }
}

So the clay disk has two blocks in it actually, dirt and clay. I don't think it would be a problem to add a third block to the list. There is a file for disk_sand and disk_gravel as well.

Link to comment
Share on other sites

8 hours ago, badkraft said:

Are these files in minecraft data? If so, where?

But, spot on. That's what I was hoping for.

Thanks!

This came from slicedlime's download links. Last I knew, the guy works for Mojang. So yes, I assume it's somewhere in the vanilla jar, but probably obfuscated. I say this because you can pull any jar for a version of Minecraft you've played right from the game's folders, but when you look into the data folder of the jar, the worldgen folder isn't there until you hit 1.19.3. This is probably why he stopped posting them at that point.

So to find the jar on a PC it's AppData/Roaming/.minecraft/versions/ and in there will be folders for every version you've ever played. In each of those folders is a matching jar. This means that you'll probably be able to find it all in the external libraries of your workspace as well.

  • Like 1
Link to comment
Share on other sites

1 hour ago, badkraft said:

Ok... I'm not getting anything helpful in the directories. I've looked in the 1.18.2 since that's the version I'm working from.

Image insert isn't working so here is my directory structure.

I'll just start putting my modified .json files in ... let me see - ./data/modid/worldgen/

  • biome
  • placedfeature
  • etc.

Okay, so I'm pretty sure the zip folder you want from slicedlime is this one:

https://github.com/slicedlime/examples/tree/d766a7028865fc210bef3ddcffb54886cdaf4860

This should give you all the vanilla worldgen files and folders to look at as templates as well as how to place them in your own namespace.

I will admit that mostly what I've done with datapacks is make compatibility packs to make mods and datapacks more friendly with each other, or to make custom NPC villages for my sons. I've only dabbled in custom biomes a few times (tried to make a biome with spider spawners in the trees, but that didn't go well - the spawners still only spawn pigs), but I will help with whatever I can. The way I learn things is through exploration and experimentation, so I promise I'm not trying to confuse or mess anyone up. All I can do with certainty is share the information I've come across. Whether I understand it correctly or not is another matter.

There isn't a lot of documentation or tutorials for making datapacks. They exist, but basically be willing to experiment quite a bit until you get what you're aiming for. I never shared anything I made, but if it ends up being useful to you or relevant to what you're trying to do here, I'll put it up to look at in my GitHub. All of this is something I find very interesting, so I don't mind learning it with you.

Link to comment
Share on other sites

He's actually got a  mistake in the video. It's relatively minor, though. But as far as accuracy, no one really tells you what to do to include biome modifications, configured/placed features, etc. You never get all the information in one place. Developers are the world's most ineffective documenters (I know because I am one) ... 

This is what I've done so far...

First using Data Pack Generators created a project and organized like mod directory structure.

Second, I created a custom `configured_feature/disk_clay` and `placed_feature/disk_clay` for the `minecraft:river` biome to reference. But I have more planned changes to the river biome (and others). So, I copied minecraft `river.json`, place that in the `foundations/data/worldgen/biome/` directory.

To have minecraft reference the biome, I overrode the default `minecraft/data/dimension/overworld.json`. Where ever I found `minecraft:river` in overworld.json, I replaced with `foundations:river`.

The clay is still just minecraft:clay ... not foundations:clay_block. See screen shot.

So, I don't know what is keeping my clay blocks from being in the feature.

See directory structure.

There are 8 entries in `minecraft/dimension/overworld.json` where we can find `foundations:river`. The file is huge so I'm only including one of the biome entries...

Spoiler
        {
          "biome": "foundations:river",
          "parameters": {
            "temperature": [
              -0.45,
              1
            ],
            "humidity": [
              -1,
              1
            ],
            "continentalness": [
              -0.19,
              -0.11
            ],
            "erosion": [
              -1,
              -0.375
            ],
            "weirdness": [
              -0.05,
              0.05
            ],
            "depth": 0,
            "offset": 0
          }
        },

 

`foundations/worldgen/biome/river.json` See entry near the bottom of the features list.

Spoiler
{
  "temperature": 0.5,
  "downfall": 0.5,
  "precipitation": "rain",
  "category": "river",
  "effects": {
    ... snipped - irrelevant ...
  },
  "spawners": {
    ... snipped - irrelevant ...
  },
  "spawn_costs": {},
  "carvers": {
    ... snipped - irrelevant ...
  },
  "features": [
    ... snipped - irrelevant ... ,
    [
      "minecraft:ore_dirt",
      "minecraft:ore_gravel",
      "minecraft:ore_granite_upper",
      "minecraft:ore_granite_lower",
      "minecraft:ore_diorite_upper",
      "minecraft:ore_diorite_lower",
      "minecraft:ore_andesite_upper",
      "minecraft:ore_andesite_lower",
      "minecraft:ore_tuff",
      "minecraft:ore_coal_upper",
      "minecraft:ore_coal_lower",
      "minecraft:ore_iron_upper",
      "minecraft:ore_iron_middle",
      "minecraft:ore_iron_small",
      "minecraft:ore_gold",
      "minecraft:ore_gold_lower",
      "minecraft:ore_redstone",
      "minecraft:ore_redstone_lower",
      "minecraft:ore_diamond",
      "minecraft:ore_diamond_large",
      "minecraft:ore_diamond_buried",
      "minecraft:ore_lapis",
      "minecraft:ore_lapis_buried",
      "minecraft:ore_copper",
      "minecraft:underwater_magma",
      "foundations:disk_clay",
      "minecraft:disk_sand",
      "minecraft:disk_gravel"
    ],
    ... snipped - irrelevant ...
  ]
}

 

`foundations/worldgen/configured_feature/disk_clay.json`

Spoiler
{
  "type": "minecraft:disk",
  "config": {
    "state": {
      "Name": "minecraft:clay"
    },
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "min_inclusive": 2,
        "max_inclusive": 3
      }
    },
    "half_height": 1,
    "targets": [
      {
        "Name": "foundations:clay_block"
      },
      {
        "Name": "minecraft:gravel"
      },
      {
        "Name": "minecraft:clay"
      }
    ]
  }
}

And finally, `foundations/worldgen/placed_feature/disk_clay.json`

Spoiler
{
  "feature": "foundations:disk_clay",
  "placement": [
    {
      "type": "minecraft:in_square"
    },
    {
      "type": "minecraft:heightmap",
      "heightmap": "OCEAN_FLOOR_WG"
    },
    {
      "type": "minecraft:biome"
    }
  ]
}

 

P.S. -- how come I can insert image links from imgur?

Edited by badkraft
added relevant source materials
Link to comment
Share on other sites

2 hours ago, badkraft said:

P.S. -- how come I can insert image links from imgur?

Bottom right of the forum's comment box is a button that says, "Insert image from URL" copy the direct link of your image from Imagur to paste it in there.

As far as why your blocks aren't showing up, I don't know yet. And, yeah, I've noticed that the info is all over the place for datapacks. It's actually been easier for me to find stuff for Forge since I started modding - which I didn't expect. But, maybe this is because Forge has been around longer than the datapack feature so the community has had more time to do stuff with Forge in contrast with datapacks? As far as devs not documenting stuff? Well, you guys are busy so I get it. Honestly, I'm surprised he shared as much as he did for as long as he did.

Link to comment
Share on other sites

48 minutes ago, Warren Tode said:

Bottom right of the forum's comment box is a button that says, "Insert image from URL" copy the direct link of your image from Imagur to paste it in there.

Yeah, I've tried that. When I paste the link and click `Insert Into Post`, the button acts like it's disabled.

I'm going to add my json files in the previous post. It's usually some kind of little detail - like using `minecraft:` instead of my mod name.

Link to comment
Share on other sites

4 hours ago, badkraft said:

Yeah, I've tried that. When I paste the link and click `Insert Into Post`, the button acts like it's disabled.

I'm going to add my json files in the previous post. It's usually some kind of little detail - like using `minecraft:` instead of my mod name.

That is so weird, I don't know why the image link thing isn't working for you. :(

And I will try to make my own river with a custom clay disk to see what gives. I'm wondering if I misunderstood the format or something. Give me a bit and I'll see what I can figure out if anything.

Link to comment
Share on other sites

I've tried making my own test datapack in 1.18.2 with a custom river biome. The river generates just fine, but I'm running into the same problem as you are with the custom disk feature. I went so far as to remove all of the other disk features from my biome to be sure and it doesn't seem to matter what order I place the block replacing the clay (in my case, magenta concrete) my custom disk doesn't generate. I'm not sure what the problem is. Starting to wonder if there's another file we need.

  • Like 1
Link to comment
Share on other sites

7 hours ago, Warren Tode said:

I've tried making my own test datapack in 1.18.2 with a custom river biome. The river generates just fine, but I'm running into the same problem as you are with the custom disk feature. I went so far as to remove all of the other disk features from my biome to be sure and it doesn't seem to matter what order I place the block replacing the clay (in my case, magenta concrete) my custom disk doesn't generate. I'm not sure what the problem is. Starting to wonder if there's another file we need.

I began wondering the same - if there was a file missing or something. I kind of did the same as you, removing `minecraft:clay` from the disk_clay feature and that doesn't make a difference. It's like the feature is being ignored altogether.

I'm going to work around the problem in a 2-step process. I really want to be able to modify the biome.

  1. remove all the custom `river.json`, etc. from my mod with just the modified configured/placed feature in the minecraft/data folder; or,
  2. modify the `minecraft:clay` loot table to drop my custom item

 

Link to comment
Share on other sites

Okay, so I got it working for both 1.18.2 and 1.19.2 - in the process I learned that for 1.18.2 the configured feature file format only allows for you to place a single block, and it's in 1.19 that you're able to use weighted lists or noise providers for block placement in the disk feature. Meaning, that I was initially incorrect altogether about how the format works regarding block placement. For this I'm sorry.

So in 1.18.2 the configured feature placement looks like this:

Spoiler

 

{
  "type": "minecraft:disk",
  "config": {
    "state": {
		"Name": "minecraft:magenta_concrete"
    },
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "min_inclusive": 2,
        "max_inclusive": 8
      }
    },
    "half_height": 4,
    "targets": [
		{
			"Name": "minecraft:dirt"
		}
    ]
  }
}

In the "targets" section, you are permitted to have multiple blocks listed, and these are the blocks being replaced by the block defined first in "state".


However in 1.19.2, the format can look something like this:

Spoiler

 

{
  "type": "minecraft:disk",
  "config": {
    "state_provider": {
      "fallback": {
        "type": "minecraft:weighted_state_provider",
        "entries": [
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:cyan_concrete"
            }
          },
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:green_concrete"
            }
          },
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:magenta_concrete"
            }
          }
        ]
      },
      "rules": []
    },
    "target": {
      "type": "minecraft:matching_blocks",
      "blocks": "minecraft:dirt"
    },
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "min_inclusive": 2,
        "max_inclusive": 3
      }
    },
    "half_height": 1
  }
}

Which gives me this for a result:

ndytaiZ.png

I hope this helps and I apologize for getting things mixed up earlier.

Edit: I've put both test datapacks in GitHub for anyone to look at.

1.18.2 Test Datapack
https://github.com/toadie-odie/TestDatapack-1.18.2

1.19.2 Test Datapack
https://github.com/toadie-odie/TestDatapack-1.19.2

Edited by Warren Tode
forgot to add GitHub links
  • Like 1
Link to comment
Share on other sites

1 hour ago, badkraft said:

I began wondering the same - if there was a file missing or something. I kind of did the same as you, removing `minecraft:clay` from the disk_clay feature and that doesn't make a difference. It's like the feature is being ignored altogether.

I'm going to work around the problem in a 2-step process. I really want to be able to modify the biome.

  1. remove all the custom `river.json`, etc. from my mod with just the modified configured/placed feature in the minecraft/data folder; or,
  2. modify the `minecraft:clay` loot table to drop my custom item

 

I also learned that you can add new disk features - up to a point. I put back the disk_clay, disk_gravel, and disk_sand and named my disk feature for 1.18.2 disk_concrete. All this worked just fine. When I tried to add disk_concrete_1, disk_concrete_2 to that list, 1 & 2 didn't show up. Not sure if it's due to the way I named them or if there is a limit as to how many disk features you can add to a biome.

I think you should be able to get your custom feature working just fine with the adjustments mentioned above, and if you don't want to completely replace the clay block, you could just rename your disk feature to something different so that the vanilla clay disks can be placed as well.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

After a couple of weeks thinking about this while on the road, I'm going to replace the standard clay block in generation with mine. You'll still be able to craft the `minecraft:clay` but it won't generate.

Later, I'll upgrade generation with a structure. That will allow multiple block types. I'm going to stick with 1.18.2 until I get Foundations where I want it. By then, around 1.21, 1.22 or 1.25, I'll update. I just can't see doing all this work for every version. If I'm always updating to a new version, I can't actually create features.

Link to comment
Share on other sites

On 2/6/2023 at 10:30 AM, Warren Tode said:

Okay, so I got it working for both 1.18.2 and 1.19.2 - in the process I learned that for 1.18.2 the configured feature file format only allows for you to place a single block, and it's in 1.19 that you're able to use weighted lists or noise providers for block placement in the disk feature. Meaning, that I was initially incorrect altogether about how the format works regarding block placement. For this I'm sorry.

So in 1.18.2 the configured feature placement looks like this:

  Reveal hidden contents

 

{
  "type": "minecraft:disk",
  "config": {
    "state": {
		"Name": "minecraft:magenta_concrete"
    },
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "min_inclusive": 2,
        "max_inclusive": 8
      }
    },
    "half_height": 4,
    "targets": [
		{
			"Name": "minecraft:dirt"
		}
    ]
  }
}

In the "targets" section, you are permitted to have multiple blocks listed, and these are the blocks being replaced by the block defined first in "state".


However in 1.19.2, the format can look something like this:

  Reveal hidden contents

 

{
  "type": "minecraft:disk",
  "config": {
    "state_provider": {
      "fallback": {
        "type": "minecraft:weighted_state_provider",
        "entries": [
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:cyan_concrete"
            }
          },
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:green_concrete"
            }
          },
          {
            "weight": 1,
            "data": {
              "Name": "minecraft:magenta_concrete"
            }
          }
        ]
      },
      "rules": []
    },
    "target": {
      "type": "minecraft:matching_blocks",
      "blocks": "minecraft:dirt"
    },
    "radius": {
      "type": "minecraft:uniform",
      "value": {
        "min_inclusive": 2,
        "max_inclusive": 3
      }
    },
    "half_height": 1
  }
}

Which gives me this for a result:

ndytaiZ.png

I hope this helps and I apologize for getting things mixed up earlier.

Edit: I've put both test datapacks in GitHub for anyone to look at.

1.18.2 Test Datapack
https://github.com/toadie-odie/TestDatapack-1.18.2

1.19.2 Test Datapack
https://github.com/toadie-odie/TestDatapack-1.19.2

My configured feature was wrong. I had the wrong block as the provider (state).

It's working now.

  • Like 1
Link to comment
Share on other sites

On 2/18/2023 at 10:31 AM, badkraft said:

After a couple of weeks thinking about this while on the road, I'm going to replace the standard clay block in generation with mine. You'll still be able to craft the `minecraft:clay` but it won't generate.

Later, I'll upgrade generation with a structure. That will allow multiple block types. I'm going to stick with 1.18.2 until I get Foundations where I want it. By then, around 1.21, 1.22 or 1.25, I'll update. I just can't see doing all this work for every version. If I'm always updating to a new version, I can't actually create features.

That totally makes sense to me. I've been hanging back in 1.19.2 for this reason as well. I'm not ready to jump right into 1.19.3 just yet. I only jumped into 1.19 when I did because I really liked some of the changes they had made to datapacks at the time and it didn't feel that hard for me to make the leap, but now that I'm tinkering around with Forge I feel like I have my hands full so I'm more than willing to just take my time for now to figure things out.

18 hours ago, badkraft said:

My configured feature was wrong. I had the wrong block as the provider (state).

It's working now.

I'm really glad you got it all sorted out. :)

  • Thanks 1
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.