proper mars rock layers (#1829)

* rock layer stuff for the next kjs-tfc release

* fix mars sea level

* mob tweaks

* lookin cool joker

* desaturated the amaranita mushrooms

* desaturated purple polypore

* features for the "bush" trees so they're always placed touching a log

* moved these out of the forest so it's less crowded

* upd8

* moved these to OCEAN_FLOOR

* moved the bushes to normal features instead of forests

* attached plants, bush adjustments

* updates with new gravel

* disable tinting on fallen leaves
This commit is contained in:
Pyritie 2025-09-15 04:32:00 +01:00 committed by GitHub
parent 9b0c729e50
commit 8c858253f1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
77 changed files with 698 additions and 203 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 B

After

Width:  |  Height:  |  Size: 285 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

After

Width:  |  Height:  |  Size: 351 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

After

Width:  |  Height:  |  Size: 379 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 B

After

Width:  |  Height:  |  Size: 320 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 B

After

Width:  |  Height:  |  Size: 456 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 452 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 384 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 610 B

After

Width:  |  Height:  |  Size: 635 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 B

After

Width:  |  Height:  |  Size: 464 B

Before After
Before After

View file

@ -16,7 +16,7 @@
"mars": {
"raw": "ad_astra:mars_stone",
"hardened": "tfg:rock/hardened_mars_stone",
"gravel": "ad_astra:mars_cobblestone",
"gravel": "tfg:rock/gravel_mars",
"cobble": "ad_astra:mars_cobblestone",
"sand": "ad_astra:mars_sand",
"sandstone": "ad_astra:mars_stone",
@ -26,7 +26,7 @@
"venus": {
"raw": "ad_astra:venus_stone",
"hardened": "tfg:rock/hardened_venus_stone",
"gravel": "ad_astra:venus_cobblestone",
"gravel": "tfg:rock/gravel_venus",
"cobble": "ad_astra:venus_cobblestone",
"sand": "ad_astra:venus_sand",
"sandstone": "ad_astra:venus_sandstone",
@ -36,7 +36,7 @@
"red_granite": {
"raw": "gtceu:red_granite",
"hardened": "tfg:rock/hardened_red_granite",
"gravel": "gtceu:red_granite_cobblestone",
"gravel": "tfg:rock/gravel_red_granite",
"cobble": "gtceu:red_granite_cobblestone",
"sand": "minecraft:red_sand",
"sandstone": "minecraft:red_sandstone",

View file

@ -74,12 +74,6 @@
"ambient": [],
"axolotls": [],
"creature": [
{
"type": "tfg:sniffer",
"maxCount": 3,
"minCount": 1,
"weight": 100
},
{
"type": "tfg:wraptor",
"maxCount": 4,

View file

@ -110,7 +110,7 @@
"type": "wan_ancient_beasts:crusher",
"maxCount": 2,
"minCount": 1,
"weight": 30
"weight": 10
},
{
"type": "wan_ancient_beasts:glider",

View file

@ -119,7 +119,7 @@
"type": "wan_ancient_beasts:eater",
"maxCount": 1,
"minCount": 1,
"weight": 10
"weight": 20
}
],
"misc": [],

View file

@ -74,12 +74,6 @@
"ambient": [],
"axolotls": [],
"creature": [
{
"type": "tfg:sniffer",
"maxCount": 3,
"minCount": 1,
"weight": 100
},
{
"type": "tfg:wraptor",
"maxCount": 4,

View file

@ -74,12 +74,6 @@
"ambient": [],
"axolotls": [],
"creature": [
{
"type": "tfg:sniffer",
"maxCount": 3,
"minCount": 1,
"weight": 100
},
{
"type": "tfg:wraptor",
"maxCount": 4,

View file

@ -19,7 +19,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -19,7 +19,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -19,7 +19,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -11,7 +11,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -19,7 +19,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -19,7 +19,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "block_predicate_filter",

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:random_patch",
"config": {
"feature": {
"feature": {
"type": "tfg:attached_decorative_plant",
"config": {
"block": "betterend:aurant_polypore",
"heightRange": 6
}
},
"placement": []
},
"tries": 24,
"xz_spread": 5,
"y_spread": 0
}
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:random_patch",
"config": {
"feature": {
"feature": {
"type": "tfg:attached_decorative_plant",
"config": {
"block": "betterend:bulb_moss",
"heightRange": 6
}
},
"placement": []
},
"tries": 24,
"xz_spread": 5,
"y_spread": 0
}
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:random_patch",
"config": {
"feature": {
"feature": {
"type": "tfg:attached_decorative_plant",
"config": {
"block": "betterend:filalux_wings",
"heightRange": 8
}
},
"placement": []
},
"tries": 24,
"xz_spread": 5,
"y_spread": 0
}
}

View file

@ -0,0 +1,43 @@
{
"type": "minecraft:random_patch",
"config": {
"feature": {
"feature": {
"type": "minecraft:simple_block",
"config": {
"to_place": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "betterend:filalux_wings",
"Properties": {
"direction": "up"
}
}
}
}
},
"placement": [
{
"type": "minecraft:block_predicate_filter",
"predicate": {
"type": "minecraft:all_of",
"predicates": [
{
"type": "minecraft:matching_blocks",
"blocks": "minecraft:air"
},
{
"type": "minecraft:matching_block_tag",
"offset": [ 0, -1, 0 ],
"tag": "tfg:decorative_plant_attachable"
}
]
}
}
]
},
"tries": 24,
"xz_spread": 5,
"y_spread": 4
}
}

View file

@ -0,0 +1,18 @@
{
"type": "minecraft:random_patch",
"config": {
"feature": {
"feature": {
"type": "tfg:attached_decorative_plant",
"config": {
"block": "betterend:purple_polypore",
"heightRange": 6
}
},
"placement": []
},
"tries": 24,
"xz_spread": 5,
"y_spread": 0
}
}

View file

@ -0,0 +1,44 @@
{
"type": "minecraft:tree",
"config": {
"decorators": [],
"dirt_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "tfg:mars_dirt"
}
},
"foliage_placer": {
"type": "minecraft:bush_foliage_placer",
"offset": 0,
"height": 1,
"radius": 2
},
"foliage_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "betterend:cave_bush"
}
},
"force_dirt": false,
"ignore_vines": true,
"minimum_size": {
"type": "minecraft:two_layers_feature_size",
"limit": 1,
"lower_size": 0,
"upper_size": 0
},
"trunk_placer": {
"type": "minecraft:straight_trunk_placer",
"base_height": 1,
"height_rand_a": 0,
"height_rand_b": 0
},
"trunk_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "beneath:wood/stripped_wood/crimson"
}
}
}
}

