Deploying to gh-pages from @ ad13cc131b 🚀

This commit is contained in:
misode
2022-05-11 16:18:57 +00:00
parent 03e51b057c
commit 3ccbe61df7
67 changed files with 274 additions and 273 deletions

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -44,14 +44,14 @@ A structure set is where the placement starts. It defines where in the world the
}
```
Structure sets are made up of two parts:
* `structures`: A weighted list of configured structure features [(see next step)](#the{#[1.18.2] -configured #}-structure).
* `placement`: The structure placement
* `placement.type`: Either `random_spread` or `concentric_rings`. The latter is only used by strongholds in vanilla, so we'll focus on `random_spread`
* `placement.spacing`: Roughly the average distance in chunks between two structures in this set.
* `placement.separation`: The minimum distance in chunks. Needs to be smaller than spacing.
* `placement.salt`: A random number that is combined with the world seed. Always use a different random number for different structures, otherwise they will end up being placed in the same spot!
* f`structures`: A weighted list of configured structure features [(see next step)](#the{#[1.18.2] -configured #}-structure).
* f`placement`: The structure placement
* f`type`: Either s`random_spread` or s`concentric_rings`. The latter is only used by strongholds in vanilla, so we'll focus on s`random_spread`
* f`spacing`: Roughly the average distance in chunks between two structures in this set.
* f`separation`: The minimum distance in chunks. Needs to be smaller than spacing.
* f`salt`: A random number that is combined with the world seed. Always use a different random number for different structures, otherwise they will end up being placed in the same spot!
When using the `random_spread` placement type, it generates structures grid-based. Here's an illustration of the above example with `spacing = 5`, `separation = 2`. There will be one structure attempt in each 5x5 chunk grid, and only at `X` a structure can spawn.
When using the s`random_spread` placement type, it generates structures grid-based. Here's an illustration of the above example with `spacing = 5`, `separation = 2`. There will be one structure attempt in each 5x5 chunk grid, and only at `X` a structure can spawn.
```
.............
..XXX..XXX..X
@@ -100,23 +100,24 @@ The {#[1.18.2] configured structure (feature) #}{#[1.19] structure #} is the ID
```
Let's go over all the fields.
{#[1.18.2]
* `type`: This is the structure feature type. When making custom structures, you almost always want to set this to `village` or `bastion_remnant`. There is one important difference between the two: using `village` will spawn the structure on the surface, while `bastion_remnant` will always spawn the structure at Y=33.
* `config.start_pool`: This is a reference to the **template pool** [(see next step)](#the-template-pool).
* `config.size`: This is a number between 1 and 7. This is important if your structure uses jigsaw. In this simple example, we'll leave it at 1.
* `biomes`: This controls in which biomes this structure is allowed to generate. You can give it any biome tag, a list of biomes, or a single biome. For easy testing we'll set it to every biome with mineshafts.
* `adapt_noise`: When true, it will add extra terrain below each structure piece.
* `spawn_overrides`: This field allows you to override mob spawning inside the structure bounding boxes. This is outside the scope of this guide, but you could look at the [vanilla monument](/worldgen/structure-feature/?preset=monument&version={#version#}) structure feature as a reference.
* f`type`: This is the structure feature type. When making custom structures, you almost always want to set this to s`village` or s`bastion_remnant`. There is one important difference between the two: using s`village` will spawn the structure on the surface, while s`bastion_remnant` will always spawn the structure at Y=33.
* f`config`:
* f`start_pool`: This is a reference to the **template pool** [(see next step)](#the-template-pool).
* f`size`: This is a number between 1 and 7. This is important if your structure uses jigsaw. In this simple example, we'll leave it at 1.
* f`biomes`: This controls in which biomes this structure is allowed to generate. You can give it any biome tag, a list of biomes, or a single biome. For easy testing we'll set it to every biome with mineshafts.
* f`adapt_noise`: When true, it will add extra terrain below each structure piece.
* f`spawn_overrides`: This field allows you to override mob spawning inside the structure bounding boxes. This is outside the scope of this guide, but you could look at the [vanilla monument](/worldgen/structure-feature/?preset=monument&version={#version#}) structure feature as a reference.
#}{#[1.19]
* `type`: This is the structure type. When making custom structures, you almost always want to set this to `jigsaw`.
* `biomes`: This controls in which biomes this structure is allowed to generate. You can give it any biome tag, a list of biomes, or a single biome. For easy testing we'll set it to every biome with mineshafts.
* `step`: The generation step to place the features in. This matches the steps in a biome's `feature` list. Possible values: `raw_generation`, `lakes`, `local_modifications`, `underground_structures`, `surface_structures`, `strongholds`, `underground_ores`, `underground_decoration`, `fluid_springs`, `vegetal_decoration`, and `top_layer_modification`.
* `spawn_overrides`: This field allows you to override mob spawning inside the structure bounding boxes. This is outside the scope of this guide, but you could look at the [vanilla monument](/worldgen/structure/?preset=monument&version={#version#}) structure feature as a reference.
* `start_pool`: This is a reference to the **template pool** [(see next step)](#the-template-pool).
* `size`: This is a number between 1 and 7. This is important if your structure uses jigsaw. In this simple example, we'll leave it at 1.
* `start_height`: A height provider specifying at which height the structure should spawn. The example uses the constant shorthand so it just specifies a vertical anchor.
* `project_start_to_heightmap`: An optional heightmap type. Possible values: `WORLD_SURFACE_WG`, `WORLD_SURFACE`, `OCEAN_FLOOR_WG`, `OCEAN_FLOOR`, `MOTION_BLOCKING`, and `MOTION_BLOCKING_NO_LEAVES`. If `start_height` is not 0, will move the start relative to the heightmap.
* `max_distance_from_center`: Value between 1 and 128. The maximum distance that a jigsaw can branch out.
* `use_expansion_hack`: You should always set this to false. Vanilla villages set this to true to fix an issue with their streets.
* f`type`: This is the structure type. When making custom structures, you almost always want to set this to s`jigsaw`.
* f`biomes`: This controls in which biomes this structure is allowed to generate. You can give it any biome tag, a list of biomes, or a single biome. For easy testing we'll set it to every biome with mineshafts.
* f`step`: The generation step to place the features in. This matches the steps in a biome's `feature` list. Possible values: s`raw_generation`, s`lakes`, s`local_modifications`, s`underground_structures`, s`surface_structures`, s`strongholds`, s`underground_ores`, s`underground_decoration`, s`fluid_springs`, s`vegetal_decoration`, and s`top_layer_modification`.
* f`spawn_overrides`: This field allows you to override mob spawning inside the structure bounding boxes. This is outside the scope of this guide, but you could look at the [vanilla monument](/worldgen/structure/?preset=monument&version={#version#}) structure feature as a reference.
* f`start_pool`: This is a reference to the **template pool** [(see next step)](#the-template-pool).
* f`size`: This is a number between 1 and 7. This is important if your structure uses jigsaw. In this simple example, we'll leave it at 1.
* f`start_height`: A height provider specifying at which height the structure should spawn. The example uses the constant shorthand so it just specifies a vertical anchor.
* f`project_start_to_heightmap`: An optional heightmap type. Possible values: s`WORLD_SURFACE_WG`, s`WORLD_SURFACE`, s`OCEAN_FLOOR_WG`, s`OCEAN_FLOOR`, s`MOTION_BLOCKING`, and s`MOTION_BLOCKING_NO_LEAVES`. If f`start_height` is not 0, will move the start relative to the heightmap.
* f`max_distance_from_center`: Value between 1 and 128. The maximum distance that a jigsaw can branch out.
* f`use_expansion_hack`: You should always set this to false. Vanilla villages set this to true to fix an issue with their streets.
#}
## The template pool
@@ -141,13 +142,13 @@ The template pool defines how to build up your structure. Since we're not using
}
```
Again, let's go over the fields:
* `name`: For some reason, the game needs the name of this template pool. Just set this to the ID of the template pool.
* `fallback`: Used in jigsaw structures, but we can simply use `minecraft:empty`.
* `elements`: A weighted list of pool elements to choose from. You can add multiple elements here if your structure has different starting structure files. For example in vanilla a plains village has different town center variants.
* `element_type`: The type of this element. One of `empty_pool_element` (placing nothing), `feature_pool_element` (placing a placed feature), `legacy_single_pool_element`, `list_pool_element`, and `single_pool_element` (placing a structure).
* `location`: The path to the structure NBT file. [(see next step)](#the-structure-nbt).
* `projection`: Either `rigid` or `terrain_matching`. Use the latter if you want the structure to match the terrain, just like village paths do.
* `processors`: If you want to run any processor lists, this is quite complicated so again we'll skip this for now and set it to `minecraft:empty`.
* f`name`: For some reason, the game needs the name of this template pool. Just set this to the ID of the template pool.
* f`fallback`: Used in jigsaw structures, but we can simply use s`minecraft:empty`.
* f`elements`: A weighted list of pool elements to choose from. You can add multiple elements here if your structure has different starting structure files. For example in vanilla a plains village has different town center variants.
* f`element_type`: The type of this element. One of s`empty_pool_element` (placing nothing), s`feature_pool_element` (placing a placed feature), s`legacy_single_pool_element`, s`list_pool_element`, and s`single_pool_element` (placing a structure).
* f`location`: The path to the structure NBT file. [(see next step)](#the-structure-nbt).
* f`projection`: Either s`rigid` or s`terrain_matching`. Use the latter if you want the structure to match the terrain, just like village paths do.
* f`processors`: If you want to run any processor lists, this is quite complicated so again we'll skip this for now and set it to s`minecraft:empty`.
## The structure NBT
Creating the structure NBT file is entirely up to you. In this example I'm going to use a tower structure from [Gamemode 4](https://gm4.co/modules/tower-structures).

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -11,9 +11,9 @@ tags:
[Density functions](/worldgen/density-function/) are used by the dimension generator to generate the terrain. They make up mathematical expressions that decide whether or not a block should be solid terrain.
## Noise router
The noise router is a piece of configuration in [noise settings](/worldgen/noise-settings/). It's a collection of density functions, some used for the biome layout, aquifers, or ore veins. The one that decides the terrain is **`final_density`**. This density function will be computed for every block position. If it returns a value greater than `0` the default block will be placed, otherwise either air or the default fluid will be placed.
The noise router is a piece of configuration in [noise settings](/worldgen/noise-settings/). It's a collection of density functions, some used for the biome layout, aquifers, or ore veins. The one that decides the terrain is **f`final_density`**. This density function will be computed for every block position. If it returns a value greater than n`0` the default block will be placed, otherwise either air or the default fluid will be placed.
With this information we can make the most basic noise router, one where every density function is set to `0`. As predicted, this will result in a void world. Similarly, setting `"final_density": 1` will result in a world completely filled with stone.
With this information we can make the most basic noise router, one where every density function is set to n`0`. As predicted, this will result in a void world. Similarly, setting `"final_density": 1` will result in a world completely filled with stone.
**`data/minecraft/worldgen/noise_settings/overworld.json`**
```json
@@ -86,12 +86,12 @@ The following is a list of all density functions in {#version#}
### `abs`
Calculates the absolute value of another density function.
* `argument`: The input density function
* f`argument`: The input density function
### `add`
Adds two density functions together.
* `argument1`: The first density function
* `argument2`: The second density function
* f`argument1`: The first density function
* f`argument2`: The second density function
### `beardifier`
Adds beards for structures (see the `terrain_adaptation` field).
@@ -103,7 +103,7 @@ Adds beards for structures (see the `terrain_adaptation` field).
*This density function has no extra fields*
### `blend_density`
* `argument`: The input density function
* f`argument`: The input density function
### `blend_offset`
@@ -111,29 +111,29 @@ Adds beards for structures (see the `terrain_adaptation` field).
### `cache_2d`
Only computes the input density once for each column, at Y=0
* `argument`: The input density function
* f`argument`: The input density function
### `cache_all_in_cell`
Used in combination with [`interpolated`](#interpolated).
* `argument`: The input density function
* f`argument`: The input density function
### `cache_once`
If this density function is referenced twice, it is only computed once per block position.
* `argument`: The input density function
* f`argument`: The input density function
### `clamp`
Clamps the input between two values.
* `input`: The input density function
* `min`: The lower bound
* `max`: The upper bound
* f`input`: The input density function
* f`min`: The lower bound
* f`max`: The upper bound
### `constant`
A constant value. `{"type": "constant", "argument": 2}` is equivalent to `2`.
* `argument`: The constant number
A constant value. j`{"type": "constant", "argument": 2}` is equivalent to n`2`.
* f`argument`: The constant number
### `cube`
Cubes the input. (`x^3`)
* `argument`: The input density function
* f`argument`: The input density function
### `end_islands`
@@ -144,114 +144,114 @@ Similar to [`cache_2d`](#cache_2d) in that it only computes the input once for e
### `half_negative`
If the input is negative, returns half of the input. Otherwise returns the input. (`x < 0 ? x/2 : x`)
* `argument`: The input density function
* f`argument`: The input density function
### `interpolated`
Computes the input density at each of the 8 corners of a cell and interpolates between them. The size of a cell if determined by `size_horizontal * 4` and `size_vertical * 4`.
* `argument`: The input density function
* f`argument`: The input density function
### `max`
Returns the maximum of two density functions.
* `argument1`: The first density function
* `argument2`: The second density function
* f`argument1`: The first density function
* f`argument2`: The second density function
### `min`
Returns the minimum of two density functions.
* `argument1`: The first density function
* `argument2`: The second density function
* f`argument1`: The first density function
* f`argument2`: The second density function
### `mul`
Multiplies two density functions.
* `argument1`: The first density function
* `argument2`: The second density function
* f`argument1`: The first density function
* f`argument2`: The second density function
### `noise`
The noise density function samples a noise.
* `noise`: A reference to a `worldgen/noise` file
* `xz_scale`: Scales the X and Z inputs before sampling
* `y_scale`: Scales the Y input before sampling
* f`noise`: A reference to a `worldgen/noise` file
* f`xz_scale`: Scales the X and Z inputs before sampling
* f`y_scale`: Scales the Y input before sampling
### `old_blended_noise`
Uses a different kind of noise than [`noise`](#noise).
* `xz_scale`
* `y_scale`
* `xz_factor`
* `y_factor`
* `smear_scale_multiplier`
* f`xz_scale`
* f`y_scale`
* f`xz_factor`
* f`y_factor`
* f`smear_scale_multiplier`
### `quarter_negative`
If the input is negative, returns a quarter of the input. Otherwise returns the input. (`x < 0 ? x/4 : x`)
* `argument`: The input density function
* f`argument`: The input density function
### `range_choice`
Computes the input value, and depending on that result returns one of two other density functions.
* `input`: The input density function
* `min_inclusive`: The lower bound of the range
* `max_exclusive`: The upper bound of the range
* `when_in_range`: Density function that will be returned when the input is inside the range
* `when_out_of_range`: Density function that will be returned When the input is outside the range
* f`input`: The input density function
* f`min_inclusive`: The lower bound of the range
* f`max_exclusive`: The upper bound of the range
* f`when_in_range`: Density function that will be returned when the input is inside the range
* f`when_out_of_range`: Density function that will be returned When the input is outside the range
### `shift`
Computes the input density at `(x/4, y/4, z/4)`.
* `argument`: The input density function
* f`argument`: The input density function
### `shift_a`
Computes the input density at `(x/4, 0, z/4)`.
* `argument`: The input density function
* f`argument`: The input density function
### `shift_b`
Computes the input density at `(z/4, x/4, 0)`.
* `argument`: The input density function
* f`argument`: The input density function
### `shifted_noise`
Similar to [`noise`](#noise), but first shifts the input coordinates.
* `noise`: A reference to a `worldgen/noise` file
* `xz_scale`: Scales the X and Z inputs before sampling
* `y_scale`: Scales the Y input before sampling
* `shift_x`: Density function used to offset the X input
* `shift_y`: Density function used to offset the Y input
* `shift_z`: Density function used to offset the Z input
* f`noise`: A reference to a `worldgen/noise` file
* f`xz_scale`: Scales the X and Z inputs before sampling
* f`y_scale`: Scales the Y input before sampling
* f`shift_x`: Density function used to offset the X input
* f`shift_y`: Density function used to offset the Y input
* f`shift_z`: Density function used to offset the Z input
### `spline`
Computes a spline. More information about splines will follow in a future guide.
* `spline`: The spline, can be either a number or an object:
* `coordinate`: The density function that will be used for the locations
* `points`: List of points of the cubic spline, cannot be empty
* `location`: Input value
* `value`: Output value, can be either a number or a spline object
* `derivative`: The slope at this point
* f`spline`: The spline, can be either a number or an object:
* f`coordinate`: The density function that will be used for the locations
* f`points`: List of points of the cubic spline, cannot be empty
* f`location`: Input value
* f`value`: Output value, can be either a number or a spline object
* f`derivative`: The slope at this point
{#[1.18.2]
* `min_value`: The minimum output value of the spline
* `max_value`: The maximum output value of the spline
* f`min_value`: The minimum output value of the spline
* f`max_value`: The maximum output value of the spline
#}
### `square`
Squares the input. (`x^2`)
* `argument`: The input density function
* f`argument`: The input density function
### `squeeze`
First clamps the input between `-1` and `1`, then transforms it using `x/2 - x*x*x/24`.
* `argument`: The input density function
* f`argument`: The input density function
{#[1.18.2]
### `terrain_shaper_spline`
Computes a terrain shaper spline from the noise settings.
* `spline`: The terrain shaper spline to use. One of `offset`, `factor`, or `jaggedness`
* `min_value`: The minimum output value of the spline
* `max_value`: The maximum output value of the spline
* `continentalness`: The density function to use for the `continents` spline coordinate
* `erosion`: The density function to use for the `erosion` spline coordinate
* `weirdness`: The density function to use for the `weirdness` spline coordinate
* f`spline`: The terrain shaper spline to use. One of s`offset`, s`factor`, or s`jaggedness`
* f`min_value`: The minimum output value of the spline
* f`max_value`: The maximum output value of the spline
* f`continentalness`: The density function to use for the s`continents` spline coordinate
* f`erosion`: The density function to use for the s`erosion` spline coordinate
* f`weirdness`: The density function to use for the s`weirdness` spline coordinate
#}
### `weird_scaled_sampler`
* `rarity_value_mapper`: One of `type_1` or `type_2`
* `noise`: A reference to a `worldgen/noise` file
* `input`: The input density function
* f`rarity_value_mapper`: One of s`type_1` or s`type_2`
* f`noise`: A reference to a `worldgen/noise` file
* f`input`: The input density function
### `y_clamped_gradient`
Returns the Y position after mapping it to a range.
* `from_y`
* `to_y`
* `from_value`: The value to map `from_y` to
* `to_value`: The value to map `to_y` to
* f`from_y`
* f`to_y`
* f`from_value`: The value to map f`from_y` to
* f`to_value`: The value to map f`to_y` to

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -49,10 +49,10 @@ Let's try with an example. We have two biomes here:
}
```
When we try to load these biomes, data pack validation will fail because in the `example:forest` biome in step 2, `blue_tree` is before `rocks`; while in the `example:plains` biome, `rocks` is before `blue_tree`.
When we try to load these biomes, data pack validation will fail because in the `example:forest` biome in step 2, s`blue_tree` is before s`rocks`; while in the `example:plains` biome, s`rocks` is before s`blue_tree`.
## How to fix it
The rule is that for each step in `"features"`, all features need to be ordered consistently across biomes.
The rule is that for each step in f`"features"`, all feature IDs need to be ordered consistently across biomes.
The above example can be fixed by swapping the features in step 2 of the `plains` biome:
**`data/example/worldgen/biome/plains.json`**

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>

View File

@@ -42,8 +42,8 @@
BigInt64Array = function() { }
}
</script>
<script type="module" crossorigin src="/assets/index.0054487e.js"></script>
<link rel="stylesheet" href="/assets/index.24360205.css">
<script type="module" crossorigin src="/assets/index.d2018288.js"></script>
<link rel="stylesheet" href="/assets/index.77d975b6.css">
</head>
<body>
<div data-ea-publisher="misode-github-io" data-ea-manual="true" id="ad-placeholder"></div>