Compare commits

..

No commits in common. "master" and "0.1.0-BETA-2" have entirely different histories.

91 changed files with 561 additions and 502 deletions

2
Engine

@ -1 +1 @@
Subproject commit 855102ba10dbabadb42574bdc7b445c7069789ed
Subproject commit e151e3ccf02d305378c269e3086863069fdf4a12

@ -1 +1 @@
Subproject commit 1b6d4823b5a792ca938f1add3d6d6a5c0127a09c
Subproject commit cba0f3516ee9aa2d11b3bd4f0e72277c17c8f39b

View File

@ -26,7 +26,7 @@ repositories {
}
dependencies {
implementation fg.deobf("com.terraforged:TerraForged:1.15.2-0.1.0")
implementation fg.deobf("com.terraforged:TerraForged:1.15.2-0.1.0:api")
}
```

View File

@ -109,8 +109,8 @@ classes {
dependsOn(collectLibs)
}
build {
dependsOn("reobfJar")
jar {
finalizedBy("reobfJar")
}
publishing {

View File

@ -0,0 +1,331 @@
{
"biome.terraforged.bryce": "Bryce",
"biome.terraforged.cold_steppe": "Cold Steppe",
"biome.terraforged.fir_forest": "Fir Forest",
"biome.terraforged.flower_plains": "Flower Plains",
"biome.terraforged.frozen_lake": "Frozen Lake",
"biome.terraforged.lake": "Lake",
"biome.terraforged.marshland": "Marshland",
"biome.terraforged.savanna_scrub": "Savanna Scrub",
"biome.terraforged.shattered_savanna_scrub": "Shattered Savanna Scrub",
"biome.terraforged.snowy_fir_forest": "Snowy Fir Forest",
"biome.terraforged.snowy_taiga_scrub": "Snowy Taiga Scrub",
"biome.terraforged.steppe": "Steppe",
"biome.terraforged.stone_forest": "Stone Forest",
"biome.terraforged.taiga_scrub": "Taiga Scrub",
"biome.terraforged.warm_beach": "Warm Beach",
"display.terraforged.climate": "Climate",
"display.terraforged.climate.biome_edge_shape": "Biome Edge Shape",
"display.terraforged.climate.biome_edge_shape.gain": "Gain",
"display.terraforged.climate.biome_edge_shape.lacunarity": "Lacunarity",
"display.terraforged.climate.biome_edge_shape.octaves": "Octaves",
"display.terraforged.climate.biome_edge_shape.scale": "Scale",
"display.terraforged.climate.biome_edge_shape.strength": "Strength",
"display.terraforged.climate.biome_edge_shape.type": "Type",
"display.terraforged.climate.biome_shape": "Biome Shape",
"display.terraforged.climate.biome_shape.biome_size": "Biome Size",
"display.terraforged.climate.biome_shape.biome_warp_scale": "Biome Warp Scale",
"display.terraforged.climate.biome_shape.biome_warp_strength": "Biome Warp Strength",
"display.terraforged.climate.biome_shape.macro_noise_size": "Macro Noise Size",
"display.terraforged.climate.moisture": "Moisture",
"display.terraforged.climate.moisture.bias": "Bias",
"display.terraforged.climate.moisture.falloff": "Falloff",
"display.terraforged.climate.moisture.max": "Max",
"display.terraforged.climate.moisture.min": "Min",
"display.terraforged.climate.moisture.scale": "Scale",
"display.terraforged.climate.temperature": "Temperature",
"display.terraforged.climate.temperature.bias": "Bias",
"display.terraforged.climate.temperature.falloff": "Falloff",
"display.terraforged.climate.temperature.max": "Max",
"display.terraforged.climate.temperature.min": "Min",
"display.terraforged.climate.temperature.scale": "Scale",
"display.terraforged.climate.title": "Climate Settings",
"display.terraforged.dimensions": "Dimensions",
"display.terraforged.dimensions.bedrock_layer": "Bedrock Layer",
"display.terraforged.dimensions.bedrock_layer.material": "Material",
"display.terraforged.dimensions.bedrock_layer.min_depth": "Min Depth",
"display.terraforged.dimensions.bedrock_layer.variance": "Variance",
"display.terraforged.dimensions.dimensions": "Dimensions",
"display.terraforged.dimensions.dimensions.end": "End",
"display.terraforged.dimensions.dimensions.nether": "Nether",
"display.terraforged.filters": "Filters",
"display.terraforged.filters.erosion": "Erosion",
"display.terraforged.filters.erosion.deposite_rate": "Deposite Rate",
"display.terraforged.filters.erosion.droplet_lifetime": "Droplet Lifetime",
"display.terraforged.filters.erosion.droplet_velocity": "Droplet Velocity",
"display.terraforged.filters.erosion.droplet_volume": "Droplet Volume",
"display.terraforged.filters.erosion.erosion_rate": "Erosion Rate",
"display.terraforged.filters.erosion.iterations": "Iterations",
"display.terraforged.filters.smoothing": "Smoothing",
"display.terraforged.filters.smoothing.iterations": "Iterations",
"display.terraforged.filters.smoothing.smoothing_radius": "Smoothing Radius",
"display.terraforged.filters.smoothing.smoothing_rate": "Smoothing Rate",
"display.terraforged.filters.title": "Filter Settings",
"display.terraforged.general.cancel": "Cancel",
"display.terraforged.general.done": "Done",
"display.terraforged.miscellaneous": "Miscellaneous",
"display.terraforged.miscellaneous.custom_biome_features": "Custom Biome Features",
"display.terraforged.miscellaneous.erosion_decorator": "Erosion Decorator",
"display.terraforged.miscellaneous.mountain_biome_usage": "Mountain Biome Usage",
"display.terraforged.miscellaneous.natural_snow_decorator": "Natural Snow Decorator",
"display.terraforged.miscellaneous.smooth_layer_decorator": "Smooth Layer Decorator",
"display.terraforged.miscellaneous.strata_decorator": "Strata Decorator",
"display.terraforged.miscellaneous.title": "Miscellaneous Settings",
"display.terraforged.miscellaneous.vanilla_water_features": "Vanilla Water Features",
"display.terraforged.preset.create": "Create",
"display.terraforged.preset.default": "Make Default",
"display.terraforged.preset.delete": "Delete",
"display.terraforged.preset.load": "Load",
"display.terraforged.preset.reset": "Reset",
"display.terraforged.preset.save": "Save",
"display.terraforged.presets.title": "Presets & Defaults",
"display.terraforged.preview": "Preview",
"display.terraforged.preview.area": "Area: ",
"display.terraforged.preview.biome": "Biome: ",
"display.terraforged.preview.display": "Display",
"display.terraforged.preview.seed": "New Seed",
"display.terraforged.preview.terrain": "Terrain: ",
"display.terraforged.preview.zoom": "Zoom",
"display.terraforged.river.title": "River Settings",
"display.terraforged.rivers": "Rivers",
"display.terraforged.rivers.primary_rivers": "Primary Rivers",
"display.terraforged.rivers.primary_rivers.bank_width": "Bank Width",
"display.terraforged.rivers.primary_rivers.bed_depth": "Bed Depth",
"display.terraforged.rivers.primary_rivers.bed_width": "Bed Width",
"display.terraforged.rivers.primary_rivers.fade": "Fade",
"display.terraforged.rivers.primary_rivers.max_bank_height": "Max Bank Height",
"display.terraforged.rivers.primary_rivers.min_bank_height": "Min Bank Height",
"display.terraforged.rivers.river_count": "River Count",
"display.terraforged.rivers.secondary_river": "Secondary River",
"display.terraforged.rivers.secondary_river.bank_width": "Bank Width",
"display.terraforged.rivers.secondary_river.bed_depth": "Bed Depth",
"display.terraforged.rivers.secondary_river.bed_width": "Bed Width",
"display.terraforged.rivers.secondary_river.fade": "Fade",
"display.terraforged.rivers.secondary_river.max_bank_height": "Max Bank Height",
"display.terraforged.rivers.secondary_river.min_bank_height": "Min Bank Height",
"display.terraforged.rivers.tertiary_rivers": "Tertiary Rivers",
"display.terraforged.rivers.tertiary_rivers.bank_width": "Bank Width",
"display.terraforged.rivers.tertiary_rivers.bed_depth": "Bed Depth",
"display.terraforged.rivers.tertiary_rivers.bed_width": "Bed Width",
"display.terraforged.rivers.tertiary_rivers.fade": "Fade",
"display.terraforged.rivers.tertiary_rivers.max_bank_height": "Max Bank Height",
"display.terraforged.rivers.tertiary_rivers.min_bank_height": "Min Bank Height",
"display.terraforged.structures": "Structures",
"display.terraforged.structures.mansions": "Mansions",
"display.terraforged.structures.mansions.distance": "Distance",
"display.terraforged.structures.mansions.separation": "Separation",
"display.terraforged.structures.ocean_monuments": "Ocean Monuments",
"display.terraforged.structures.ocean_monuments.distance": "Distance",
"display.terraforged.structures.ocean_monuments.separation": "Separation",
"display.terraforged.structures.ocean_ruins": "Ocean Ruins",
"display.terraforged.structures.ocean_ruins.distance": "Distance",
"display.terraforged.structures.ocean_ruins.separation": "Separation",
"display.terraforged.structures.other_structures": "Other Structures",
"display.terraforged.structures.other_structures.distance": "Distance",
"display.terraforged.structures.other_structures.separation": "Separation",
"display.terraforged.structures.shipwrecks": "Shipwrecks",
"display.terraforged.structures.shipwrecks.distance": "Distance",
"display.terraforged.structures.shipwrecks.separation": "Separation",
"display.terraforged.structures.strongholds": "Strongholds",
"display.terraforged.structures.strongholds.distance": "Distance",
"display.terraforged.structures.strongholds.separation": "Separation",
"display.terraforged.structures.title": "Structure Settings",
"display.terraforged.structures.villages": "Villages",
"display.terraforged.structures.villages.distance": "Distance",
"display.terraforged.structures.villages.separation": "Separation",
"display.terraforged.terrain": "Terrain",
"display.terraforged.terrain.badlands": "Badlands",
"display.terraforged.terrain.badlands.base_scale": "Base Scale",
"display.terraforged.terrain.badlands.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.badlands.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.badlands.weight": "Weight",
"display.terraforged.terrain.dales": "Dales",
"display.terraforged.terrain.dales.base_scale": "Base Scale",
"display.terraforged.terrain.dales.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.dales.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.dales.weight": "Weight",
"display.terraforged.terrain.general": "General",
"display.terraforged.terrain.general.global_horizontal_scale": "Global Horizontal Scale",
"display.terraforged.terrain.general.global_vertical_scale": "Global Vertical Scale",
"display.terraforged.terrain.general.terrain_region_size": "Terrain Region Size",
"display.terraforged.terrain.hills": "Hills",
"display.terraforged.terrain.hills.base_scale": "Base Scale",
"display.terraforged.terrain.hills.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.hills.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.hills.weight": "Weight",
"display.terraforged.terrain.mountains": "Mountains",
"display.terraforged.terrain.mountains.base_scale": "Base Scale",
"display.terraforged.terrain.mountains.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.mountains.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.mountains.weight": "Weight",
"display.terraforged.terrain.plains": "Plains",
"display.terraforged.terrain.plains.base_scale": "Base Scale",
"display.terraforged.terrain.plains.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.plains.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.plains.weight": "Weight",
"display.terraforged.terrain.plateau": "Plateau",
"display.terraforged.terrain.plateau.base_scale": "Base Scale",
"display.terraforged.terrain.plateau.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.plateau.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.plateau.weight": "Weight",
"display.terraforged.terrain.steppe": "Steppe",
"display.terraforged.terrain.steppe.base_scale": "Base Scale",
"display.terraforged.terrain.steppe.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.steppe.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.steppe.weight": "Weight",
"display.terraforged.terrain.title": "Terrain Settings",
"display.terraforged.terrain.torridonian": "Torridonian",
"display.terraforged.terrain.torridonian.base_scale": "Base Scale",
"display.terraforged.terrain.torridonian.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.torridonian.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.torridonian.weight": "Weight",
"display.terraforged.terrain.volcano": "Volcano",
"display.terraforged.terrain.volcano.base_scale": "Base Scale",
"display.terraforged.terrain.volcano.horizontal_scale": "Horizontal Scale",
"display.terraforged.terrain.volcano.vertical_scale": "Vertical Scale",
"display.terraforged.terrain.volcano.weight": "Weight",
"display.terraforged.world": "World",
"display.terraforged.world.continent": "Continent",
"display.terraforged.world.continent.continent_mode": "Continent Mode",
"display.terraforged.world.continent.continent_scale": "Continent Scale",
"display.terraforged.world.continent.continent_shape": "Continent Shape",
"display.terraforged.world.continent.ocean_scale": "Ocean Scale",
"display.terraforged.world.properties": "Properties",
"display.terraforged.world.properties.sea_level": "Sea Level",
"display.terraforged.world.properties.spawn_type": "Spawn Type",
"display.terraforged.world.properties.world_height": "World Height",
"display.terraforged.world.title": "World Settings",
"display.terraforged.world.transition_points": "Transition Points",
"display.terraforged.world.transition_points.beach": "Beach",
"display.terraforged.world.transition_points.coast": "Coast",
"display.terraforged.world.transition_points.deep_ocean": "Deep Ocean",
"display.terraforged.world.transition_points.inland": "Inland",
"display.terraforged.world.transition_points.shallow_ocean": "Shallow Ocean",
"generator.terraforged": "TerraForged",
"generator.terratest": "TerraTest",
"tooltip.terraforged.climate.biome_edge_shape.gain": "Controls the gain subsequent noise octaves",
"tooltip.terraforged.climate.biome_edge_shape.lacunarity": "Controls the lacunarity of subsequent noise octaves",
"tooltip.terraforged.climate.biome_edge_shape.octaves": "Controls the number of noise octaves",
"tooltip.terraforged.climate.biome_edge_shape.scale": "Controls the scale of the noise",
"tooltip.terraforged.climate.biome_edge_shape.strength": "Controls the strength of the noise",
"tooltip.terraforged.climate.biome_edge_shape.type": "The noise type",
"tooltip.terraforged.climate.biome_shape.biome_size": "Controls the size of individual biomes",
"tooltip.terraforged.climate.biome_shape.biome_warp_scale": "Controls the scale of shape distortion for biomes",
"tooltip.terraforged.climate.biome_shape.biome_warp_strength": "Controls the strength of shape distortion for biomes",
"tooltip.terraforged.climate.biome_shape.macro_noise_size": "Macro noise is used to group large areas of biomes into a single type (such as deserts)",
"tooltip.terraforged.climate.moisture.bias": "The bias towards either end of the range",
"tooltip.terraforged.climate.moisture.falloff": "How quickly values transition from an extremity",
"tooltip.terraforged.climate.moisture.max": "The upper limit of the range",
"tooltip.terraforged.climate.moisture.min": "The lower limit of the range",
"tooltip.terraforged.climate.moisture.scale": "The horizontal scale",
"tooltip.terraforged.climate.temperature.bias": "The bias towards either end of the range",
"tooltip.terraforged.climate.temperature.falloff": "How quickly values transition from an extremity",
"tooltip.terraforged.climate.temperature.max": "The upper limit of the range",
"tooltip.terraforged.climate.temperature.min": "The lower limit of the range",
"tooltip.terraforged.climate.temperature.scale": "The horizontal scale",
"tooltip.terraforged.dimensions.bedrock_layer.material": "Controls the material that should be used in the world's base layer",
"tooltip.terraforged.dimensions.bedrock_layer.min_depth": "Controls the minimum height of the world's base layer",
"tooltip.terraforged.dimensions.bedrock_layer.variance": "Controls the amount of height randomness of the world's base layer",
"tooltip.terraforged.dimensions.dimensions.end": "Select the end generator",
"tooltip.terraforged.dimensions.dimensions.nether": "Select the nether generator",
"tooltip.terraforged.filters.erosion.deposite_rate": "Controls how quickly material is deposited (during erosion)",
"tooltip.terraforged.filters.erosion.droplet_lifetime": "Controls the number of iterations that a single water droplet is simulated for",
"tooltip.terraforged.filters.erosion.droplet_velocity": "Controls the starting velocity of the simulated water droplet",
"tooltip.terraforged.filters.erosion.droplet_volume": "Controls the starting volume of water that a simulated water droplet carries",
"tooltip.terraforged.filters.erosion.erosion_rate": "Controls how quickly material dissolves (during erosion)",
"tooltip.terraforged.filters.erosion.iterations": "Controls the number of erosion iterations",
"tooltip.terraforged.filters.smoothing.iterations": "Controls the number of smoothing iterations",
"tooltip.terraforged.filters.smoothing.smoothing_radius": "Controls the smoothing radius",
"tooltip.terraforged.filters.smoothing.smoothing_rate": "Controls how strongly smoothing is applied",
"tooltip.terraforged.miscellaneous.custom_biome_features": "Use custom biome features in place of vanilla ones (such as trees)",
"tooltip.terraforged.miscellaneous.erosion_decorator": "Replace surface materials where erosion has occurred",
"tooltip.terraforged.miscellaneous.mountain_biome_usage": "The probability that mountainous terrain will be set to a mountain biome type.\nThis may help improve compatibility with mods that rely exclusively on mountain biomes.",
"tooltip.terraforged.miscellaneous.natural_snow_decorator": "Removes snow from the terrain where it shouldn't naturally settle",
"tooltip.terraforged.miscellaneous.smooth_layer_decorator": "Modifies layer block levels (ie snow) to fit the terrain",
"tooltip.terraforged.miscellaneous.strata_decorator": "Generates strata (rock layers) instead of just stone",
"tooltip.terraforged.miscellaneous.vanilla_water_features": "Controls whether vanilla lakes & springs should generate",
"tooltip.terraforged.rivers.primary_rivers.bank_width": "Controls the river-banks width",
"tooltip.terraforged.rivers.primary_rivers.bed_depth": "Controls the depth of the river",
"tooltip.terraforged.rivers.primary_rivers.bed_width": "Controls the river-bed width",
"tooltip.terraforged.rivers.primary_rivers.fade": "Controls how much rivers taper",
"tooltip.terraforged.rivers.primary_rivers.max_bank_height": "Controls the height of river banks",
"tooltip.terraforged.rivers.primary_rivers.min_bank_height": "Controls the height of river banks",
"tooltip.terraforged.rivers.river_count": "Controls the number of major rivers per continent",
"tooltip.terraforged.rivers.secondary_river.bank_width": "Controls the river-banks width",
"tooltip.terraforged.rivers.secondary_river.bed_depth": "Controls the depth of the river",
"tooltip.terraforged.rivers.secondary_river.bed_width": "Controls the river-bed width",
"tooltip.terraforged.rivers.secondary_river.fade": "Controls how much rivers taper",
"tooltip.terraforged.rivers.secondary_river.max_bank_height": "Controls the height of river banks",
"tooltip.terraforged.rivers.secondary_river.min_bank_height": "Controls the height of river banks",
"tooltip.terraforged.rivers.tertiary_rivers.bank_width": "Controls the river-banks width",
"tooltip.terraforged.rivers.tertiary_rivers.bed_depth": "Controls the depth of the river",
"tooltip.terraforged.rivers.tertiary_rivers.bed_width": "Controls the river-bed width",
"tooltip.terraforged.rivers.tertiary_rivers.fade": "Controls how much rivers taper",
"tooltip.terraforged.rivers.tertiary_rivers.max_bank_height": "Controls the height of river banks",
"tooltip.terraforged.rivers.tertiary_rivers.min_bank_height": "Controls the height of river banks",
"tooltip.terraforged.structures.mansions.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.mansions.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.ocean_monuments.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.ocean_monuments.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.ocean_ruins.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.ocean_ruins.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.other_structures.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.other_structures.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.shipwrecks.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.shipwrecks.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.strongholds.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.strongholds.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.structures.villages.distance": "The distance (in chunks) between placements of this feature",
"tooltip.terraforged.structures.villages.separation": "The separation (in chunks) between placements of this feature",
"tooltip.terraforged.terrain.badlands.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.badlands.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.badlands.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.badlands.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.dales.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.dales.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.dales.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.dales.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.general.global_horizontal_scale": "Globally controls the horizontal scaling of terrain",
"tooltip.terraforged.terrain.general.global_vertical_scale": "Globally controls the vertical scaling of terrain",
"tooltip.terraforged.terrain.general.terrain_region_size": "Controls the size of terrain regions",
"tooltip.terraforged.terrain.hills.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.hills.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.hills.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.hills.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.mountains.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.mountains.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.mountains.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.mountains.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.plains.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.plains.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.plains.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.plains.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.plateau.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.plateau.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.plateau.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.plateau.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.steppe.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.steppe.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.steppe.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.steppe.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.torridonian.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.torridonian.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.torridonian.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.torridonian.weight": "Controls how common this terrain type is",
"tooltip.terraforged.terrain.volcano.base_scale": "Controls the base height of this terrain",
"tooltip.terraforged.terrain.volcano.horizontal_scale": "Stretches or compresses the terrain horizontally",
"tooltip.terraforged.terrain.volcano.vertical_scale": "Stretches or compresses the terrain vertically",
"tooltip.terraforged.terrain.volcano.weight": "Controls how common this terrain type is",
"tooltip.terraforged.world.continent.continent_mode": "Controls the continent generator type",
"tooltip.terraforged.world.continent.continent_scale": "Controls the size of continents",
"tooltip.terraforged.world.continent.continent_shape": "Controls how continent shapes are calculated",
"tooltip.terraforged.world.continent.ocean_scale": "Controls the amount of ocean between continents",
"tooltip.terraforged.world.properties.sea_level": "Controls the sea level",
"tooltip.terraforged.world.properties.spawn_type": "Set whether spawn should be close to x=0,z=0 or the centre of the nearest continent",
"tooltip.terraforged.world.properties.world_height": "Controls the world height",
"tooltip.terraforged.world.transition_points.beach": "The beach transition point",
"tooltip.terraforged.world.transition_points.coast": "The coast transition point",
"tooltip.terraforged.world.transition_points.deep_ocean": "The deep ocean transition point",
"tooltip.terraforged.world.transition_points.inland": "The inland transition point",
"tooltip.terraforged.world.transition_points.shallow_ocean": "The shallow ocean transition point"
}

View File

@ -1,4 +1,4 @@
mod_version=0.1.0-understable-01
mod_version=0.1.0-BETA-2
mc_version=1.15.2
forge_version=31.2.27
mcp_channel=snapshot

View File

@ -35,7 +35,9 @@ public abstract class BiomeVariant extends Biome {
}
// override to register a custom biome weight with Forge's BiomeManager (default is 10)
public void registerWeights() {}
public void registerWeights() {
}
@Override
public int getGrassColor(double x, double z) {

View File

@ -52,19 +52,6 @@ public interface ColumnDecorator {
}
}
default void fillDownSolid(DecoratorContext context, IChunk chunk, int x, int z, int from, int to, BlockState state) {
for (int dy = from; dy > to; dy--) { ;
replaceSolid(chunk, context.pos.setPos(x, dy, z), state);
}
}
static void replaceSolid(IChunk chunk, BlockPos pos, BlockState state) {
if (chunk.getBlockState(pos).isAir(chunk, pos)) {
return;
}
chunk.setBlockState(pos, state, false);
}
static float getNoise(float x, float z, int seed, float scale, float bias) {
return (variance.getValue(x, z, seed) * scale) + bias;
}

View File

@ -26,8 +26,8 @@
package com.terraforged.api.event;
import com.terraforged.api.biome.modifier.ModifierManager;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.chunk.column.DecoratorManager;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.material.geology.GeologyManager;
import com.terraforged.api.material.layer.LayerManager;
import com.terraforged.fm.modifier.FeatureModifiers;

View File

@ -40,7 +40,6 @@ public class WGTags {
public static final Tag<Block> CLAY = tag("wg_clay");
public static final Tag<Block> SEDIMENT = tag("wg_sediment");
public static final Tag<Block> ERODIBLE = tag("wg_erodible");
public static final Tag<Block> COLD = tag("wg_cold");
public static void init() {

View File

@ -32,8 +32,7 @@ public class StrataConfig {
public Config soil = new Config(0, 1, 0.1F, 0.25F);
public Config sediment = new Config(0, 2, 0.05F, 0.15F);
public Config clay = new Config(0, 2, 0.05F, 0.1F);
public Config rock = new Config(2, 4, 0.05F, 0.1F);
public Config cold = new Config(10, 30, 0.1F, 1.5F);
public Config rock = new Config(10, 30, 0.1F, 1.5F);
public static class Config {

View File

@ -53,6 +53,7 @@ public class FrozenLake extends BiomeVariant {
DefaultBiomeFeatures.addReedsAndPumpkins(this);
DefaultBiomeFeatures.addSprings(this);
DefaultBiomeFeatures.addFreezeTopLayer(this);
this.addSpawn(EntityClassification.WATER_CREATURE, new Biome.SpawnListEntry(EntityType.SQUID, 2, 1, 4));
this.addSpawn(EntityClassification.WATER_CREATURE, new Biome.SpawnListEntry(EntityType.SALMON, 5, 1, 5));
this.addSpawn(EntityClassification.AMBIENT, new Biome.SpawnListEntry(EntityType.BAT, 10, 8, 8));
this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.SPIDER, 100, 4, 4));

View File

@ -58,6 +58,7 @@ public class Lake extends BiomeVariant {
DefaultBiomeFeatures.addSprings(this);
this.addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Feature.SEAGRASS.withConfiguration(new SeaGrassConfig(48, 0.4D)).withPlacement(Placement.TOP_SOLID_HEIGHTMAP.configure(IPlacementConfig.NO_PLACEMENT_CONFIG)));
DefaultBiomeFeatures.addFreezeTopLayer(this);
this.addSpawn(EntityClassification.WATER_CREATURE, new Biome.SpawnListEntry(EntityType.SQUID, 2, 1, 4));
this.addSpawn(EntityClassification.WATER_CREATURE, new Biome.SpawnListEntry(EntityType.SALMON, 5, 1, 5));
this.addSpawn(EntityClassification.AMBIENT, new Biome.SpawnListEntry(EntityType.BAT, 10, 8, 8));
this.addSpawn(EntityClassification.MONSTER, new Biome.SpawnListEntry(EntityType.SPIDER, 100, 4, 4));

View File

@ -39,7 +39,7 @@ public class ModBiomes {
private static final ArrayList<BiomeVariant> biomes = new ArrayList<>();
/*public static final Biome BRYCE = register(new Bryce());
public static final Biome BRYCE = register(new Bryce());
public static final Biome COLD_STEPPE = register(new ColdSteppe());
public static final Biome ERODED_PINNACLE = register(new StoneForest());
public static final Biome FIR_FOREST = register(new FirForest());
@ -53,7 +53,7 @@ public class ModBiomes {
public static final Biome SNOWY_TAIGA_SCRUB = register(new SnowyTaigaScrub());
public static final Biome STEPPE = register(new Steppe());
public static final Biome TAIGA_SCRUB = register(new TaigaScrub());
public static final Biome WARM_BEACH = register(new WarmBeach());*/
public static final Biome WARM_BEACH = register(new WarmBeach());
private static Biome register(BiomeVariant biome) {
biomes.add(biome);

View File

@ -38,7 +38,7 @@ public interface BiomeMap {
Biome getBeach(Cell cell);
Biome getCoast(Cell cell);
Biome getCoast(Cell cell, Biome current);
Biome getRiver(Cell cell);

View File

@ -2,12 +2,12 @@ package com.terraforged.mod.biome.map;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.defaults.DefaultBiomes;
import com.terraforged.mod.biome.map.set.BiomeSet;
import com.terraforged.mod.biome.map.set.BiomeTypeSet;
import com.terraforged.mod.biome.map.set.RiverSet;
import com.terraforged.mod.biome.map.set.TemperatureSet;
import com.terraforged.core.cell.Cell;
import com.terraforged.n2d.util.NoiseUtil;
import com.terraforged.world.biome.BiomeType;
import com.terraforged.world.heightmap.Levels;
@ -54,7 +54,6 @@ public class SimpleBiomeMap implements BiomeMap {
}
}
@Override
public Biome provideBiome(Cell cell, Levels levels) {
TerrainType type = cell.terrain.getType();
if (type.isSubmerged() && cell.value > levels.water) {
@ -79,27 +78,15 @@ public class SimpleBiomeMap implements BiomeMap {
}
@Override
public Biome getCoast(Cell cell) {
// treat land & coast biome-sets as one combined set
Biome[] inland = land.getSet(cell);
public Biome getCoast(Cell cell, Biome current) {
int inland = land.getSize(cell);
Biome[] coastal = coast.getSet(cell);
// calculate where in the combined set the cell.biome points
int maxIndex = inland.length + coastal.length - 1;
int index = NoiseUtil.round(maxIndex * cell.biome);
// if index lies within the coast section of the set
if (index >= inland.length) {
// relativize the index to start at 0
index -= inland.length;
// shouldn't be required but check that index is within bounds
if (index < coastal.length) {
return coastal[index];
int total = inland + coastal.length;
int index = NoiseUtil.round((total - 1) * cell.biome);
if (index >= inland) {
return coastal[index - inland];
}
}
return DefaultBiomes.NONE;
return current;
}
@Override

View File

@ -1,9 +1,12 @@
package com.terraforged.mod.biome.map.defaults;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.OceanBiome;
public interface DefaultBiome {
Biome NONE = new OceanBiome().setRegistryName("terraforged", "none");
Biome getBiome(float temperature);
default Biome getDefaultBiome(float temperature) {

View File

@ -6,12 +6,13 @@ import net.minecraft.world.biome.Biomes;
public class DefaultBiomes {
public static final Biome NONE = Biomes.THE_VOID;
public static Biome defaultBeach(float temperature) {
if (temperature < 0.25) {
return Biomes.SNOWY_BEACH;
}
if (temperature > 0.75) {
return ModBiomes.WARM_BEACH;
}
return Biomes.BEACH;
}
@ -23,11 +24,17 @@ public class DefaultBiomes {
}
public static Biome defaultLake(float temperature) {
return Biomes.OCEAN;
if (temperature < 0.15) {
return ModBiomes.FROZEN_LAKE;
}
return ModBiomes.LAKE;
}
public static Biome defaultWetland(float temperature) {
return Biomes.SWAMP;
if (temperature < 0.15) {
return ModBiomes.TAIGA_SCRUB;
}
return ModBiomes.MARSHLAND;
}
public static Biome defaultOcean(float temperature) {
@ -54,10 +61,19 @@ public class DefaultBiomes {
if (temperature < 0.25) {
return Biomes.SNOWY_MOUNTAINS;
}
return DefaultBiomes.NONE;
if (temperature > 0.75) {
return DefaultBiome.NONE;
}
return Biomes.MOUNTAINS;
}
public static Biome defaultBiome(float temperature) {
if (temperature < 0.3) {
return ModBiomes.TAIGA_SCRUB;
}
if (temperature > 0.7) {
return ModBiomes.SAVANNA_SCRUB;
}
return Biomes.PLAINS;
}

View File

@ -1,11 +1,11 @@
package com.terraforged.mod.biome.map.set;
import com.google.gson.JsonElement;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.defaults.DefaultBiome;
import com.terraforged.mod.biome.provider.BiomeHelper;
import com.terraforged.mod.util.ListUtils;
import com.terraforged.core.cell.Cell;
import com.terraforged.n2d.util.NoiseUtil;
import com.terraforged.mod.util.ListUtils;
import net.minecraft.world.biome.Biome;
import java.util.Collections;
@ -47,16 +47,7 @@ public abstract class BiomeSet {
if (set.length == 0) {
return defaultBiome.getDefaultBiome(cell.temperature);
}
int maxIndex = set.length - 1;
int index = NoiseUtil.round(maxIndex * cell.biome);
// shouldn't happen but safety check the bounds
if (index < 0 || index >= set.length) {
return defaultBiome.getDefaultBiome(cell.temperature);
}
return set[index];
return set[NoiseUtil.round((set.length - 1) * cell.biome)];
}
public abstract int getIndex(Cell cell);

View File

@ -3,8 +3,8 @@ package com.terraforged.mod.biome.map.set;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.defaults.DefaultBiome;
import com.terraforged.core.cell.Cell;
import com.terraforged.world.biome.BiomeType;
import net.minecraft.world.biome.Biome;

View File

@ -1,9 +1,9 @@
package com.terraforged.mod.biome.map.set;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.map.defaults.DefaultBiome;
import com.terraforged.mod.biome.map.defaults.DefaultBiomes;
import com.terraforged.core.cell.Cell;
import net.minecraft.world.biome.Biome;
import java.util.List;

View File

@ -3,9 +3,9 @@ package com.terraforged.mod.biome.map.set;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.defaults.BiomeTemps;
import com.terraforged.mod.biome.map.defaults.DefaultBiome;
import com.terraforged.core.cell.Cell;
import net.minecraft.world.biome.Biome;
import java.util.List;

View File

@ -1,8 +1,8 @@
package com.terraforged.mod.biome.modifier;
import com.terraforged.api.biome.modifier.BiomeModifier;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.core.cell.Cell;
import com.terraforged.n2d.Module;
import com.terraforged.n2d.Source;
import com.terraforged.world.GeneratorContext;
@ -20,7 +20,7 @@ public class BeachModifier implements BiomeModifier {
public BeachModifier(BiomeMap biomeMap, GeneratorContext context) {
this.biomes = biomeMap;
this.height = context.levels.water(6);
this.noise = Source.perlin(context.seed.next(), 15, 1).scale(context.levels.scale(5));
this.noise = Source.perlin(context.seed.next(), 10, 1).scale(context.levels.scale(5));
}
@Override

View File

@ -27,12 +27,12 @@ package com.terraforged.mod.biome.modifier;
import com.terraforged.api.biome.modifier.BiomeModifier;
import com.terraforged.api.biome.modifier.ModifierManager;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.provider.DesertBiomes;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import com.terraforged.world.biome.BiomeType;
import com.terraforged.world.heightmap.Levels;
import com.terraforged.world.terrain.ITerrain;
import net.minecraft.world.biome.Biome;
import java.util.ArrayList;
@ -55,8 +55,8 @@ public class BiomeModifierManager implements BiomeModifier, ModifierManager {
this.biomeModifiers = modifiers;
}
public boolean hasModifiers(Cell cell, Levels levels) {
return cell.terrain.isOverground() || (cell.terrain.isSubmerged() && cell.value > levels.water);
public boolean hasModifiers(ITerrain type) {
return type.isOverground();
}
public DesertBiomes getDesertBiomes() {

View File

@ -26,10 +26,9 @@
package com.terraforged.mod.biome.modifier;
import com.terraforged.api.biome.modifier.BiomeModifier;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.map.defaults.DefaultBiomes;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import com.terraforged.world.terrain.Terrains;
import net.minecraft.world.biome.Biome;
@ -58,10 +57,7 @@ public class CoastModifier implements BiomeModifier {
@Override
public Biome modify(Biome in, Cell cell, int x, int z) {
if (cell.terrain.isCoast()) {
Biome coast = biomeMap.getCoast(cell);
if (coast != DefaultBiomes.NONE) {
return coast;
}
return biomeMap.getCoast(cell, in);
}
return in;
}

View File

@ -26,8 +26,8 @@
package com.terraforged.mod.biome.modifier;
import com.terraforged.api.biome.modifier.BiomeModifier;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.provider.DesertBiomes;
import com.terraforged.core.cell.Cell;
import net.minecraft.world.biome.Biome;
public class DesertColorModifier implements BiomeModifier {

View File

@ -1,10 +1,10 @@
package com.terraforged.mod.biome.modifier;
import com.terraforged.api.biome.modifier.BiomeModifier;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.map.defaults.DefaultBiomes;
import com.terraforged.mod.biome.map.defaults.DefaultBiome;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import net.minecraft.world.biome.Biome;
public class MountainModifier implements BiomeModifier {
@ -38,7 +38,7 @@ public class MountainModifier implements BiomeModifier {
@Override
public Biome modify(Biome in, Cell cell, int x, int z) {
Biome mountain = biomes.getMountain(cell);
if (mountain != DefaultBiomes.NONE) {
if (mountain != DefaultBiome.NONE) {
return mountain;
}
return in;

View File

@ -107,6 +107,8 @@ public class BiomeHelper {
builder.addLand(BiomeType.TEMPERATE_RAINFOREST, Biomes.PLAINS, 5);
builder.addLand(BiomeType.TEMPERATE_FOREST, Biomes.FLOWER_FOREST, 2);
builder.addLand(BiomeType.TEMPERATE_FOREST, Biomes.PLAINS, 5);
builder.addLand(BiomeType.TUNDRA, ModBiomes.SNOWY_TAIGA_SCRUB, 2);
builder.addLand(BiomeType.TAIGA, ModBiomes.TAIGA_SCRUB, 2);
return builder.build();
}

View File

@ -9,11 +9,9 @@ import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
public class BiomeWeights {
@ -60,21 +58,6 @@ public class BiomeWeights {
return standardWeight;
}
public void forEachEntry(BiConsumer<ResourceLocation, Integer> consumer) {
biomes.entrySet().stream()
.sorted(Comparator.comparing(e -> e.getKey().toString()))
.forEach(e -> consumer.accept(e.getKey(), e.getValue()));
}
public void forEachUnregistered(BiConsumer<ResourceLocation, Integer> consumer) {
for (Biome biome : ForgeRegistries.BIOMES) {
if (!biomes.containsKey(biome.getRegistryName())) {
int weight = getWeight(biome);
consumer.accept(biome.getRegistryName(), weight);
}
}
}
private void readWeights() {
CommentedConfig config = ConfigManager.BIOME_WEIGHTS.get();
@ -86,12 +69,11 @@ public class BiomeWeights {
ResourceLocation name = new ResourceLocation(key);
if (!ForgeRegistries.BIOMES.containsKey(name)) {
Log.err("Invalid biome defined: {}", name);
continue;
}
biomes.put(name, weight);
Log.debug("Loaded custom biome weight: {}={}", name, weight);
Log.debug("Loaded custom biome weight: %s=%s", name, weight);
}
}
}

View File

@ -26,11 +26,11 @@
package com.terraforged.mod.biome.provider;
import com.google.common.collect.Sets;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.concurrent.Resource;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.modifier.BiomeModifierManager;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.concurrent.Resource;
import com.terraforged.mod.util.setup.SetupHooks;
import com.terraforged.world.heightmap.WorldLookup;
import com.terraforged.world.terrain.decorator.Decorator;
@ -69,12 +69,6 @@ public class TerraBiomeProvider extends BiomeProvider {
return getWorldLookup().getCell(x, z);
}
public Biome getBiome(int x, int z) {
try (Resource<Cell> resource = getWorldLookup().getCell(x, z, true)) {
return getBiome(resource.get(), x, z);
}
}
@Override
public Biome getNoiseBiome(int x, int y, int z) {
x = (x << 2);
@ -158,7 +152,7 @@ public class TerraBiomeProvider extends BiomeProvider {
public Biome getBiome(Cell cell, int x, int z) {
Biome biome = biomeMap.provideBiome(cell, context.levels);
if (modifierManager.hasModifiers(cell, context.levels)) {
if (modifierManager.hasModifiers(cell.terrain)) {
return modifierManager.modify(biome, cell, x, z);
}
return biome;

View File

@ -1,9 +1,9 @@
package com.terraforged.mod.biome.spawn;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.Log;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.server.command.search.Search;
import com.terraforged.core.cell.Cell;
import net.minecraft.util.math.BlockPos;
public class SpawnSearch extends Search {

View File

@ -29,10 +29,10 @@ import com.terraforged.api.biome.surface.MaskedSurface;
import com.terraforged.api.biome.surface.Surface;
import com.terraforged.api.biome.surface.SurfaceContext;
import com.terraforged.api.material.layer.LayerMaterial;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.provider.DesertBiomes;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import com.terraforged.n2d.Module;
import com.terraforged.n2d.Source;
import com.terraforged.n2d.func.CellFunc;

View File

@ -28,8 +28,8 @@ package com.terraforged.mod.biome.surface;
import com.terraforged.api.biome.surface.MaskedSurface;
import com.terraforged.api.biome.surface.SurfaceContext;
import com.terraforged.api.material.state.States;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import com.terraforged.n2d.Module;
import com.terraforged.n2d.Source;
import com.terraforged.n2d.util.NoiseUtil;

View File

@ -25,8 +25,8 @@
package com.terraforged.mod.biome.tag;
import com.terraforged.api.biome.BiomeTags;
import com.terraforged.mod.Log;
import com.terraforged.api.biome.BiomeTags;
import net.minecraft.profiler.IProfiler;
import net.minecraft.resources.IFutureReloadListener;
import net.minecraft.resources.IResourceManager;

View File

@ -25,17 +25,9 @@
package com.terraforged.mod.chunk;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.material.layer.LayerManager;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.tile.Size;
import com.terraforged.core.tile.Tile;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.core.tile.gen.TileCache;
import com.terraforged.fm.FeatureManager;
import com.terraforged.fm.data.DataManager;
import com.terraforged.fm.structure.StructureManager;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.chunk.generator.BiomeGenerator;
import com.terraforged.mod.chunk.generator.FeatureGenerator;
@ -45,7 +37,15 @@ import com.terraforged.mod.chunk.generator.StructureGenerator;
import com.terraforged.mod.chunk.generator.SurfaceGenerator;
import com.terraforged.mod.chunk.generator.TerrainCarver;
import com.terraforged.mod.chunk.generator.TerrainGenerator;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.tile.Size;
import com.terraforged.core.tile.Tile;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.core.tile.gen.TileCache;
import com.terraforged.mod.feature.BlockDataManager;
import com.terraforged.fm.FeatureManager;
import com.terraforged.fm.data.DataManager;
import com.terraforged.fm.structure.StructureManager;
import com.terraforged.mod.material.Materials;
import com.terraforged.mod.material.geology.GeoManager;
import com.terraforged.mod.util.setup.SetupHooks;

View File

@ -26,14 +26,14 @@
package com.terraforged.mod.chunk;
import com.electronwill.nightconfig.core.CommentedConfig;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.api.biome.surface.ChunkSurfaceBuffer;
import com.terraforged.api.biome.surface.SurfaceContext;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.mod.config.PerfDefaults;
import com.terraforged.core.concurrent.thread.ThreadPools;
import com.terraforged.core.tile.gen.TileCache;
import com.terraforged.core.tile.gen.TileGenerator;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.mod.config.PerfDefaults;
import com.terraforged.mod.material.Materials;
import com.terraforged.world.GeneratorContext;
import com.terraforged.world.WorldGeneratorFactory;

View File

@ -1,26 +1,14 @@
package com.terraforged.mod.chunk;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.fm.FeatureManager;
import com.terraforged.fm.data.DataManager;
import com.terraforged.fm.matcher.biome.BiomeMatcher;
import com.terraforged.fm.matcher.feature.FeatureMatcher;
import com.terraforged.fm.modifier.FeatureModifiers;
import com.terraforged.fm.predicate.DeepWater;
import com.terraforged.fm.predicate.FeaturePredicate;
import com.terraforged.fm.predicate.MaxHeight;
import com.terraforged.fm.predicate.MinDepth;
import com.terraforged.fm.predicate.MinHeight;
import com.terraforged.fm.structure.StructureManager;
import com.terraforged.fm.transformer.FeatureTransformer;
import com.terraforged.mod.Log;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.mod.biome.ModBiomes;
import com.terraforged.mod.biome.surface.BriceSurface;
import com.terraforged.mod.biome.surface.DesertSurface;
import com.terraforged.mod.biome.surface.StoneForestSurface;
import com.terraforged.mod.biome.surface.ForestSurface;
import com.terraforged.mod.biome.surface.IcebergsSurface;
import com.terraforged.mod.biome.surface.StoneForestSurface;
import com.terraforged.mod.biome.surface.SwampSurface;
import com.terraforged.mod.chunk.column.BedrockDecorator;
import com.terraforged.mod.chunk.column.ErosionDecorator;
@ -30,6 +18,16 @@ import com.terraforged.mod.chunk.column.post.SnowEroder;
import com.terraforged.mod.feature.BlockDataManager;
import com.terraforged.mod.feature.Matchers;
import com.terraforged.mod.feature.feature.FreezeLayer;
import com.terraforged.fm.FeatureManager;
import com.terraforged.fm.data.DataManager;
import com.terraforged.fm.matcher.biome.BiomeMatcher;
import com.terraforged.fm.matcher.feature.FeatureMatcher;
import com.terraforged.fm.modifier.FeatureModifiers;
import com.terraforged.fm.predicate.DeepWater;
import com.terraforged.fm.predicate.FeaturePredicate;
import com.terraforged.fm.predicate.MinHeight;
import com.terraforged.fm.structure.StructureManager;
import com.terraforged.fm.transformer.FeatureTransformer;
import com.terraforged.mod.material.geology.GeoManager;
import com.terraforged.mod.util.setup.SetupHooks;
import net.minecraft.world.biome.Biome;
@ -81,10 +79,15 @@ public class TerraSetupFactory {
public static FeatureManager createFeatureManager(DataManager data, TerraContext context) {
FeatureModifiers modifiers = FeatureManager.modifiers(data, context.terraSettings.miscellaneous.customBiomeFeatures);
if (context.terraSettings.miscellaneous.strataDecorator) {
// block stone blobs if strata enabled
modifiers.getPredicates().add(Matchers.stoneBlobs(), FeaturePredicate.DENY);
}
if (!context.terraSettings.miscellaneous.vanillaWaterFeatures) {
// block lakes and springs if not enabled
modifiers.getPredicates().add(FeatureMatcher.of(Feature.LAKE), FeaturePredicate.DENY);
//modifiers.getPredicates().add(FeatureMatcher.of(Feature.SPRING_FEATURE), FeaturePredicate.DENY);
modifiers.getPredicates().add(FeatureMatcher.of(Feature.SPRING_FEATURE), FeaturePredicate.DENY);
}
if (context.terraSettings.miscellaneous.customBiomeFeatures) {
@ -102,7 +105,6 @@ public class TerraSetupFactory {
// block ugly features
modifiers.getPredicates().add(Matchers.sedimentDisks(), FeaturePredicate.DENY);
modifiers.getPredicates().add(FeatureMatcher.of(Feature.MINESHAFT), new MinHeight(context.levels.waterY + 20));
modifiers.getPredicates().add(FeatureMatcher.of(Feature.WOODLAND_MANSION), new MaxHeight(context.levels.waterY + 64));
return FeatureManager.create(SetupHooks.setup(modifiers, context.copy()));
}
@ -111,12 +113,19 @@ public class TerraSetupFactory {
SurfaceManager manager = new SurfaceManager();
manager.replace(Biomes.DEEP_FROZEN_OCEAN, new IcebergsSurface(context, 30, 30));
manager.replace(Biomes.FROZEN_OCEAN, new IcebergsSurface(context, 20, 15));
manager.append(ModBiomes.BRYCE, new BriceSurface(context.seed));
manager.append(ModBiomes.ERODED_PINNACLE, new StoneForestSurface(context.seed));
manager.append(
new DesertSurface(context),
Biomes.DESERT,
Biomes.DESERT_HILLS,
Biomes.DESERT_LAKES
);
manager.replace(
new SwampSurface(),
Biomes.SWAMP.delegate.get(),
ModBiomes.MARSHLAND
);
manager.append(
new ForestSurface(context),
Biomes.FOREST,
@ -131,7 +140,6 @@ public class TerraSetupFactory {
StructureManager manager = new StructureManager();
manager.register(Structure.OCEAN_MONUMENT, DeepWater.INSTANCE);
manager.register(Structure.OCEAN_RUIN, DeepWater.INSTANCE);
manager.register(Structure.SHIPWRECK, new MinDepth(context.levels.waterLevel - 8));
return SetupHooks.setup(manager, context);
}

View File

@ -28,8 +28,8 @@ package com.terraforged.mod.chunk.column;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.api.material.state.States;
import com.terraforged.core.util.VariablePredicate;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.util.VariablePredicate;
import com.terraforged.world.terrain.Terrains;
import net.minecraft.block.BlockState;
import net.minecraft.world.chunk.IChunk;

View File

@ -96,7 +96,7 @@ public class ErosionDecorator implements ColumnDecorator {
erodeRock(context, chunk, x, y, z);
return;
} else {
fillDownSolid(context, chunk, x, z, y, y - 4, material);
fillDown(context, chunk, x, z, y, y - 4, material);
}
}
placeScree(chunk, context, x, y, z);
@ -105,7 +105,7 @@ public class ErosionDecorator implements ColumnDecorator {
protected void erodeRock(DecoratorContext context, IChunk chunk, int dx, int y, int dz) {
int depth = 32;
BlockState material = States.GRAVEL.get();
BlockState material = Blocks.GRAVEL.getDefaultState();
// find the uppermost layer of rock & record it's depth
for (int dy = 3; dy < 32; dy++) {
context.pos.setPos(dx, y - dy, dz);
@ -119,7 +119,8 @@ public class ErosionDecorator implements ColumnDecorator {
// fill downwards to the first rock layer
for (int dy = 0; dy < depth; dy++) {
ColumnDecorator.replaceSolid(chunk, context.pos.setPos(dx, y - dy, dz), material);
context.pos.setPos(dx, y - dy, dz);
chunk.setBlockState(context.pos, material, false);
}
}
@ -132,7 +133,7 @@ public class ErosionDecorator implements ColumnDecorator {
float sediment = context.cell.sediment * SEDIMENT_MODIFIER;
float noise = context.climate.getRand().getValue(x, z, seed3) * SEDIMENT_NOISE;
if (sediment + noise > SCREE_VALUE) {
fillDownSolid(context, chunk, x, z, y, y - 2, States.GRAVEL.get());
fillDown(context, chunk, x, z, y, y - 2, States.GRAVEL.get());
}
}

View File

@ -25,9 +25,9 @@
package com.terraforged.mod.chunk.column;
import com.terraforged.api.biome.surface.ChunkSurfaceBuffer;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.api.biome.surface.ChunkSurfaceBuffer;
import com.terraforged.mod.material.geology.GeoManager;
import net.minecraft.world.chunk.IChunk;
@ -48,7 +48,8 @@ public class GeologyDecorator implements ColumnDecorator {
public void decorate(ChunkSurfaceBuffer buffer, DecoratorContext context, int x, int y, int z) {
int top = buffer.getSurfaceBottom();
geology.getGeology(context.biome).getStrata(x, z).downwards(x, top, z, context.depthBuffer.get(), (py, state) -> {
ColumnDecorator.replaceSolid(buffer.getDelegate(), context.pos.setPos(x, py, z), state);
context.pos.setPos(x, py, z);
buffer.getDelegate().setBlockState(context.pos, state, false);
return true;
});
}

View File

@ -1,9 +1,9 @@
package com.terraforged.mod.chunk.generator;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.util.TerraContainer;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.world.terrain.decorator.Decorator;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.biome.Biome;

View File

@ -2,10 +2,10 @@ package com.terraforged.mod.chunk.generator;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.fix.RegionFix;
import com.terraforged.mod.chunk.util.TerraContainer;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.util.Environment;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld;

View File

@ -1,7 +1,7 @@
package com.terraforged.mod.chunk.generator;
import com.terraforged.fm.predicate.FeaturePredicate;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.fm.predicate.FeaturePredicate;
import net.minecraft.network.DebugPacketSender;
import net.minecraft.util.SharedSeedRandom;
import net.minecraft.util.math.BlockPos;

View File

@ -1,12 +1,12 @@
package com.terraforged.mod.chunk.generator;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.biome.surface.ChunkSurfaceBuffer;
import com.terraforged.api.biome.surface.SurfaceContext;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.util.FastChunk;
import com.terraforged.mod.chunk.util.TerraContainer;
import com.terraforged.core.tile.chunk.ChunkReader;
import net.minecraft.util.SharedSeedRandom;
import net.minecraft.world.chunk.IChunk;
import net.minecraft.world.gen.Heightmap;

View File

@ -1,8 +1,8 @@
package com.terraforged.mod.chunk.generator;
import com.terraforged.fm.template.StructureUtils;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.fix.ChunkCarverFix;
import com.terraforged.fm.template.StructureUtils;
import net.minecraft.util.SharedSeedRandom;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.biome.Biome;

View File

@ -1,11 +1,11 @@
package com.terraforged.mod.chunk.generator;
import com.terraforged.api.chunk.column.DecoratorContext;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.column.BaseDecorator;
import com.terraforged.mod.chunk.util.FastChunk;
import com.terraforged.mod.chunk.util.TerraContainer;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.feature.TerrainHelper;
import com.terraforged.world.climate.Climate;
import com.terraforged.world.heightmap.Levels;
@ -26,7 +26,7 @@ public class TerrainGenerator implements Generator.Terrain {
this.levels = generator.getContext().levels;
this.terrain = generator.getContext().terrain;
this.climate = generator.getContext().factory.getClimate();
this.terrainHelper = new TerrainHelper(0.75F, 4F);
this.terrainHelper = new TerrainHelper(0.75F);
}
@Override

View File

@ -1,9 +1,9 @@
package com.terraforged.mod.chunk.settings;
import com.terraforged.mod.TerraWorld;
import com.terraforged.core.serialization.annotation.Comment;
import com.terraforged.core.serialization.annotation.Range;
import com.terraforged.core.serialization.annotation.Serializable;
import com.terraforged.mod.TerraWorld;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.StringNBT;
import net.minecraft.world.WorldType;

View File

@ -25,10 +25,10 @@
package com.terraforged.mod.chunk.settings;
import com.terraforged.mod.biome.modifier.MountainModifier;
import com.terraforged.core.serialization.annotation.Comment;
import com.terraforged.core.serialization.annotation.Range;
import com.terraforged.core.serialization.annotation.Serializable;
import com.terraforged.mod.biome.modifier.MountainModifier;
@Serializable
public class Miscellaneous {

View File

@ -31,28 +31,6 @@ public class SettingsHelper {
}
}
public static TerraSettings loadSettings(File file) {
TerraSettings settings = new TerraSettings();
try (Reader reader = new BufferedReader(new FileReader(file))) {
JsonElement data = new JsonParser().parse(reader);
CompoundNBT nbt = NBTHelper.fromJson(data);
if (NBTHelper.deserialize(nbt, settings)) {
return settings;
}
} catch (IOException e) {
e.printStackTrace();
}
try (Writer writer = new BufferedWriter(new FileWriter(file))) {
CompoundNBT tag = NBTHelper.serializeCompact(settings);
JsonElement json = NBTHelper.toJson(tag);
GSON.toJson(json, writer);
} catch (IOException e) {
e.printStackTrace();
}
return settings;
}
public static void exportDefaults(TerraSettings settings) {
CompoundNBT tag = NBTHelper.serializeCompact(settings);
JsonElement json = NBTHelper.toJson(tag);
@ -73,10 +51,18 @@ public class SettingsHelper {
}
public static TerraSettings readDefaults() {
TerraSettings settings = new TerraSettings();
if (DEFAULTS_FILE.exists()) {
return loadSettings(DEFAULTS_FILE);
try (Reader reader = new BufferedReader(new FileReader(DEFAULTS_FILE))) {
Log.info("Loading generator settings from json");
JsonElement json = new JsonParser().parse(reader);
CompoundNBT root = NBTHelper.fromJson(json);
NBTHelper.deserialize(root, settings);
} catch (Throwable t) {
t.printStackTrace();
}
return new TerraSettings();
}
return settings;
}
public static TerraSettings getSettings(WorldInfo info) {

View File

@ -53,11 +53,11 @@ public class StructureSettings {
public static class Structure {
@Range(min = 1, max = 200)
@Comment("The maximum distance in chunks between attempts to spawn a structure")
@Comment("The distance (in chunks) between placements of this feature")
public int distance;
@Range(min = 1, max = 50)
@Comment("The minimum distance in chunks between structure spawns")
@Comment("The separation (in chunks) between placements of this feature")
public int separation;
public Structure() {

View File

@ -3,16 +3,20 @@ package com.terraforged.mod.chunk.settings.preset;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.terraforged.mod.Log;
import com.terraforged.mod.chunk.settings.SettingsHelper;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.mod.util.nbt.NBTHelper;
import net.minecraft.nbt.CompoundNBT;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
@ -123,8 +127,15 @@ public class PresetManager implements Iterable<Preset> {
}
String name = file.getName().substring(0, file.getName().length() - 5);
TerraSettings settings = SettingsHelper.loadSettings(file);
try (Reader reader = new BufferedReader(new FileReader(file))) {
JsonElement data = new JsonParser().parse(reader);
CompoundNBT nbt = NBTHelper.fromJson(data);
TerraSettings settings = new TerraSettings();
NBTHelper.deserialize(nbt, settings);
presets.add(new Preset(name, file, settings));
} catch (IOException e) {
e.printStackTrace();
}
}
return new PresetManager(presets);

View File

@ -29,7 +29,6 @@ import com.terraforged.mod.biome.ModBiomes;
import com.terraforged.world.terrain.Terrain;
import com.terraforged.world.terrain.Terrains;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.Biomes;
public class Test {
@ -44,6 +43,6 @@ public class Test {
}
public static Biome getBiome() {
return Biomes.OCEAN;
return ModBiomes.ERODED_PINNACLE;
}
}

View File

@ -25,9 +25,9 @@
package com.terraforged.mod.chunk.test;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.cell.Cell;
import net.minecraft.world.biome.Biome;
public class TestBiomeProvider extends TerraBiomeProvider {

View File

@ -13,6 +13,7 @@ public class TestHeightMap extends Heightmap {
public TestHeightMap(GeneratorContext context) {
super(context);
terrains = context.terrain;
System.out.println("TESTETETEST");
}
@Override

View File

@ -25,9 +25,8 @@ public class GuiKeys {
public static final TranslationKey PRESET_LOAD = TranslationKey.gui("preset.load", "Load");
public static final TranslationKey PRESET_SAVE = TranslationKey.gui("preset.save", "Save");
public static final TranslationKey PRESET_RESET = TranslationKey.gui("preset.reset", "Reset");
public static final TranslationKey PRESET_DEFAULT = TranslationKey.gui("preset.default", "Make Default");
public static final TranslationKey PRESET_DELETE = TranslationKey.gui("preset.delete", "Delete");
public static final TranslationKey PRESET_SET_DEFAULTS = TranslationKey.gui("preset.default.set", "Make Defaults");
public static final TranslationKey PRESET_CLEAR_DEFAULTS = TranslationKey.gui("preset.default.reset", "Reset Defaults");
public static void init() {

View File

@ -112,7 +112,7 @@ public class SettingsScreen extends OverlayScreen {
for (Page page : pages) {
page.save();
}
parent.chunkProviderSettingsJson = NBTHelper.stripMetadata(instance.settingsData);
parent.chunkProviderSettingsJson = NBTHelper.serializeCompact(instance.settings);
SettingsScreen.setSeed(parent, preview.getSeed());
onClose();
}));

View File

@ -1,54 +0,0 @@
package com.terraforged.mod.client.gui.element;
import com.terraforged.n2d.util.NoiseUtil;
import net.minecraft.nbt.CompoundNBT;
import net.minecraftforge.fml.client.gui.widget.Slider;
public class TerraBoundSlider extends TerraSlider.Float {
private final float pad;
private final String lower;
private final String upper;
public TerraBoundSlider(String name, CompoundNBT value) {
this(name, value, 0.005F);
}
public TerraBoundSlider(String name, CompoundNBT value, float pad) {
super(name, value);
CompoundNBT meta = value.getCompound("#" + name);
this.pad = pad;
this.lower = meta.getString("limit_lower");
this.upper = meta.getString("limit_upper");
}
@Override
protected void onChange(Slider slider, CompoundNBT value) {
int i = (int) (slider.getValue() * 1000);
float lower = getLower(value) + pad;
float upper = getUpper(value) - pad;
float val = NoiseUtil.clamp(i / 1000F, lower, upper);
// update setting value
value.putFloat(name, val);
// update actual slider value
setValue(val);
updateSlider();
}
private float getLower(CompoundNBT value) {
if (lower == null || lower.isEmpty()) {
return 0F;
}
return value.getFloat(lower);
}
private float getUpper(CompoundNBT value) {
if (upper == null || upper.isEmpty()) {
return 1F;
}
return value.getFloat(upper);
}
}

View File

@ -36,7 +36,6 @@ public abstract class TerraSlider extends Slider implements Slider.ISlider, Elem
private final CompoundNBT value;
private final List<String> tooltip;
private boolean lock = false;
private Runnable callback = () -> {};
public TerraSlider(String name, CompoundNBT value, boolean decimal) {
@ -59,11 +58,7 @@ public abstract class TerraSlider extends Slider implements Slider.ISlider, Elem
@Override
public void onChangeSliderValue(Slider slider) {
if (!lock) {
lock = true;
onChange(slider, value);
lock = false;
}
}
@Override

View File

@ -34,7 +34,6 @@ import java.util.List;
public class TerraToggle extends TerraButton {
private final boolean noname;
private final String prefix;
private final String name;
private final CompoundNBT value;
@ -51,7 +50,6 @@ public class TerraToggle extends TerraButton {
this.prefix = Element.getDisplayName(name, value) + ": ";
this.tooltip = Element.getToolTip(name, value);
CompoundNBT meta = value.getCompound("#" + name);
this.noname = meta.contains("noname");
this.options = meta.getList("options", Constants.NBT.TAG_STRING);
for (int i = 0; i < options.size(); i++) {
String s = options.getString(i);
@ -60,13 +58,8 @@ public class TerraToggle extends TerraButton {
break;
}
}
if (noname) {
setMessage(value.getString(name));
} else {
setMessage(prefix + value.getString(name));
}
}
public TerraToggle callback(Runnable runnable) {
this.callback = runnable;
@ -99,11 +92,7 @@ public class TerraToggle extends TerraButton {
}
String option = options.getString(index);
value.putString(name, option);
if (noname) {
setMessage(option);
} else {
setMessage(prefix + option);
}
callback.run();
}
}

View File

@ -29,7 +29,6 @@ import com.terraforged.mod.client.gui.OverlayRenderer;
import com.terraforged.mod.client.gui.OverlayScreen;
import com.terraforged.mod.client.gui.ScrollPane;
import com.terraforged.mod.client.gui.element.Element;
import com.terraforged.mod.client.gui.element.TerraBoundSlider;
import com.terraforged.mod.client.gui.element.TerraLabel;
import com.terraforged.mod.client.gui.element.TerraSlider;
import com.terraforged.mod.client.gui.element.TerraTextInput;
@ -169,8 +168,6 @@ public abstract class Page implements IGuiEventListener, OverlayRenderer {
byte type = tag.getId();
if (type == Constants.NBT.TAG_INT) {
return new TerraSlider.Int(name, value).callback(callback);
} else if (type == Constants.NBT.TAG_FLOAT && hasLimit(name, value)) {
return new TerraBoundSlider(name, value).callback(callback);
} else if (type == Constants.NBT.TAG_FLOAT) {
return new TerraSlider.Float(name, value).callback(callback);
} else if (type == Constants.NBT.TAG_STRING && hasOptions(name, value)) {
@ -212,8 +209,4 @@ public abstract class Page implements IGuiEventListener, OverlayRenderer {
private static boolean hasOptions(String name, CompoundNBT value) {
return value.getCompound("#" + name).contains("options");
}
private static boolean hasLimit(String name, CompoundNBT value) {
return value.getCompound("#" + name).contains("limit_lower");
}
}

View File

@ -156,6 +156,25 @@ public class PresetsPage extends BasePage {
}
});
right.scrollPane.addButton(new TerraButton(GuiKeys.PRESET_DEFAULT.get()) {
@Override
public void render(int x, int z, float ticks) {
super.active = hasSelectedPreset();
super.render(x, z, ticks);
}
@Override
public void onClick(double x, double y) {
super.onClick(x, y);
getSelected().ifPresent(preset -> {
TerraSettings settings = preset.getSettings();
SettingsHelper.exportDefaults(settings);
});
}
});
right.scrollPane.addButton(new TerraButton(GuiKeys.PRESET_DELETE.get()) {
@Override
@ -175,30 +194,6 @@ public class PresetsPage extends BasePage {
}
});
right.scrollPane.addButton(new TerraButton(GuiKeys.PRESET_SET_DEFAULTS.get()) {
@Override
public void onClick(double x, double y) {
super.onClick(x, y);
Optional<Preset> selected = getSelected();
if (selected.isPresent()) {
SettingsHelper.exportDefaults(selected.get().getSettings());
} else {
SettingsHelper.exportDefaults(instance.createCopy());
}
}
});
right.scrollPane.addButton(new TerraButton(GuiKeys.PRESET_CLEAR_DEFAULTS.get()) {
@Override
public void onClick(double x, double y) {
super.onClick(x, y);
TerraSettings settings = new TerraSettings();
SettingsHelper.exportDefaults(settings);
}
});
right.scrollPane.addButton(previewWidget);
// used to pad the scroll-pane out so that the preview legend scrolls on larger gui scales

View File

@ -70,7 +70,6 @@ public class WorldPage extends BasePage {
Column left = getColumn(0);
addElements(left.left, left.top, left, worldSettings, true, left.scrollPane::addButton, this::update);
addElements(left.left, left.top, left, dimSettings, true, left.scrollPane::addButton, this::update);
}

View File

@ -36,11 +36,10 @@ import com.terraforged.core.tile.Size;
import com.terraforged.core.tile.Tile;
import com.terraforged.core.tile.gen.TileGenerator;
import com.terraforged.mod.client.gui.GuiKeys;
import com.terraforged.mod.util.nbt.NBTHelper;
import com.terraforged.n2d.util.NoiseUtil;
import com.terraforged.mod.util.nbt.NBTHelper;
import com.terraforged.world.GeneratorContext;
import com.terraforged.world.continent.MutableVeci;
import com.terraforged.world.continent.SpawnType;
import com.terraforged.world.heightmap.Levels;
import com.terraforged.world.terrain.Terrains;
import net.minecraft.client.Minecraft;
@ -205,9 +204,7 @@ public class Preview extends Button {
GeneratorContext context = GeneratorContext.createNoCache(Terrains.create(settings), settings);
MutableVeci center = new MutableVeci();
if (settings.world.properties.spawnType == SpawnType.CONTINENT_CENTER) {
context.factory.getHeightmap().getContinent().getNearestCenter(offsetX, offsetZ, center);
}
TileGenerator renderer = TileGenerator.builder()
.pool(threadPool)
@ -293,12 +290,12 @@ public class Preview extends Button {
String terrain = cell.terrain.getName().toLowerCase();
if (terrain.contains("ocean")) {
if (cell.temperature < 0.3) {
return "cold_" + terrain;
return "cold_ocean";
}
if (cell.temperature > 0.6) {
return "warm_" + terrain;
return "warm_ocean";
}
return terrain;
return "ocean";
}
if (terrain.contains("river")) {
return "river";

View File

@ -74,7 +74,6 @@ public class PreviewPage extends UpdatablePage {
preview.setHeight(Preview.HEIGHT);
addElements(right.left, right.top, right, previewerSettings, right.scrollPane::addButton, this::update);
right.scrollPane.addButton(new TerraButton(GuiKeys.PREVIEW_SEED.get()) {
@Override
public void onPress() {

View File

@ -26,7 +26,6 @@
package com.terraforged.mod.client.gui.preview;
import com.terraforged.core.serialization.annotation.Comment;
import com.terraforged.core.serialization.annotation.NoName;
import com.terraforged.core.serialization.annotation.Range;
import com.terraforged.core.serialization.annotation.Serializable;
@ -37,7 +36,6 @@ public class PreviewSettings {
@Comment("Controls the zoom level of the preview map")
public int zoom = 100 - 32;
@NoName
@Comment("Controls the rendering mode on the preview map")
public RenderMode display = RenderMode.BIOME_TYPE;
}

View File

@ -40,26 +40,6 @@ public enum RenderMode {
return rgba(hsb[0], hsb[1], (hsb[2] * scale) + bias);
}
},
TRANSITION_POINTS {
@Override
public int getColor(Cell cell, float scale, float bias) {
switch (cell.terrain.getType()) {
case DEEP_OCEAN:
return rgba(0.65F, 0.7F, 0.7F);
case SHALLOW_OCEAN:
return rgba(0.6F, 0.6F, 0.8F);
case BEACH:
return rgba(0.2F, 0.4F, 0.75F);
case COAST:
return rgba(0.35F, 0.75F, 0.65F);
default:
if (cell.terrain.isRiver() || cell.terrain.isWetland()) {
return rgba(0.6F, 0.6F, 0.8F);
}
return rgba(0.3F, 0.7F, 0.5F);
}
}
},
TEMPERATURE {
@Override
public int getColor(Cell cell, float scale, float bias) {
@ -76,7 +56,7 @@ public enum RenderMode {
return rgba(step(cell.moisture, 8) * 0.65F, saturation, brightness);
}
},
BIOME {
BIOME_SHAPE {
@Override
public int getColor(Cell cell, float scale, float bias) {
float saturation = 0.7F;
@ -84,7 +64,7 @@ public enum RenderMode {
return rgba(cell.biome, saturation, brightness);
}
},
MACRO_NOISE {
MACRO_NOISE_SHAPE {
@Override
public int getColor(Cell cell, float scale, float bias) {
float saturation = 0.7F;
@ -92,23 +72,21 @@ public enum RenderMode {
return rgba(cell.macroNoise, saturation, brightness);
}
},
TERRAIN_REGION {
REGION_SHAPE {
@Override
public int getColor(Cell cell, float scale, float bias) {
float saturation = 0.7F;
float brightness = 0.8F;
return rgba(cell.terrain.getHue(), saturation, brightness);
return rgba(cell.region, saturation, brightness);
}
},
;
public int getColor(Cell cell, Levels levels) {
float baseHeight = levels.water;
if (this != TRANSITION_POINTS) {
if (cell.value < baseHeight) {
return rgba(40, 140, 200);
}
}
float bands = 10F;
float alpha = 0.2F;
float elevation = (cell.value - baseHeight) / (1F - baseHeight);

View File

@ -1,13 +1,13 @@
package com.terraforged.mod.client.gui.preview2;
import com.mojang.blaze3d.systems.RenderSystem;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.core.concurrent.thread.ThreadPool;
import com.terraforged.core.concurrent.thread.ThreadPools;
import com.terraforged.core.render.RenderAPI;
import com.terraforged.core.render.RenderSettings;
import com.terraforged.core.render.RenderWorld;
import com.terraforged.core.tile.gen.TileGenerator;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.world.GeneratorContext;
import com.terraforged.world.continent.MutableVeci;
import com.terraforged.world.continent.SpawnType;
@ -117,6 +117,6 @@ public class Preview extends Widget {
renderSettings.zoom = previewSettings.getZoom(ZOOM_SCALE);
renderSettings.renderMode = previewSettings.display;
return new RenderWorld(threadPool, generator, renderAPI, renderSettings, regions, size);
return new RenderWorld(generator, renderAPI, renderSettings, regions, size);
}
}

View File

@ -1,7 +1,6 @@
package com.terraforged.mod.client.gui.preview2;
import com.terraforged.core.render.RenderMode;
import com.terraforged.core.serialization.annotation.NoName;
import com.terraforged.core.serialization.annotation.Range;
import com.terraforged.core.serialization.annotation.Serializable;
@ -11,7 +10,6 @@ public class PreviewSettings {
@Range(min = 1, max = 100)
public float zoom = 90F;
@NoName
public RenderMode display = RenderMode.BIOME_TYPE;
public float getZoom(float scale) {

View File

@ -1,8 +1,8 @@
package com.terraforged.mod.config;
import com.electronwill.nightconfig.core.CommentedConfig;
import com.terraforged.core.concurrent.thread.ThreadPools;
import com.terraforged.mod.Log;
import com.terraforged.core.concurrent.thread.ThreadPools;
public class PerfDefaults {

View File

@ -40,7 +40,6 @@ public class DataGen {
public static void dumpData() {
File dataDir = new File("data");
WorldGenBiomes.genBiomeMap(dataDir);
WorldGenBiomes.genBiomeWeights(dataDir);
WorldGenBlocks.genBlockTags(dataDir);
WorldGenFeatures.genBiomeFeatures(dataDir);
}

View File

@ -1,7 +1,7 @@
package com.terraforged.mod.data;
import com.terraforged.core.util.NameUtil;
import com.terraforged.mod.chunk.settings.TerraSettings;
import com.terraforged.core.util.NameUtil;
import com.terraforged.mod.client.gui.GuiKeys;
import com.terraforged.mod.client.gui.preview2.PreviewSettings;
import com.terraforged.mod.util.TranslationKey;
@ -39,7 +39,7 @@ public class LangGenerator {
}
private static void worlds(LanguageProvider provider) {
provider.add("generator.terraforged", "JurisForged");
provider.add("generator.terraforged", "TerraForged");
provider.add("generator.terratest", "TerraTest");
}

View File

@ -28,7 +28,6 @@ package com.terraforged.mod.data;
import com.google.gson.GsonBuilder;
import com.terraforged.mod.biome.map.BiomeMap;
import com.terraforged.mod.biome.provider.BiomeHelper;
import com.terraforged.mod.biome.provider.BiomeWeights;
import com.terraforged.world.biome.BiomeType;
import net.minecraft.util.ResourceLocation;
@ -49,32 +48,6 @@ public class WorldGenBiomes extends DataGen {
}
}
public static void genBiomeWeights(File dataDir) {
BiomeWeights weights = new BiomeWeights();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(new File(dataDir, "biome_weights.txt")))) {
writer.write("# REGISTERED BIOME WEIGHTS\n");
weights.forEachEntry((name, weight) -> {
try {
writer.write(name + "=" + weight + "\n");
} catch (IOException e) {
e.printStackTrace();
}
});
writer.write("\n");
writer.write("# UNREGISTERED BIOME WEIGHTS\n");
weights.forEachUnregistered((name, weight) -> {
try {
writer.write(name + "=" + weight + "\n");
} catch (IOException e) {
e.printStackTrace();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private static ResourceLocation getName(BiomeType type) {
return new ResourceLocation("terraforged", type.name().toLowerCase());
}

View File

@ -1,9 +1,9 @@
package com.terraforged.mod.feature;
import com.google.common.collect.ImmutableMap;
import com.terraforged.mod.feature.sapling.SaplingConfig;
import com.terraforged.fm.data.DataManager;
import com.terraforged.fm.util.Json;
import com.terraforged.mod.feature.sapling.SaplingConfig;
import net.minecraft.block.Block;
import java.util.HashMap;

View File

@ -25,10 +25,10 @@
package com.terraforged.mod.feature;
import com.terraforged.mod.feature.feature.DiskFeature;
import com.terraforged.fm.matcher.BiomeFeatureMatcher;
import com.terraforged.fm.matcher.biome.BiomeMatcher;
import com.terraforged.fm.matcher.feature.FeatureMatcher;
import com.terraforged.mod.feature.feature.DiskFeature;
import net.minecraft.block.Blocks;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.feature.Feature;

View File

@ -59,15 +59,9 @@ public class TerrainHelper {
);
private final float radius;
private final float overhang;
private final float overhang2;
// base - the size of the base built up around a piece as a percentage of its bounding box size
// overhang - the amount of overhead overhang to be cut out
public TerrainHelper(float base, float cutout) {
this.radius = base;
this.overhang = cutout;
this.overhang2 = cutout * cutout;
public TerrainHelper(float radius) {
this.radius = radius;
}
public void flatten(IWorld world, IChunk chunk) {
@ -154,22 +148,7 @@ public class TerrainHelper {
if (highest != null) {
MutableBoundingBox bounds = highest.getBoundingBox();
int minY = bounds.minY + highestOffset;
int maxY = minY + bounds.getYSize();
if (maxY <= surface) {
// gets weaker the further from the center of the piece
float dist = getCenterDistance2(x, z, bounds);
float distAlpha = 1F - NoiseUtil.clamp(dist / overhang2, 0, 1);
// gets weaker the more material is overhead creating the inverse cutout (ie overhang)
float depth = surface - maxY;
float depthAlpha = 1F - NoiseUtil.clamp(depth / overhang, 0, 1);
maxY += NoiseUtil.round(depthAlpha * distAlpha * overhang);
}
for (int dy = minY; dy <= maxY; dy++) {
for (int dy = bounds.minY + highestOffset; dy <= surface; dy++) {
pos.setPos(dx, dy, dz);
chunk.setBlockState(pos, Blocks.AIR.getDefaultState(), false);
}
@ -185,14 +164,6 @@ public class TerrainHelper {
return NoiseUtil.lerp(surface, level, alpha);
}
private float getCenterDistance2(int x, int z, MutableBoundingBox bounds) {
float cx = bounds.minX + (bounds.getXSize() / 2F);
float cz = bounds.minZ + (bounds.getZSize() / 2F);
float dx = cx - x;
float dz = cz - z;
return dx * dx + dz * dz;
}
private static void collectPiece(StructurePiece structurepiece, List<StructurePiece> list) {
if (structurepiece instanceof AbstractVillagePiece) {
AbstractVillagePiece piece = (AbstractVillagePiece) structurepiece;

View File

@ -1,12 +1,12 @@
package com.terraforged.mod.feature.context;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.fix.RegionDelegate;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.concurrent.Resource;
import com.terraforged.core.concurrent.cache.SafeCloseable;
import com.terraforged.core.concurrent.pool.ObjectPool;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.fix.RegionDelegate;
import com.terraforged.world.heightmap.Levels;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld;

View File

@ -1,8 +1,8 @@
package com.terraforged.mod.feature.decorator.poisson;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.tile.chunk.ChunkReader;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.n2d.Module;
import com.terraforged.n2d.Source;
import com.terraforged.n2d.util.NoiseUtil;

View File

@ -2,10 +2,10 @@ package com.terraforged.mod.feature.sapling;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.terraforged.mod.feature.BlockDataConfig;
import com.terraforged.fm.template.TemplateManager;
import com.terraforged.fm.template.feature.TemplateFeatureConfig;
import com.terraforged.fm.util.Json;
import com.terraforged.mod.feature.BlockDataConfig;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.util.ResourceLocation;

View File

@ -25,13 +25,13 @@
package com.terraforged.mod.feature.sapling;
import com.terraforged.fm.template.Template;
import com.terraforged.fm.template.feature.TemplateFeature;
import com.terraforged.fm.template.feature.TemplateFeatureConfig;
import com.terraforged.mod.TerraWorld;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.mod.feature.BlockDataManager;
import com.terraforged.fm.template.Template;
import com.terraforged.fm.template.feature.TemplateFeature;
import com.terraforged.fm.template.feature.TemplateFeatureConfig;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.util.Mirror;

View File

@ -57,16 +57,11 @@ public class Materials {
public final Set<Block> clay = create(WGTags.CLAY, States.CLAY.getBlock());
public final Set<Block> sediment = create(WGTags.SEDIMENT, States.GRAVEL.getBlock());
public final Set<Block> erodible = create(WGTags.ERODIBLE, null);
public final Set<Block> cold = create(WGTags.COLD, States.STONE.getBlock());
public LayerManager getLayerManager() {
return layerManager;
}
public boolean isCold(Block block) {
return cold.contains(block);
}
public boolean isStone(Block block) {
return stone.contains(block);
}

View File

@ -44,7 +44,6 @@ public class GeoGenerator implements StrataGenerator {
private final List<Block> soil;
private final List<Block> clay;
private final List<Block> sediment;
private final List<Block> cold;
private final List<Source> types = new ArrayList<>();
public GeoGenerator(Materials materials) {
@ -53,7 +52,6 @@ public class GeoGenerator implements StrataGenerator {
soil = Materials.toList(materials.dirt);
clay = Materials.toList(materials.clay);
sediment = Materials.toList(materials.sediment);
cold = Materials.toList(materials.cold);
}
@Override
@ -64,7 +62,6 @@ public class GeoGenerator implements StrataGenerator {
addLayer(seed + 2, random, config.sediment, sediment, builder);
addLayer(seed + 3, random, config.clay, clay, builder);
addLayer(seed + 4, random, config.rock, rock, builder);
addLayer(seed + 5, random, config.cold, cold, builder);
return builder.build();
}

View File

@ -27,8 +27,8 @@ package com.terraforged.mod.material.geology;
import com.terraforged.api.material.geology.GeologyManager;
import com.terraforged.api.material.geology.StrataConfig;
import com.terraforged.core.Seed;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.core.Seed;
import com.terraforged.mod.material.Materials;
import com.terraforged.n2d.Module;
import com.terraforged.n2d.Source;

View File

@ -31,20 +31,20 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.concurrent.Resource;
import com.terraforged.mod.Log;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.mod.chunk.TerraChunkGenerator;
import com.terraforged.mod.chunk.TerraContext;
import com.terraforged.mod.chunk.settings.SettingsHelper;
import com.terraforged.mod.data.DataGen;
import com.terraforged.mod.server.command.arg.BiomeArgType;
import com.terraforged.mod.server.command.arg.TerrainArgType;
import com.terraforged.mod.server.command.search.BiomeSearchTask;
import com.terraforged.mod.server.command.search.BothSearchTask;
import com.terraforged.mod.server.command.search.Search;
import com.terraforged.mod.server.command.search.TerrainSearchTask;
import com.terraforged.core.cell.Cell;
import com.terraforged.core.concurrent.Resource;
import com.terraforged.mod.data.DataGen;
import com.terraforged.world.WorldGenerator;
import com.terraforged.world.terrain.Terrain;
import com.terraforged.world.terrain.Terrains;
@ -132,11 +132,7 @@ public class TerraCommand {
try (Resource<Cell> cell = biomeProvider.lookupPos(pos.getX(), pos.getZ())) {
Biome biome = biomeProvider.getBiome(cell.get(), pos.getX(), pos.getZ());
context.getSource().sendFeedback(
new StringTextComponent(
"Terrain=" + cell.get().terrain.getName()
+ ", Biome=" + biome.getRegistryName()
+ ", BiomeType=" + cell.get().biomeType.name()
),
new StringTextComponent("Terrain=" + cell.get().terrain.getName() + ", Biome=" + biome.getRegistryName()),
false
);
}

View File

@ -1,7 +1,7 @@
package com.terraforged.mod.server.command.search;
import com.terraforged.core.cell.Cell;
import com.terraforged.mod.biome.provider.TerraBiomeProvider;
import com.terraforged.core.cell.Cell;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.ChunkGenerator;
@ -27,9 +27,6 @@ public class BiomeSearchTask extends ChunkGeneratorSearch {
@Override
public boolean test(BlockPos pos) {
biomeProvider.getWorldLookup().applyCell(cell, pos.getX(), pos.getZ());
if (biomeProvider.getBiome(cell, pos.getX(), pos.getZ()) == biome) {
return biomeProvider.getBiome(pos.getX(), pos.getZ()) == biome;
}
return false;
return biomeProvider.getBiome(cell, pos.getX(), pos.getZ()) == biome;
}
}

View File

@ -114,13 +114,12 @@ public class NBTHelper {
return tag;
}
public static boolean deserialize(CompoundNBT settings, Object object) {
public static void deserialize(CompoundNBT settings, Object object) {
try {
NBTReader reader = new NBTReader(settings);
return reader.writeTo(object);
reader.writeTo(object);
} catch (Throwable e) {
e.printStackTrace();
return false;
}
}
}

View File

@ -25,9 +25,9 @@
package com.terraforged.mod.util.setup;
import com.terraforged.mod.Log;
import com.terraforged.api.event.SetupEvent;
import com.terraforged.core.Seed;
import com.terraforged.mod.Log;
import com.terraforged.n2d.Source;
import com.terraforged.n2d.source.Builder;
import com.terraforged.world.geology.Strata;

View File

@ -26,9 +26,9 @@
package com.terraforged.mod.util.setup;
import com.terraforged.api.biome.modifier.ModifierManager;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.chunk.column.ColumnDecorator;
import com.terraforged.api.chunk.column.DecoratorManager;
import com.terraforged.api.biome.surface.SurfaceManager;
import com.terraforged.api.event.SetupEvent;
import com.terraforged.api.material.geology.GeologyManager;
import com.terraforged.api.material.layer.LayerManager;

View File

@ -2,14 +2,14 @@ modLoader="javafml"
loaderVersion="[31,)"
[[mods]]
modId="terraforged"
displayName="JurisForged"
displayName="TerraForged"
version="${version}"
authors="dags,Juris_LLM"
credits="dags,Juris_LLM"
authors="dags"
credits="dags"
logoFile="terraforged.png"
displayURL="https://i15.nl"
issueTrackerURL="https://gitea.i15.nl/abelhooge/TerraForged/issues"
displayURL="https://terraforged.com"
issueTrackerURL="https://github.com/TerraForged/TerraForged/issues"
description='''
Description:
A totally stolen terrain generator, but enforced with the power of smites!
A terrain generator attempting to create more immersive, inspiring worlds to explore and build in!
'''

View File

@ -1,6 +0,0 @@
{
"replace": false,
"values": [
"minecraft:stone"
]
}

View File

@ -1,46 +0,0 @@
{
"biomes": [
"minecraft:*mountains",
"minecraft:mountains*"
],
"match": [
[
"minecraft:decorated",
"minecraft:grass"
]
],
"replace": {
"name": "minecraft:decorated",
"config": {
"feature": {
"name": "minecraft:random_patch",
"config": {
"state_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "minecraft:grass"
}
},
"block_placer": {
"type": "minecraft:simple_block_placer"
},
"whitelist": [],
"blacklist": [],
"tries": 64,
"xspread": 7,
"yspread": 3,
"zspread": 7,
"can_replace": false,
"project": false,
"need_water": false
}
},
"decorator": {
"name": "minecraft:count_heightmap_double",
"config": {
"count": 3
}
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 35 KiB