View file

@ -0,0 +1,44 @@
{
"type": "minecraft:tree",
"config": {
"decorators": [],
"dirt_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "tfg:mars_dirt"
}
},
"foliage_placer": {
"type": "minecraft:bush_foliage_placer",
"offset": 0,
"height": 1,
"radius": 2
},
"foliage_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "betterend:lucernia_leaves"
}
},
"force_dirt": false,
"ignore_vines": true,
"minimum_size": {
"type": "minecraft:two_layers_feature_size",
"limit": 1,
"lower_size": 0,
"upper_size": 0
},
"trunk_placer": {
"type": "minecraft:straight_trunk_placer",
"base_height": 1,
"height_rand_a": 0,
"height_rand_b": 0
},
"trunk_provider": {
"type": "minecraft:simple_state_provider",
"state": {
"Name": "beneath:wood/stripped_wood/warped"
}
}
}
}

View file

@ -309,10 +309,31 @@
"secondary_depth_range": 0
},
"then_run": {
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:venus_sand"
}
"type": "minecraft:sequence",
"sequence": [
{
"type": "minecraft:condition",
"if_true": {
"type": "minecraft:noise_threshold",
"noise": "minecraft:powder_snow",
"min_threshold": 0.1,
"max_threshold": 0.3
},
"then_run": {
"type": "minecraft:block",
"result_state": {
"Name": "tfg:rock/gravel_venus"
}
}
},
{
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:venus_sand"
}
}
]
}
},
{
@ -402,10 +423,30 @@
}
},
"then_run": {
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:venus_sand"
}
"type": "minecraft:sequence",
"sequence": [
{
"type": "minecraft:condition",
"if_true": {
"type": "minecraft:noise_threshold",
"noise": "minecraft:powder_snow",
"min_threshold": 0.1,
"max_threshold": 0.3
},
"then_run": {
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:mars_sand"
}
}
},
{
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:venus_sand"
}
}
]
}
},
{
@ -605,8 +646,7 @@
"if_true": {
"type": "minecraft:biome",
"biome_is": [
"tfg:mars/martian_mountains",
"tfg:mars/martian_hills"
"tfg:mars/martian_mountains"
]
},
"then_run": {

View file

@ -627,7 +627,7 @@
{
"type": "minecraft:block",
"result_state": {
"Name": "ad_astra:glacio_cobblestone"
"Name": "tfg:rock/gravel_glacio"
}
}
]

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,23 @@
{
"feature": "tfg:mars/surface/aurant_polypore",
"placement": [
{
"type": "tfc:climate",
"min_forest": "edge"
},
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,23 @@
{
"feature": "tfg:mars/surface/bulb_moss",
"placement": [
{
"type": "tfc:climate",
"min_forest": "edge"
},
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,23 @@
{
"feature": "tfg:mars/surface/filalux_wings",
"placement": [
{
"type": "tfc:climate",
"min_forest": "edge"
},
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,23 @@
{
"feature": "tfg:mars/surface/filalux_wings_top",
"placement": [
{
"type": "tfc:climate",
"min_forest": "edge"
},
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -17,7 +17,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -17,7 +17,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -7,7 +7,7 @@
},
{
"type": "tfc:climate",
"min_forest": "edge"
"max_forest": "sparse"
},
{
"type": "minecraft:in_square"
@ -17,7 +17,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -17,7 +17,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -3,7 +3,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,23 @@
{
"feature": "tfg:mars/surface/purple_polypore",
"placement": [
{
"type": "tfc:climate",
"min_forest": "edge"
},
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -13,7 +13,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -7,8 +7,7 @@
},
{
"type": "tfc:climate",
"min_forest": "none",
"max_forest": "normal"
"max_forest": "edge"
},
{
"type": "minecraft:in_square"
@ -18,7 +17,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -3,7 +3,7 @@
"placement": [
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
},
{
"type": "minecraft:block_predicate_filter",

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "minecraft:biome"

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
},
{
"type": "minecraft:block_predicate_filter",

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "minecraft:biome"

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE_WG"
"heightmap": "OCEAN_FLOOR_WG"
},
{
"type": "minecraft:biome"

View file

@ -10,7 +10,7 @@
},
{
"type": "minecraft:heightmap",
"heightmap": "WORLD_SURFACE"
"heightmap": "OCEAN_FLOOR"
},
{
"type": "minecraft:block_predicate_filter",

View file

@ -0,0 +1,24 @@
{
"feature": "tfg:mars/tree/cave_bush",
"placement": [
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "tfc:climate",
"min_forest": "edge",
"min_rainfall": -5
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -0,0 +1,24 @@
{
"feature": "tfg:mars/tree/lucernia",
"placement": [
{
"type": "minecraft:rarity_filter",
"chance": 2
},
{
"type": "tfc:climate",
"min_forest": "edge",
"max_rainfall": -7
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:biome"
},
{
"type": "minecraft:heightmap",
"heightmap": "OCEAN_FLOOR"
}
]
}

View file

@ -272,6 +272,8 @@ const registerAdAstraBlockTags = (event) => {
event.add('tfg:mars_soil', 'tfg:grass/sangnum_kaolin_mycelium')
event.add('ad_astra:mars_stone_replaceables', '#tfg:mars_soil')
event.add('minecraft:animals_spawnable_on', '#tfg:mars_soil')
event.add('minecraft:animals_spawnable_on', '#tfg:mars_plants')
event.add('minecraft:animals_spawnable_on', '#forge:gravel')
event.add('tfc:can_carve', '#ad_astra:moon_stone_replaceables')
event.add('tfc:can_carve', '#ad_astra:mars_stone_replaceables')
@ -496,6 +498,8 @@ const registerAdAstraPlacedFeatures = (event) => {
event.add('tfg:mars_underground_decoration', "tfg:earth/geode/quartzite")
// Vegetation
event.add("tfg:mars_global_small_plants", "tfg:mars/tree/lucernia")
event.add("tfg:mars_global_small_plants", "tfg:mars/tree/cave_bush")
event.add("tfg:mars_global_small_plants", "tfg:mars/surface/charnia")
event.add("tfg:mars_global_small_plants", "tfg:mars/surface/flamaea")
event.add("tfg:mars_global_small_plants", "tfg:mars/surface/lacugrove")
@ -513,6 +517,11 @@ const registerAdAstraPlacedFeatures = (event) => {
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/lanceleaf")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/lanceleaf_small")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/bulb_moss")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/aurant_polypore")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/filalux_wings")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/filalux_wings_top")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/amber_grass")
event.add("tfg:mars_amber_vegetal_decoration", "tfg:mars/surface/flammalix")
@ -527,6 +536,12 @@ const registerAdAstraPlacedFeatures = (event) => {
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/crop/shadow_berry")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/lucernia_outer_leaves")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/bulb_moss")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/aurant_polypore")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/purple_polypore")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/filalux_wings")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/filalux_wings_top")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/aeridium")
event.add("tfg:mars_rusticus_vegetal_decoration", "tfg:mars/surface/flammalix")
@ -544,6 +559,9 @@ const registerAdAstraPlacedFeatures = (event) => {
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/small_amaranita_mushroom")
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/large_amaranita_mushroom")
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/aurant_polypore")
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/purple_polypore")
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/cave_grass")
event.add("tfg:mars_sangnum_vegetal_decoration", "tfg:mars/surface/clawfern")

View file

@ -6,102 +6,183 @@ const $ForestType = Java.loadClass("net.dries007.tfc.world.chunkdata.ForestType"
const ROCK_LAYER_HEIGHT = 40;
// Precompute the aquifer heights as constants as this is not used
let EMPTY_AQUIFER = [];
let aquifer_i = 0;
while (aquifer_i < 16) {
EMPTY_AQUIFER.push(32);
aquifer_i++;
}
// Bare minimum
TFCEvents.createChunkDataProvider('moon', event => {
const emptyLayer = TFC.misc.lerpFloatLayer(0, 0, 0, 0);
const emptyLayer = TFC.misc.lerpFloatLayer(0, 0, 0, 0);
var aquifer = [];
let i = 0;
while (i < 16) {
aquifer.push(32);
i++;
}
var heights = [];
for (let x = 0 ; x < 16 ; x++) {
for (let z = 0 ; z < 16 ; z++) {
heights[x + 16 * z] = 80;
}
}
var heights = [];
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
heights[x + 16 * z] = 80;
}
}
event.partial((data, chunk) => {
data.generatePartial(emptyLayer, emptyLayer, 0, 0, 0)
})
event.full((data, chunk) => {
data.generateFull(heights, aquifer)
})
event.rocks((x, y, z, surfaceY, cache, rockLayers) => {
return rockLayers.sampleAtLayer(0, 0)
})
event.partial((data, chunk) => {
data.generatePartial(emptyLayer, emptyLayer, 0, 0, 0)
})
event.full((data, chunk) => {
data.generateFull(heights, EMPTY_AQUIFER)
})
event.rocks((x, y, z, surfaceY, cache, rockLayers) => {
return rockLayers.sampleAtLayer(0, 0)
})
})
let tempLayer = TFC.misc.newOpenSimplex2D(4621678939469)
.octaves(2)
.spread(0.05)
.scaled(-10, 10)
let rainLayer = TFC.misc.newOpenSimplex2D(2846746456346)
.octaves(2)
.spread(0.05)
.scaled(-3, 3)
let forestDensityNoise = TFC.misc.newOpenSimplex2D(98713856895664)
.octaves(4)
.spread(0.0025)
.scaled(-0.2, 1.2)
.clamped(0, 1)
let forestWeirdnessNoise = TFC.misc.newOpenSimplex2D(3210378120)
.octaves(4)
.spread(0.0025)
.map(i => 1.1 * Math.abs(i))
.clamped(0, 1)
TFC.misc.register2DNoiseForInspection('temp', tempLayer)
TFC.misc.register2DNoiseForInspection('rain', rainLayer)
TFC.misc.register2DNoiseForInspection('forestType', forestDensityNoise)
TFC.misc.register2DNoiseForInspection('forestWeirdness', forestWeirdnessNoise)
// Forest layer
//const forestTypeLayer = TFC.misc.uniformLayeredArea(45245235242);
//for (let i = 0; i < 3; i++) {
// forestTypeLayer.zoom(true, 19763144126).smooth(79784123632);
//}
//for (let i = 0; i < 6; i++) {
// forestTypeLayer.zoom(true, 451364589723);
//}
//forestTypeLayer
// .smooth(71214856214)
// .zoom(true, 854126548632)
// .smooth(145256147896)
let forestLayerNoise = TFC.misc.newOpenSimplex2D(3210378120)
.octaves(2)
.spread(0.005)
.scaled(0, 1)
// Rock layer
const rockLayer = TFC.misc.uniformLayeredArea(413567326);
for (let i = 0; i < 3; i++) {
rockLayer.zoom(true, 19763144126).smooth(79784123632);
}
for (let i = 0; i < 6; i++) {
rockLayer.zoom(true, 451364589723);
}
rockLayer
.smooth(71214856214)
.zoom(true, 854126548632)
.smooth(145256147896)
TFCEvents.createChunkDataProvider('mars', event => {
event.partial((data, chunk) => {
let x = chunk.pos.minBlockX;
let z = chunk.pos.minBlockZ;
const rain = TFC.misc.lerpFloatLayer(0, 0, 0, 0);
const tempLayer = TFC.misc.newOpenSimplex2D(event.worldSeed + 4621678939469)
.spread(0.002)
.octaves(3)
.scaled(70, 90)
const forestLayer = TFC.misc.newOpenSimplex2D(event.worldSeed + 98713856895664)
.spread(0.00002)
.terraces(9)
.affine(6, 12)
.scaled(6, 18, 0, 1)
const avgTemp1 = calcAverage(z, global.MARS_PLANET_SIZE, global.MARS_MIN_AVG_TEMP, global.MARS_MAX_AVG_TEMP)
const avgTemp2 = calcAverage(z + 15, global.MARS_PLANET_SIZE, global.MARS_MIN_AVG_TEMP, global.MARS_MAX_AVG_TEMP)
const avgRain1 = calcAverage(x, global.MARS_PLANET_SIZE, global.MARS_MIN_AVG_RAIN, global.MARS_MAX_AVG_RAIN)
const avgRain2 = calcAverage(x + 15, global.MARS_PLANET_SIZE, global.MARS_MIN_AVG_RAIN, global.MARS_MAX_AVG_RAIN)
const rockNoise = TFC.misc.newOpenSimplex2D(event.worldSeed + 8008135)
.octaves(3)
.scaled(0x80000000, 0x7fffffff) // Integer.MIN_VALUE to Integer.MAX_VALUE
.spread(0.00001) // spread it out so the vaiance is small
let rain = TFC.misc.lerpFloatLayer(
avgRain1 + rainLayer.noise(x, z),
avgRain1 + rainLayer.noise(x, z + 15),
avgRain2 + rainLayer.noise(x + 15, z),
avgRain2 + rainLayer.noise(x + 15, z + 15)
);
let temp = TFC.misc.lerpFloatLayer(
avgTemp1 + tempLayer.noise(x, z),
avgTemp1 + tempLayer.noise(x, z + 15),
avgTemp2 + tempLayer.noise(x + 15, z),
avgTemp2 + tempLayer.noise(x + 15, z + 15)
);
// Precompute the aquifer heights as constants as this is not used
var aquifer = [];
let i = 0;
while (i < 16) {
aquifer.push(32);
i++;
}
data.generatePartial(
rain,
temp,
//floatToForestType(((forestTypeLayer.getAt(x, z) / 0x80000000) / 2.0) + 0.5),
floatToForestType(forestLayerNoise.noise(x, z)),
forestWeirdnessNoise.noise(x, z), // forest weirdness
forestDensityNoise.noise(x, z) // forest density
);
});
event.partial((data, chunk) => {
let x = chunk.pos.minBlockX;
let z = chunk.pos.minBlockZ;
event.full((data, chunk) => {
let heights = [];
for (let z = 0; z < 16; z++) {
for (let x = 0; x < 16; x++) {
heights[x + 16 * z] = chunk.getHeight($HeightMap.Types.OCEAN_FLOOR_WG, x, z);
}
}
data.generateFull(heights, EMPTY_AQUIFER);
});
let temp = TFC.misc.lerpFloatLayer(
tempLayer.noise(x, z),
tempLayer.noise(x, z + 15),
tempLayer.noise(x + 15, z),
tempLayer.noise(x + 15, z + 15)
);
let forestType = $ForestType.NONE;
const forestTypeNoise = forestLayer.noise(x, z);
if (forestTypeNoise < 0.2)
forestType = $ForestType.OLD_GROWTH;
else if (forestTypeNoise < 0.4)
forestType = $ForestType.NORMAL;
else if (forestTypeNoise < 0.6)
forestType = $ForestType.EDGE;
else if (forestTypeNoise < 0.8)
forestType = $ForestType.SPARSE;
data.generatePartial(
rain,
temp,
forestType,
forestLayer.noise(x * 78423 + 869, z),
forestTypeNoise //forestLayer.noise(x, z * 651349 - 698763)
);
});
event.full((data, chunk) => {
let heights = [];
for (let z = 0; z < 16; z++) {
for (let x = 0; x < 16; x++) {
heights[x + 16 * z] = chunk.getHeight($HeightMap.Types.OCEAN_FLOOR_WG, x, z);
}
}
data.generateFull(heights, aquifer);
});
event.rocks((x, y, z, surfaceY, cache, rockLayers) => {
return rockLayers.sampleAtLayer(rockNoise.noise(x, z), (surfaceY - y) / ROCK_LAYER_HEIGHT);
});
event.rocks((x, y, z, surfaceY, cache, rockSettings) => {
return rockSettings.sampleAtLayer(rockLayer.getAt(x, z), (surfaceY - y) / ROCK_LAYER_HEIGHT);
});
})
/**
* @param {number} playerZ The current Z level of the player
* @param {number} scale The size of the planet, from the south pole to the north (20k on earth with default TFC settings)
* @param {number} min The average value at the poles
* @param {number} max The average value at the equator
* @returns {number}
*/
function calcAverage(playerZ, scale, min, max) {
let relative = (playerZ / scale * -1) + 0.5;
// relative is now 1 for peak -z, 0 for peak +z
let smoothed = Math.cos(relative * JavaMath.PI);
// smoothed is now -1 for peak -z, 1 for peak +z
let halfDiff = (min - max) / -2;
let temp = (smoothed * halfDiff) - (halfDiff - max);
return temp;
}
/**
* @param {number} float A number between 0 and 1
* @returns {$ForestType}
*/
// Rhino moment
function floatToForestType(float) {
if (float < 0.2)
return $ForestType.OLD_GROWTH;
else if (float < 0.4)
return $ForestType.NORMAL;
else if (float < 0.6)
return $ForestType.EDGE;
else if (float < 0.8)
return $ForestType.SPARSE;
else
return $ForestType.NONE;
}

View file

@ -8,11 +8,11 @@ TFCEvents.worldgenData(event => {
// https://notenoughmail.github.io/kubejs_tfc/1.20.1/worldgen/#forest-types-map-entry
// type, treeCount, groundcoverCount, perChunkChance, bushCount, hasSpoilerOldGrowth, allowsOldGrowth, leafPileCount
event.forestTypesMapEntry('none', [0, 1], 0, 0.02, 0, false, false, 0),
event.forestTypesMapEntry('sparse', [1, 3], 6, 0.2, 0, false, false, [0, 1]),
event.forestTypesMapEntry('edge', [2, 4], 15, 0.8, 1, true, false, [0, 1]),
event.forestTypesMapEntry('normal', [4, 6], 25, 1, 1, true, false, [1, 2]),
event.forestTypesMapEntry('old_growth', [5, 8], 40, 1, 2, true, true, [1, 2])
event.forestTypesMapEntry('none', [0, 1], 1, 0.1, 0, false, false, 0),
event.forestTypesMapEntry('sparse', [0, 3], 10, 0.3, 1, false, false, [0, 1]),
event.forestTypesMapEntry('edge', [2, 5], 20, 0.8, 1, true, false, [1, 2]),
event.forestTypesMapEntry('normal', [5, 8], 35, 1, 2, true, false, [2, 3]),
event.forestTypesMapEntry('old_growth', [8, 12], 50, 1, 3, true, true, [3, 4])
],
false,
placement => {}
@ -20,9 +20,10 @@ TFCEvents.worldgenData(event => {
event.forestEntry('tfg:mars/crimson_forest_entry',
climate => {
climate.maxTemp(-20)
climate.minTemp(-65)
climate.minRain(-10)
climate.maxTemp(-41)
climate.minTemp(-98)
climate.minRain(-12)
climate.fuzzy(true)
},
'beneath:wood/wood/crimson', // bush log
'beneath:wood/leaves/crimson', // bush leaves
@ -31,7 +32,6 @@ TFCEvents.worldgenData(event => {
[ // ground cover
'minecraft:crimson_fungus',
'beneath:wood/fallen_leaves/crimson',
'beneath:wood/leaves/crimson',
'beneath:wood/twig/crimson',
'tfg:groundcover/wraptor_feather',
'tfg:groundcover/glider_feather'
@ -44,16 +44,16 @@ TFCEvents.worldgenData(event => {
null, // chance for old growth in non-old growth forests
null, // chance for a fallen tree
null, // chance for a dead tree
null, // true to spawn on ocean floor, false for world surface
null, // false (default) to spawn with the ocean floor heightmap, true for world surface
placement => {}
)
event.forestEntry('tfg:mars/warped_forest_entry',
climate => {
climate.maxTemp(-20)
climate.minTemp(-65)
climate.minRain(-20)
climate.maxTemp(-39)
climate.minTemp(-101)
climate.maxRain(0)
climate.fuzzy(true)
},
'beneath:wood/wood/warped',
'beneath:wood/leaves/warped',
@ -62,7 +62,6 @@ TFCEvents.worldgenData(event => {
[
'minecraft:warped_fungus',
'beneath:wood/fallen_leaves/warped',
'beneath:wood/leaves/warped',
'beneath:wood/twig/warped',
'tfg:groundcover/wraptor_feather',
'tfg:groundcover/glider_feather'
@ -76,18 +75,16 @@ TFCEvents.worldgenData(event => {
event.forestEntry('tfg:mars/aeronos_forest_entry',
climate => {
climate.maxTemp(-30)
climate.minTemp(-85)
climate.minRain(-15)
climate.minTemp(-77)
climate.minRain(-14)
climate.fuzzy(true)
},
'ad_astra:aeronos_stem',
'ad_astra:aeronos_cap',
'betterend:cave_bush',
'betterend:cave_bush_fallen',
null,
null,
[
"ad_astra:aeronos_mushroom",
'betterend:cave_bush',
'betterend:cave_bush_fallen',
'tfg:groundcover/wraptor_feather',
'tfg:groundcover/glider_feather',
'tfg:groundcover/aeronos_stick'
@ -101,18 +98,16 @@ TFCEvents.worldgenData(event => {
event.forestEntry('tfg:mars/strophar_forest_entry',
climate => {
climate.maxTemp(-20)
climate.minTemp(-80)
climate.maxRain(5)
climate.minTemp(-73)
climate.maxRain(2)
climate.fuzzy(true)
},
'ad_astra:strophar_stem',
'ad_astra:strophar_cap',
'betterend:lucernia_leaves',
'betterend:lucernia_leaves_fallen',
null,
null,
[
"ad_astra:strophar_mushroom",
'betterend:lucernia_leaves',
'betterend:lucernia_leaves_fallen',
'tfg:groundcover/wraptor_feather',
'tfg:groundcover/glider_feather',
'tfg:groundcover/strophar_stick'
@ -126,18 +121,18 @@ TFCEvents.worldgenData(event => {
event.forestEntry('tfg:mars/alphacene_forest_entry',
climate => {
climate.minTemp(-40)
climate.minTemp(-65)
climate.fuzzy(true)
},
'minecraft:mushroom_stem',
'species:alphacene_mushroom_block',
'minecraft:mushroom_stem',
null,
null,
null,
null,
[
"species:alphacene_mushroom",
'tfg:groundcover/wraptor_feather',
'tfg:groundcover/glider_feather',
'tfg:groundcover/alphacene_stick',
'tfc:groundcover/stick'
'tfg:groundcover/alphacene_stick'
],
'species:alphacene_mushroom',
'tfg:mars/tree/alphacene_dead',

View file

@ -995,6 +995,14 @@ const registerTFGBlockTags = (event) => {
event.add('forge:mineable/wrench', 'tfg:machine_casing_aluminium_plated_steel')
event.add('tfg:decorative_plant_attachable', '#minecraft:logs')
event.add('tfg:decorative_plant_attachable', 'minecraft:mushroom_stem')
event.add('tfg:decorative_plant_attachable', 'species:alphacene_mushroom_block')
event.add('tfg:decorative_plant_attachable', 'ad_astra:aeronos_cap')
event.add('tfg:decorative_plant_attachable', 'ad_astra:strophar_cap')
event.add('tfg:decorative_plant_attachable', 'minecraft:nether_wart_block')
event.add('tfg:decorative_plant_attachable', 'minecraft:warped_wart_block')
event.add('tfg:decorative_plant_attachable', 'betterend:cave_bush')
event.add('tfg:decorative_plant_attachable', 'betterend:lucernia_leaves')
}
//#endregion

View file

@ -139,7 +139,7 @@ function registerBetterEndBlocks(event) {
leaves.soundType('azalea_leaves')
leaves.tagBlock('minecraft:mineable/hoe')
leaves.tagBlock('minecraft:replaceable')
// TODO: kjs-tfc 1.3.3 will have an option to disable tinting on leaves
leaves.noDynamicTinting()
leaves.models((modelType, generator) => {
if (modelType.layers != 8) {
generator.parent("tfc:block/groundcover/fallen_leaves_height" + modelType.height);
@ -164,7 +164,7 @@ function registerBetterEndBlocks(event) {
leaves.soundType('azalea_leaves')
leaves.tagBlock('minecraft:mineable/hoe')
leaves.tagBlock('minecraft:replaceable')
// TODO: kjs-tfc 1.3.3 will have an option to disable tinting on leaves
leaves.noDynamicTinting()
leaves.models((modelType, generator) => {
if (modelType.layers != 8) {
generator.parent("tfc:block/groundcover/fallen_leaves_height" + modelType.height);

View file

@ -12,6 +12,12 @@ const TWO_PI = JavaMath.PI * 2;
const OXYGENATED_TEMP = 15;
global.MARS_PLANET_SIZE = 10000;
global.MARS_MIN_AVG_TEMP = -110;
global.MARS_MAX_AVG_TEMP = -15;
global.MARS_MIN_AVG_RAIN = -25;
global.MARS_MAX_AVG_RAIN = 13;
function clamp(val, min, max) {
return Math.min(Math.max(val, min), max);
}
@ -147,22 +153,22 @@ TFCEvents.registerClimateModel(event => {
}
// average of -110 at night, -15 at day
let avgTemp = calcAverage(pos.z, 10000, -110, -15);
let avgTemp = calcAverage(pos.z, global.MARS_PLANET_SIZE, -110, -15);
// +- 45 based on latitude, down to -10 at bedrock
return calcCurrentTemp(avgTemp, 65, pos.y, calendarTicks, 45, -10, 0.5);
return calcCurrentTemp(avgTemp, 88, pos.y, calendarTicks, 45, -10, 0.5);
})
builder.setAverageTemperatureCalculation((level, pos) => {
// Earth is 10k to each pole, and mars is about half as big as earth, so 5k to each pole sounds good
return calcAverage(pos.z, 10000, -110, -15);
return calcAverage(pos.z, global.MARS_PLANET_SIZE, -110, -15);
})
builder.setAverageRainfallCalculation((level, pos) => {
// irl mars' poles have a snowfall of 0.13mm but that's barely noticeable here.
// Use a negative rainfall to stop it snowing closer to the equator. TFC clamps negatives to zero so it's fine
return calcAverage(pos.x, 10000, 13, -25)
return calcAverage(pos.x, global.MARS_PLANET_SIZE, -25, 13)
})
builder.setAirFog((level, pos, calendarTicks) => 0)