tutorial:chunkgenerator
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:chunkgenerator [2022/12/05 16:32] – removed "draft" designation miir | tutorial:chunkgenerator [2025/02/08 20:28] (current) – adds note to use Registries.CHUNK_GENERATOR on 1.19.3 and above 3xpl0173d | ||
---|---|---|---|
Line 52: | Line 52: | ||
/* this method builds the shape of the terrain. it places stone everywhere, which will later be overwritten with grass, terracotta, snow, sand, etc | /* this method builds the shape of the terrain. it places stone everywhere, which will later be overwritten with grass, terracotta, snow, sand, etc | ||
- | by the buildSurface method. it also is responsible for putting the water in oceans. */ | + | by the buildSurface method. it also is responsible for putting the water in oceans. it returns a CompletableFuture-- you'll likely want this to be delegated to worker threads. */ |
@Override | @Override | ||
public CompletableFuture< | public CompletableFuture< | ||
Line 97: | Line 97: | ||
==== Registering and Codecs ==== | ==== Registering and Codecs ==== | ||
- | Like other features in the game, '' | + | Like other features in the game, '' |
+ | <code java> | ||
+ | public static final Codec< | ||
+ | instance.group( | ||
+ | BiomeSource.CODEC.fieldOf(" | ||
+ | Codec.INT.fieldOf(" | ||
+ | Codec.INT.fieldOf(" | ||
+ | Identifier.fieldOf(" | ||
+ | ).apply(instance, | ||
+ | </ | ||
+ | Each line in the codec corresponds to a different field in your chunk generator that should be configurable. In this example, I pass a '' | ||
+ | |||
+ | To use the fields properly, you have to add them, along with getters, into your class: | ||
+ | |||
+ | <code java> | ||
+ | private final BiomeSource biomeSource; | ||
+ | public BiomeSource getBiomeSource() { | ||
+ | return this.biomeSource; | ||
+ | } | ||
+ | private final int seaLevel; | ||
+ | public int getSeaLevel() { | ||
+ | return this.seaLevel; | ||
+ | } | ||
+ | // and the same for the other fields | ||
+ | </ | ||
+ | |||
+ | and then, create a constructor for your generator that uses each of those fields **in the same order that you listed them in the codec**: | ||
+ | <code java> | ||
+ | public ExampleChunkGenerator(BiomeSource biomeSource, | ||
+ | super(biomeSource); | ||
+ | this.seaLevel = seaLevel; | ||
+ | this.worldHeight = worldHeight; | ||
+ | this.customBlock = Registries.BLOCK.getOrThrow(RegistryKey.of(RegistryKeys.BLOCK, | ||
+ | this.customBlockID = customBlockID; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Then, all that's left is to register your chunk generator. Put the following line into your mod initializer '' | ||
<code java> | <code java> | ||
Registry.register(Registry.CHUNK_GENERATOR, | Registry.register(Registry.CHUNK_GENERATOR, | ||
+ | </ | ||
+ | //* For Minecraft Versions 1.19.3 and above, use '' | ||
+ | // | ||
+ | |||
+ | Now, you can create json files to use your new chunk generator: | ||
+ | <code json> | ||
+ | // resources/ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
</ | </ | ||
And you're done! If you want to use your new generator, it might be helpful to wrap it with a [[tutorial: | And you're done! If you want to use your new generator, it might be helpful to wrap it with a [[tutorial: |
tutorial/chunkgenerator.1670257967.txt.gz · Last modified: 2022/12/05 16:32 by miir