diff --git a/.gitignore b/.gitignore index fee2f7b..58a539f 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,5 @@ run/ **/src/generated/**/.cache/ repo/ !**/src/**/repo/ +/console.txt +/Assets/ diff --git a/Assets/limestone_block.json b/Assets/limestone_block.json new file mode 100644 index 0000000..a9a75d5 --- /dev/null +++ b/Assets/limestone_block.json @@ -0,0 +1,9 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/limestone/limestone1", "weight": 3 + } + ] + } +} diff --git a/Assets/limestone_grass_block.json b/Assets/limestone_grass_block.json new file mode 100644 index 0000000..c413d32 --- /dev/null +++ b/Assets/limestone_grass_block.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/limestone/limestone_grass", "weight": 3 + }, + { + "model": "ageofthegods:block/limestone/limestone_grass2", "weight": 3 + }, + { + "model": "ageofthegods:block/limestone/limestone_grass3", "weight": 3 + } + ] + } +} diff --git a/Assets/shale_block.json b/Assets/shale_block.json new file mode 100644 index 0000000..248c81e --- /dev/null +++ b/Assets/shale_block.json @@ -0,0 +1,12 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/shale/shale1", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale2", "weight": 1 + } + ] + } +} diff --git a/Assets/shale_grass_block.json b/Assets/shale_grass_block.json new file mode 100644 index 0000000..2887afb --- /dev/null +++ b/Assets/shale_grass_block.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/shale/shale_grass", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale_grass2", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale_grass3", "weight": 1 + } + ] + } +} diff --git a/src/generated/resources/data/ageofthegods/worldgen/noise/tiny_patchy_noise.json b/src/generated/resources/data/ageofthegods/worldgen/noise/tiny_patchy_noise.json new file mode 100644 index 0000000..f8e3ad3 --- /dev/null +++ b/src/generated/resources/data/ageofthegods/worldgen/noise/tiny_patchy_noise.json @@ -0,0 +1,8 @@ +{ + "amplitudes": [ + 1.0, + 1.0, + 1.0 + ], + "firstOctave": 0 +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/worldgen/noise_settings/overworld.json b/src/generated/resources/data/minecraft/worldgen/noise_settings/overworld.json new file mode 100644 index 0000000..b5e89ff --- /dev/null +++ b/src/generated/resources/data/minecraft/worldgen/noise_settings/overworld.json @@ -0,0 +1,2746 @@ +{ + "aquifers_enabled": true, + "default_block": { + "Name": "minecraft:stone" + }, + "default_fluid": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + }, + "disable_mob_generation": false, + "legacy_random_source": false, + "noise": { + "height": 384, + "min_y": -64, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_barrier", + "xz_scale": 1.0, + "y_scale": 0.5 + }, + "continents": "minecraft:overworld/continents", + "depth": "minecraft:overworld/depth", + "erosion": "minecraft:overworld/erosion", + "final_density": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:squeeze", + "argument": { + "type": "minecraft:mul", + "argument1": 0.64, + "argument2": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:blend_density", + "argument": { + "type": "minecraft:add", + "argument1": 0.1171875, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 0.0, + "from_y": -64, + "to_value": 1.0, + "to_y": -40 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.1171875, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.0, + "from_y": 240, + "to_value": 0.0, + "to_y": 256 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/sloped_cheese", + "max_exclusive": 1.5625, + "min_inclusive": -1000000.0, + "when_in_range": { + "type": "minecraft:min", + "argument1": "minecraft:overworld/sloped_cheese", + "argument2": { + "type": "minecraft:mul", + "argument1": 5.0, + "argument2": "minecraft:overworld/caves/entrances" + } + }, + "when_out_of_range": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:min", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 4.0, + "argument2": { + "type": "minecraft:square", + "argument": { + "type": "minecraft:noise", + "noise": "minecraft:cave_layer", + "xz_scale": 1.0, + "y_scale": 8.0 + } + } + }, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 0.27, + "argument2": { + "type": "minecraft:noise", + "noise": "minecraft:cave_cheese", + "xz_scale": 1.0, + "y_scale": 0.6666666666666666 + } + }, + "max": 1.0, + "min": -1.0 + }, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 1.5, + "argument2": { + "type": "minecraft:mul", + "argument1": -0.64, + "argument2": "minecraft:overworld/sloped_cheese" + } + }, + "max": 0.5, + "min": 0.0 + } + } + }, + "argument2": "minecraft:overworld/caves/entrances" + }, + "argument2": { + "type": "minecraft:add", + "argument1": "minecraft:overworld/caves/spaghetti_2d", + "argument2": "minecraft:overworld/caves/spaghetti_roughness_function" + } + }, + "argument2": { + "type": "minecraft:range_choice", + "input": "minecraft:overworld/caves/pillars", + "max_exclusive": 0.03, + "min_inclusive": -1000000.0, + "when_in_range": -1000000.0, + "when_out_of_range": "minecraft:overworld/caves/pillars" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "argument2": "minecraft:overworld/caves/noodle" + }, + "fluid_level_floodedness": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_floodedness", + "xz_scale": 1.0, + "y_scale": 0.67 + }, + "fluid_level_spread": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_fluid_level_spread", + "xz_scale": 1.0, + "y_scale": 0.7142857142857143 + }, + "lava": { + "type": "minecraft:noise", + "noise": "minecraft:aquifer_lava", + "xz_scale": 1.0, + "y_scale": 1.0 + }, + "preliminary_surface_level": { + "type": "minecraft:find_top_surface", + "cell_height": 8, + "density": { + "type": "minecraft:add", + "argument1": -0.390625, + "argument2": { + "type": "minecraft:add", + "argument1": 0.1171875, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 0.0, + "from_y": -64, + "to_value": 1.0, + "to_y": -40 + }, + "argument2": { + "type": "minecraft:add", + "argument1": -0.1171875, + "argument2": { + "type": "minecraft:add", + "argument1": -0.078125, + "argument2": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.0, + "from_y": 240, + "to_value": 0.0, + "to_y": 256 + }, + "argument2": { + "type": "minecraft:add", + "argument1": 0.078125, + "argument2": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": -0.703125, + "argument2": { + "type": "minecraft:mul", + "argument1": 4.0, + "argument2": { + "type": "minecraft:quarter_negative", + "argument": { + "type": "minecraft:mul", + "argument1": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:y_clamped_gradient", + "from_value": 1.5, + "from_y": -64, + "to_value": -1.5, + "to_y": 320 + }, + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/offset" + } + }, + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/factor" + } + } + } + } + }, + "max": 64.0, + "min": -64.0 + } + } + } + } + } + } + } + }, + "lower_bound": -64, + "upper_bound": { + "type": "minecraft:clamp", + "input": { + "type": "minecraft:add", + "argument1": 128.0, + "argument2": { + "type": "minecraft:mul", + "argument1": -128.0, + "argument2": { + "type": "minecraft:add", + "argument1": { + "type": "minecraft:mul", + "argument1": 0.2734375, + "argument2": { + "type": "minecraft:invert", + "argument": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/factor" + } + } + }, + "argument2": { + "type": "minecraft:mul", + "argument1": -1.0, + "argument2": { + "type": "minecraft:cache_2d", + "argument": "minecraft:overworld/offset" + } + } + } + } + }, + "max": 320.0, + "min": -40.0 + } + }, + "ridges": "minecraft:overworld/ridges", + "temperature": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:temperature", + "shift_x": "minecraft:shift_x", + "shift_y": 0.0, + "shift_z": "minecraft:shift_z", + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "vegetation": { + "type": "minecraft:shifted_noise", + "noise": "minecraft:vegetation", + "shift_x": "minecraft:shift_x", + "shift_y": 0.0, + "shift_z": "minecraft:shift_z", + "xz_scale": 0.25, + "y_scale": 0.0 + }, + "vein_gap": { + "type": "minecraft:noise", + "noise": "minecraft:ore_gap", + "xz_scale": 1.0, + "y_scale": 1.0 + }, + "vein_ridged": { + "type": "minecraft:add", + "argument1": -0.07999999821186066, + "argument2": { + "type": "minecraft:max", + "argument1": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "max_exclusive": 51.0, + "min_inclusive": -60.0, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_a", + "xz_scale": 4.0, + "y_scale": 4.0 + }, + "when_out_of_range": 0.0 + } + } + }, + "argument2": { + "type": "minecraft:abs", + "argument": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "max_exclusive": 51.0, + "min_inclusive": -60.0, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_b", + "xz_scale": 4.0, + "y_scale": 4.0 + }, + "when_out_of_range": 0.0 + } + } + } + } + }, + "vein_toggle": { + "type": "minecraft:interpolated", + "argument": { + "type": "minecraft:range_choice", + "input": "minecraft:y", + "max_exclusive": 51.0, + "min_inclusive": -60.0, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_veininess", + "xz_scale": 1.5, + "y_scale": 1.5 + }, + "when_out_of_range": 0.0 + } + } + }, + "ore_veins_enabled": true, + "sea_level": 63, + "spawn_target": [ + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + -1.0, + -0.16 + ] + }, + { + "continentalness": [ + -0.11, + 1.0 + ], + "depth": 0.0, + "erosion": [ + -1.0, + 1.0 + ], + "humidity": [ + -1.0, + 1.0 + ], + "offset": 0.0, + "temperature": [ + -1.0, + 1.0 + ], + "weirdness": [ + 0.16, + 1.0 + ] + } + ], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "ageofthegods:garrigue" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.0, + "noise": "minecraft:powder_snow" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:limestone_grass_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:limestone_block" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 4, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:limestone_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "ageofthegods:maquis_shrubland" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.0, + "noise": "ageofthegods:tiny_patchy_noise" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:shale_grass_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:shale_block" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 4, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "ageofthegods:shale_block" + } + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "false_at_and_above": { + "above_bottom": 5 + }, + "random_name": "minecraft:bedrock_floor", + "true_at_and_below": { + "above_bottom": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:bedrock" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:above_preliminary_surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 97 + }, + "surface_depth_multiplier": 2 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": -0.5454, + "min_threshold": -0.909, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.1818, + "min_threshold": -0.1818, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.909, + "min_threshold": 0.5454, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 62 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.0, + "noise": "minecraft:surface_swamp" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 60 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0 + } + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.0, + "noise": "minecraft:surface_swamp" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:badlands", + "minecraft:eroded_badlands", + "minecraft:wooded_badlands" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 256 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": true, + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": -0.5454, + "min_threshold": -0.909, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.1818, + "min_threshold": -0.1818, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.909, + "min_threshold": 0.5454, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:terracotta" + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": -1, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:red_sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:hole" + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": true, + "offset": -6, + "surface_depth_multiplier": -1 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": true, + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": -1 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:y_above", + "add_stone_depth": false, + "anchor": { + "absolute": 63 + }, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:not", + "invert": { + "type": "minecraft:y_above", + "add_stone_depth": true, + "anchor": { + "absolute": 74 + }, + "surface_depth_multiplier": 1 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:orange_terracotta" + } + } + } + }, + { + "type": "minecraft:bandlands" + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": true, + "offset": -6, + "surface_depth_multiplier": -1 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:white_terracotta" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": -1, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:air" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:temperature" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + ] + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.2, + "min_threshold": 0.0, + "noise": "minecraft:packed_ice" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.025, + "min_threshold": 0.0, + "noise": "minecraft:ice" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.6, + "min_threshold": 0.35, + "noise": "minecraft:powder_snow" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.6, + "min_threshold": 0.35, + "noise": "minecraft:powder_snow" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.0125, + "min_threshold": -0.0125, + "noise": "minecraft:calcite" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.05, + "min_threshold": -0.05, + "noise": "minecraft:gravel" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.21212121212121213, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": -0.06060606060606061, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.24242424242424243, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": -0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:old_growth_pine_taiga", + "minecraft:old_growth_spruce_taiga" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.21212121212121213, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:coarse_dirt" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": -0.11515151515151514, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:podzol", + "Properties": { + "snowy": "false" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:ice_spikes" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mushroom_fields" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mycelium", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:grass_block", + "Properties": { + "snowy": "false" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + ] + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": true, + "offset": -6, + "surface_depth_multiplier": -1 + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_ocean", + "minecraft:deep_frozen_ocean" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:hole" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.2, + "min_threshold": -0.5, + "noise": "minecraft:packed_ice" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:packed_ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.025, + "min_threshold": -0.0625, + "noise": "minecraft:ice" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:ice" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:snowy_slopes" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:steep" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.58, + "min_threshold": 0.45, + "noise": "minecraft:powder_snow" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:snow_block" + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:grove" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.58, + "min_threshold": 0.45, + "noise": "minecraft:powder_snow" + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "add_stone_depth": false, + "offset": 0, + "surface_depth_multiplier": 0 + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:powder_snow" + } + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_peaks" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.0125, + "min_threshold": -0.0125, + "noise": "minecraft:calcite" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:calcite" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:stony_shore" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 0.05, + "min_threshold": -0.05, + "noise": "minecraft:gravel" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_hills" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:dripstone_caves" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + ] + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_savanna" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.21212121212121213, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:windswept_gravelly_hills" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.24242424242424243, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": 0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:noise_threshold", + "max_threshold": 1.7976931348623157E308, + "min_threshold": -0.12121212121212122, + "noise": "minecraft:surface" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:mangrove_swamp" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:mud" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:dirt" + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:beach", + "minecraft:snowy_beach" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 6, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:desert" + ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": true, + "offset": 0, + "secondary_depth_range": 30, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "floor" + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:frozen_peaks", + "minecraft:jagged_peaks" + ] + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ + "minecraft:warm_ocean", + "minecraft:lukewarm_ocean", + "minecraft:deep_lukewarm_ocean" + ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sandstone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:sand" + } + } + ] + } + }, + { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:stone_depth", + "add_surface_depth": false, + "offset": 0, + "secondary_depth_range": 0, + "surface_type": "ceiling" + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:stone" + } + } + }, + { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:gravel" + } + } + ] + } + ] + } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:vertical_gradient", + "false_at_and_above": { + "absolute": 8 + }, + "random_name": "minecraft:deepslate", + "true_at_and_below": { + "absolute": 0 + } + }, + "then_run": { + "type": "minecraft:block", + "result_state": { + "Name": "minecraft:deepslate", + "Properties": { + "axis": "y" + } + } + } + } + ] + } + ] + } +} \ No newline at end of file diff --git a/src/main/java/net/halbear/aotg/AgeoftheGods.java b/src/main/java/net/halbear/aotg/AgeoftheGods.java index 8a2ca75..9b8a7ae 100644 --- a/src/main/java/net/halbear/aotg/AgeoftheGods.java +++ b/src/main/java/net/halbear/aotg/AgeoftheGods.java @@ -1,8 +1,12 @@ package net.halbear.aotg; +import net.halbear.aotg.registries.ModBiomes; +import net.halbear.aotg.utility.DataGenerators.AgeOfTheGodsDataGeneration; import net.minecraft.client.Minecraft; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.neoforged.bus.api.Event; import org.slf4j.Logger; import com.mojang.logging.LogUtils; @@ -34,38 +38,29 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredItem; import net.neoforged.neoforge.registries.DeferredRegister; -import static net.halbear.aotg.registries.ModBiomes.BIOMES; +import static net.halbear.aotg.registries.ModBlocks.*; +import static net.halbear.aotg.registries.ModItems.*; // The value here should match an entry in the META-INF/neoforge.mods.toml file @Mod(AgeoftheGods.MODID) public class AgeoftheGods { - // Define mod id in a common place for everything to reference + public static final String MODID = "ageofthegods"; - // Directly reference a slf4j logger + public static final Logger LOGGER = LogUtils.getLogger(); - // Create a Deferred Register to hold Blocks which will all be registered under the "ageofthegods" namespace - public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(MODID); - // Create a Deferred Register to hold Items which will all be registered under the "ageofthegods" namespace - public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID); - // Create a Deferred Register to hold CreativeModeTabs which will all be registered under the "ageofthegods" namespace + public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); - // Creates a new Block with the id "ageofthegods:example_block", combining the namespace and path - public static final DeferredBlock EXAMPLE_BLOCK = BLOCKS.registerSimpleBlock("example_block", p -> p.mapColor(MapColor.STONE)); - // Creates a new BlockItem with the id "ageofthegods:example_block", combining the namespace and path - public static final DeferredItem EXAMPLE_BLOCK_ITEM = ITEMS.registerSimpleBlockItem("example_block", EXAMPLE_BLOCK); - // Creates a new food item with the id "ageofthegods:example_id", nutrition 1 and saturation 2 - public static final DeferredItem EXAMPLE_ITEM = ITEMS.registerSimpleItem("example_item", p -> p.food(new FoodProperties.Builder() - .alwaysEdible().nutrition(1).saturationModifier(2f).build())); - - // Creates a creative tab with the id "ageofthegods:example_tab" for the example item, that is placed after the combat tab public static final DeferredHolder EXAMPLE_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder() .title(Component.translatable("itemGroup.ageofthegods")) //The language key for the title of your CreativeModeTab .withTabsBefore(CreativeModeTabs.COMBAT) - .icon(() -> EXAMPLE_ITEM.get().getDefaultInstance()) + .icon(() -> LIMESTONE_BLOCK.get().asItem().getDefaultInstance()) .displayItems((parameters, output) -> { - output.accept(EXAMPLE_ITEM.get()); // Add the example item to the tab. For your own tabs, this method is preferred over the event + output.accept(LIMESTONE_ITEM.get()); + output.accept(SHALE_ITEM.get()); + output.accept(SHALE_GRASS_ITEM.get()); + output.accept(LIMESTONE_GRASS_ITEM.get()); }).build()); // The constructor for the mod class is the first code that is run when your mod is loaded. @@ -73,15 +68,12 @@ public class AgeoftheGods { public AgeoftheGods(IEventBus modEventBus, ModContainer modContainer) { // Register the commonSetup method for modloading modEventBus.addListener(this::commonSetup); - // Register the Deferred Register to the mod event bus so blocks get registered BLOCKS.register(modEventBus); // Register the Deferred Register to the mod event bus so items get registered ITEMS.register(modEventBus); // Register the Deferred Register to the mod event bus so tabs get registered CREATIVE_MODE_TABS.register(modEventBus); - BIOMES.register(modEventBus); - // Register ourselves for server and other game events we are interested in. // Note that this is necessary if and only if we want *this* class (AgeoftheGods) to respond directly to events. // Do not add this line if there are no @SubscribeEvent-annotated functions in this class, like onServerStarting() below. @@ -109,9 +101,7 @@ public class AgeoftheGods { // Add the example block item to the building blocks tab private void addCreative(BuildCreativeModeTabContentsEvent event) { - if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) { - event.accept(EXAMPLE_BLOCK_ITEM); - } + } // You can use SubscribeEvent and let the Event Bus discover methods to call diff --git a/src/main/java/net/halbear/aotg/custom/WorldGen/ModNoiseSettings.java b/src/main/java/net/halbear/aotg/custom/WorldGen/ModNoiseSettings.java new file mode 100644 index 0000000..9eb212e --- /dev/null +++ b/src/main/java/net/halbear/aotg/custom/WorldGen/ModNoiseSettings.java @@ -0,0 +1,70 @@ +package net.halbear.aotg.custom.WorldGen; + +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.registries.ModBlocks; +import net.halbear.aotg.utility.DataGenerators.AgeOfTheGodsDataGeneration; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.data.worldgen.SurfaceRuleData; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.Noises; +import net.minecraft.world.level.levelgen.SurfaceRules; +import net.minecraft.world.level.levelgen.placement.CaveSurface; + +public class ModNoiseSettings { + + + public static SurfaceRules.RuleSource makeRules(BootstrapContext context) { + + ResourceKey garrigueKey = + ResourceKey.create(Registries.BIOME, Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "garrigue")); + ResourceKey maquisKey = + ResourceKey.create(Registries.BIOME, Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "maquis_shrubland")); + + SurfaceRules.ConditionSource isGarrigueGrassPatch = SurfaceRules.noiseCondition(Noises.POWDER_SNOW, 0.0); + SurfaceRules.ConditionSource isMaquisGrassPatch = SurfaceRules.noiseCondition(AgeOfTheGodsDataGeneration.TINY_PATCHY_NOISE, 0.0); + + + SurfaceRules.RuleSource garrigueSurface = SurfaceRules.sequence( + SurfaceRules.ifTrue( + SurfaceRules.stoneDepthCheck(0, false, 0, CaveSurface.FLOOR), + SurfaceRules.ifTrue( + isGarrigueGrassPatch, + SurfaceRules.state(ModBlocks.LIMESTONE_GRASS_BLOCK.get().defaultBlockState()) + ) + ), + SurfaceRules.ifTrue( + SurfaceRules.stoneDepthCheck(0, false, 0, CaveSurface.FLOOR), + SurfaceRules.state(ModBlocks.LIMESTONE_BLOCK.get().defaultBlockState()) + ), + SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(4, false, 0, CaveSurface.FLOOR), + SurfaceRules.state(ModBlocks.LIMESTONE_BLOCK.get().defaultBlockState())) + ); + + SurfaceRules.RuleSource maquisSurface = SurfaceRules.sequence( + SurfaceRules.ifTrue( + SurfaceRules.stoneDepthCheck(0, false, 0, CaveSurface.FLOOR), + SurfaceRules.ifTrue( + isMaquisGrassPatch, + SurfaceRules.state(ModBlocks.SHALE_GRASS_BLOCK.get().defaultBlockState()) + ) + ), + SurfaceRules.ifTrue( + SurfaceRules.stoneDepthCheck(0, false, 0, CaveSurface.FLOOR), + SurfaceRules.state(ModBlocks.SHALE_BLOCK.get().defaultBlockState()) + ), + SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(4, false, 0, CaveSurface.FLOOR), + SurfaceRules.state(ModBlocks.SHALE_BLOCK.get().defaultBlockState())) + ); + + return SurfaceRules.sequence( + SurfaceRules.ifTrue(SurfaceRules.isBiome(garrigueKey), garrigueSurface), + SurfaceRules.ifTrue(SurfaceRules.isBiome(maquisKey), maquisSurface), + SurfaceRuleData.overworld() + ); + } +} \ No newline at end of file diff --git a/src/main/java/net/halbear/aotg/custom/blocks/RockCoveredGrassBlock.java b/src/main/java/net/halbear/aotg/custom/blocks/RockCoveredGrassBlock.java new file mode 100644 index 0000000..59a5fc2 --- /dev/null +++ b/src/main/java/net/halbear/aotg/custom/blocks/RockCoveredGrassBlock.java @@ -0,0 +1,20 @@ +package net.halbear.aotg.custom.blocks; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.TriState; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +public class RockCoveredGrassBlock extends Block { + + public RockCoveredGrassBlock(Properties properties) { + super(properties); + } + + @Override + public TriState canSustainPlant(BlockState state, BlockGetter world, BlockPos pos, Direction facing, BlockState plantstate) { + return TriState.TRUE; + } +} diff --git a/src/main/java/net/halbear/aotg/registries/ModBiomes.java b/src/main/java/net/halbear/aotg/registries/ModBiomes.java index 9a9d62f..a2ca9df 100644 --- a/src/main/java/net/halbear/aotg/registries/ModBiomes.java +++ b/src/main/java/net/halbear/aotg/registries/ModBiomes.java @@ -3,15 +3,20 @@ package net.halbear.aotg.registries; import net.halbear.aotg.AgeoftheGods; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeGenerationSettings; +import net.minecraft.world.level.biome.BiomeSpecialEffects; +import net.minecraft.world.level.biome.MobSpawnSettings; import net.neoforged.neoforge.registries.DeferredRegister; import java.util.Collection; import java.util.Optional; public class ModBiomes { - public static final DeferredRegister BIOMES = DeferredRegister.create( - Registries.BIOME, - AgeoftheGods.MODID - ); + + public static final ResourceKey MAQUIS_SHRUBLAND = ResourceKey.create(Registries.BIOME, Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "maquis_shrubland")); + public static final ResourceKey GARRIGUE = ResourceKey.create(Registries.BIOME, Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "garrigue")); } diff --git a/src/main/java/net/halbear/aotg/registries/ModBlocks.java b/src/main/java/net/halbear/aotg/registries/ModBlocks.java index 770707c..9dab1f9 100644 --- a/src/main/java/net/halbear/aotg/registries/ModBlocks.java +++ b/src/main/java/net/halbear/aotg/registries/ModBlocks.java @@ -1,4 +1,60 @@ package net.halbear.aotg.registries; +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.custom.blocks.RockCoveredGrassBlock; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Function; + public class ModBlocks { + public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(AgeoftheGods.MODID); + + public static final DeferredBlock LIMESTONE_BLOCK = RegisterBlock("limestone_block", + properties -> new RockCoveredGrassBlock(properties.strength(1.5f) + .requiresCorrectToolForDrops() + .explosionResistance(6.0f) + .sound(SoundType.STONE) + .lightLevel(state -> 0) + )); + public static final DeferredBlock LIMESTONE_GRASS_BLOCK = RegisterBlock("limestone_grass_block", + properties -> new RockCoveredGrassBlock(properties.strength(1.5f) + .requiresCorrectToolForDrops() + .explosionResistance(6.0f) + .sound(SoundType.GRASS) + .lightLevel(state -> 0) + )); + + public static final DeferredBlock SHALE_BLOCK = RegisterBlock("shale_block", + properties -> new RockCoveredGrassBlock(properties.strength(1.5f) + .requiresCorrectToolForDrops() + .explosionResistance(6.0f) + .sound(SoundType.STONE) + .lightLevel(state -> 0) + )); + public static final DeferredBlock SHALE_GRASS_BLOCK = RegisterBlock("shale_grass_block", + properties -> new RockCoveredGrassBlock(properties.strength(1.5f) + .requiresCorrectToolForDrops() + .explosionResistance(6.0f) + .sound(SoundType.GRASS) + .lightLevel(state -> 0) + )); + + private static DeferredBlock RegisterBlock(String Name, Function function){ + DeferredBlock newBlock = BLOCKS.registerBlock(Name, function); + // RegisterBlockItem(Name, newBlock); + return newBlock; + } + + private static void RegisterBlockItem(String Name, DeferredBlock block){ + ModItems.ITEMS.registerItem(Name, p -> new BlockItem(block.get(), p.useBlockDescriptionPrefix())); + } + } diff --git a/src/main/java/net/halbear/aotg/registries/ModItems.java b/src/main/java/net/halbear/aotg/registries/ModItems.java index 27169aa..2b76d7b 100644 --- a/src/main/java/net/halbear/aotg/registries/ModItems.java +++ b/src/main/java/net/halbear/aotg/registries/ModItems.java @@ -1,4 +1,17 @@ package net.halbear.aotg.registries; +import net.halbear.aotg.AgeoftheGods; +import net.minecraft.world.item.BlockItem; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +import static net.halbear.aotg.registries.ModBlocks.*; + public class ModItems { + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(AgeoftheGods.MODID); + public static final DeferredItem LIMESTONE_ITEM = ITEMS.registerSimpleBlockItem("limestone_block", LIMESTONE_BLOCK); + public static final DeferredItem SHALE_ITEM = ITEMS.registerSimpleBlockItem("shale_block", SHALE_BLOCK); + public static final DeferredItem SHALE_GRASS_ITEM = ITEMS.registerSimpleBlockItem("shale_grass_block", SHALE_GRASS_BLOCK); + public static final DeferredItem LIMESTONE_GRASS_ITEM = ITEMS.registerSimpleBlockItem("limestone_grass_block", LIMESTONE_GRASS_BLOCK); + } diff --git a/src/main/java/net/halbear/aotg/rendering/skybox/DistantSkyObject.java b/src/main/java/net/halbear/aotg/rendering/skybox/DistantSkyObject.java new file mode 100644 index 0000000..c94f45c --- /dev/null +++ b/src/main/java/net/halbear/aotg/rendering/skybox/DistantSkyObject.java @@ -0,0 +1,171 @@ +package net.halbear.aotg.rendering.skybox; + +import com.mojang.blaze3d.buffers.GpuBuffer; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.*; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.api.distmarker.OnlyIn; +import org.joml.Vector3f; +import org.joml.Vector4f; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static net.halbear.aotg.rendering.skybox.SkyBoxRendering.getDayAlpha; +import static net.halbear.aotg.rendering.skybox.SkyBoxRendering.getNightAlpha; + +public class DistantSkyObject { + public static Map SkyObjectMeshMap = new HashMap<>(); + public static Map SkyObjectRegistry = new HashMap<>(); + public static Map> ObjectsMappedToDimension = new HashMap<>(); + public static float DayAlpha = 1.0f; + public static float NightAlpha = 0.0f; + + public static void TickUpdate(ResourceKey Dimension){ + Minecraft minecraft = Minecraft.getInstance(); + long time = minecraft.level != null ? minecraft.level.getOverworldClockTime() % 24000 : 0; + DayAlpha = getDayAlpha(time); + NightAlpha = getNightAlpha(time); + List objects = GetAllObjectsInDimenstion(Dimension); + for(int i = 0; i < objects.size(); i++){ + objects.get(i).TickUpdate(); + } + } + + public static List GetAllObjectsInDimenstion(ResourceKey Dimension){ + List Keys = ObjectsMappedToDimension.get(Dimension); + if(Keys == null || Keys.isEmpty()) return new ArrayList(); + List objectsInDimentsion = new ArrayList<>(); + for(int i = 0; i < Keys.size(); i++){ + if(SkyObjectRegistry.containsKey(Keys.get(i)))objectsInDimentsion.add(SkyObjectRegistry.get(Keys.get(i))); + } + return objectsInDimentsion; + } + + @FunctionalInterface + public interface Action { + void execute(); + } + + private static GpuBuffer CreateMeshBuffer(double AspectRatio, float MeshScale, String ObjectName) { + VertexFormat format = DefaultVertexFormat.POSITION_TEX; + float Multipler = (float)AspectRatio; + try (ByteBufferBuilder byteBufferBuilder = ByteBufferBuilder.exactlySized(4 * format.getVertexSize())) { + BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, format); + bufferBuilder.addVertex( MeshScale * Multipler, 0.0F, MeshScale).setUv(0.0F, 0.0F); + bufferBuilder.addVertex( -MeshScale * Multipler, 0.0F, MeshScale).setUv(1.0F, 0.0F); + bufferBuilder.addVertex( -MeshScale * Multipler, 0.0F, -MeshScale).setUv( 1.0F, 1.0F); + bufferBuilder.addVertex( MeshScale * Multipler, 0.0F, -MeshScale).setUv( 0.0F, 1.0F); + try (MeshData mesh = bufferBuilder.buildOrThrow()) { + return RenderSystem.getDevice().createBuffer(() -> "Age of the Gods " + ObjectName +" Pass", 32, mesh.vertexBuffer()); + } + } + } + + private Identifier textureID; + private double aspectRatio; + private float HAngle; + private float VAngle; + private final String Name; + private float NextHAngleAddition = 0; + private float NextVAngleAddition = 0; + private float PartialHAngle = HAngle; + private float PartialVAngle = VAngle; + private final Vector3f Translate; + private final Vector3f Scale; + private final Vector4f ColourModifiers; + private Action ExecuteOnTick = new Action() { + @Override + public void execute() { + + } + }; + + public DistantSkyObject AddToDimension(ResourceKey Dimension){ + if(!ObjectsMappedToDimension.containsKey(Dimension)){ + ObjectsMappedToDimension.put(Dimension, new ArrayList()); + } + ObjectsMappedToDimension.get(Dimension).add(Name); + return this; + } + public DistantSkyObject RemoveFromDimension(ResourceKey Dimension){ + if(ObjectsMappedToDimension.containsKey(Dimension)){ + ObjectsMappedToDimension.get(Dimension).remove(Name); + } + return this; + } + + public DistantSkyObject TickUpdate(){ + HAngle += NextHAngleAddition; + NextHAngleAddition = 0; + VAngle += NextVAngleAddition; + NextVAngleAddition = 0; + ExecuteOnTick.execute(); + return this; + } + + public DistantSkyObject PartialTick(double PartialTick){ + PartialHAngle = HAngle + (NextHAngleAddition * Math.clamp((float) PartialTick, 0, 1)); + PartialVAngle = VAngle + (NextVAngleAddition * Math.clamp((float) PartialTick, 0, 1)); + return this; + } + + public DistantSkyObject OverrideTickFunction(Action newAction){ + ExecuteOnTick = newAction; + return this; + } + + public DistantSkyObject GenerateBufferIfNonExistant(){ + if(!SkyObjectMeshMap.containsKey(aspectRatio)){ + GpuBuffer newMeshBuffer = CreateMeshBuffer(aspectRatio, 1f, Name); + SkyObjectMeshMap.put(aspectRatio, newMeshBuffer); + } + return this; + } + + public GpuBuffer GetMeshBuffer(){ + GenerateBufferIfNonExistant(); + return SkyObjectMeshMap.get(aspectRatio); + } + + public DistantSkyObject(String Name, Identifier TextureID, double AspectRatio, float HorizontalAngleRad, float VerticalAngleRad, Vector3f Translate, Vector3f Scale, Vector4f ColourModifiers){ + this.Name = Name; + if(!SkyObjectRegistry.containsKey(Name)) SkyObjectRegistry.put(Name, this); + this.Translate = Translate; + this.Scale = Scale; + this.ColourModifiers = ColourModifiers; + this.textureID = TextureID; + this.aspectRatio = AspectRatio; + this.HAngle = HorizontalAngleRad; + this.VAngle = VerticalAngleRad; + PartialHAngle = HAngle; + PartialVAngle = VAngle; + } + public void AddVerticalDegrees(float degrees){ + float Angle = GetVerticalAngleDegrees(); + Angle = (Angle + degrees) % 360; + VAngle = (float)Math.toRadians(Angle); + } + public void AddHorizontalDegrees(float degrees){ + float Angle = GetHorizontalAngleDegrees(); + Angle = (Angle + degrees) % 360; + HAngle = (float)Math.toRadians(Angle); + } + public Vector4f GetColourModifiers(){return ColourModifiers;} + public Vector3f GetScale(){return Scale;} + public Vector3f GetTranslate(){return Translate;} + public String GetName(){return Name;} + public double GetAspectRatio(){return aspectRatio;} + public Identifier GetTextureID(){return textureID;} + public float GetHorizontalAngleDegrees(){return (float)Math.toDegrees(HAngle);} + public float GetHorizontalAngle(){return PartialHAngle;} + public float GetRawHorizontalAngle(){return HAngle;} + public float GetVerticalAngleDegrees(){return (float)Math.toDegrees(VAngle);} + public float GetVerticalAngle(){return PartialVAngle;} + public float GetRawVerticalAngle(){return VAngle;} +} diff --git a/src/main/java/net/halbear/aotg/rendering/skybox/SkyBoxRendering.java b/src/main/java/net/halbear/aotg/rendering/skybox/SkyBoxRendering.java new file mode 100644 index 0000000..f897276 --- /dev/null +++ b/src/main/java/net/halbear/aotg/rendering/skybox/SkyBoxRendering.java @@ -0,0 +1,273 @@ +package net.halbear.aotg.rendering.skybox; + +import com.mojang.blaze3d.buffers.GpuBuffer; +import com.mojang.blaze3d.buffers.GpuBufferSlice; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.blaze3d.systems.RenderPass; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.textures.GpuSampler; +import com.mojang.blaze3d.textures.GpuTextureView; +import com.mojang.blaze3d.vertex.*; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.renderer.state.level.SkyRenderState; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RenderLevelStageEvent; +import org.joml.Matrix4f; +import org.joml.Matrix4fStack; +import org.joml.Vector3f; +import org.joml.Vector4f; + +import java.util.List; +import java.util.OptionalDouble; +import java.util.OptionalInt; + +@EventBusSubscriber(Dist.CLIENT) +public class SkyBoxRendering { + public static RenderPipeline CUSTOM_SKYBOX_PIPELINE; + + private static GpuBuffer sunBuffer; + private static GpuBuffer moonBuffer; + private static GpuBuffer skyboxBuffer; + private static final ResourceKey OVERWORLD = ResourceKey.create(Registries.DIMENSION, Identifier.parse("minecraft:overworld")); + private static final Identifier OVERWORLD_DAY_SKYBOX = Identifier.parse("ageofthegods:textures/skybox/skyboxcubemapday.png"); + private static final Identifier OVERWORLD_DUSK_SKYBOX = Identifier.parse("ageofthegods:textures/skybox/cubemaptransitionskybox.png"); + private static final Identifier OVERWORLD_NIGHT_SKYBOX = Identifier.parse("ageofthegods:textures/skybox/cubemapnightskybox.png"); + private static final Identifier OVERWORLD_SUN = Identifier.parse("ageofthegods:textures/suntexture.png"); + private static final Identifier OVERWORLD_MOON = Identifier.parse("ageofthegods:textures/moontexture.png"); + + static{ + Identifier[] clouds = new Identifier[]{ + Identifier.parse("ageofthegods:textures/cloud2.png"), + Identifier.parse("ageofthegods:textures/cloud3.png"), + Identifier.parse("ageofthegods:textures/smallcloud1.png"), + Identifier.parse("ageofthegods:textures/smallcloud2.png"), + Identifier.parse("ageofthegods:textures/smallcloud3.png"), + }; + double[] aspectRatios = new double[]{1.5625,1,1,1,3.71875}; + DistantSkyObject newObject; + + for(int i = 0; i < 128; i++){ + + int Index = (int)Math.min(clouds.length * Math.random(), clouds.length - 1); + + String name = "Cloud"+ i; + float Speed = 0.05f + 0.1f *(float)Math.random(); + DistantSkyObject.Action TickUpdateAction = new DistantSkyObject.Action() { + @Override + public void execute() { + DistantSkyObject object = DistantSkyObject.SkyObjectRegistry.get(name); + object.AddHorizontalDegrees(Speed); + float DayAlpha = DistantSkyObject.DayAlpha; + float NightAlpha = DistantSkyObject.NightAlpha; + object.GetColourModifiers().set(0.75 + (DayAlpha * 0.25f) - (NightAlpha * 0.65f),0.35 + (DayAlpha * 0.65f) - (NightAlpha * 0.25f),0.25 + (DayAlpha * 0.75f) - (NightAlpha * 0.1f),1); + } + }; + + float Scale = 2f + (float)Math.random() * 12; + + newObject = new DistantSkyObject(name, clouds[Index], aspectRatios[Index], //Object ID, texture, mesh aspect ratio + (float)Math.toRadians(360*Math.random()),(float)Math.toRadians(-130F + (60 * Math.random())), // horizontal angle, vertical angle + new Vector3f(0,100,0),new Vector3f(Scale,-1,Scale),new Vector4f(1,1,1,1)) // translation, scale, colour modifiers + .AddToDimension(OVERWORLD) + .OverrideTickFunction(TickUpdateAction); // this plays on client tick update, thats how the clouds move rn + } + } + + private static void initBuffers() { + if (sunBuffer == null) + sunBuffer = buildCelestialBuffer(SunScale, "Sun"); + if (moonBuffer == null) + moonBuffer = buildCelestialBuffer(MoonScale, "Moon"); + if (skyboxBuffer == null) + skyboxBuffer = buildSkyboxBuffer(); + } + + @SubscribeEvent + public static void renderSky(RenderLevelStageEvent.AfterSky event) { + Minecraft minecraft = Minecraft.getInstance(); + if (minecraft.player == null) + return; + if (minecraft.player.level().dimension() == OVERWORLD) { + renderCustomSkybox(event, OVERWORLD_DAY_SKYBOX,OVERWORLD_NIGHT_SKYBOX, OVERWORLD_DUSK_SKYBOX); + renderCustomSun(event, OVERWORLD_SUN); + renderCustomMoon(event, OVERWORLD_MOON); + } + List SkyObjects = DistantSkyObject.GetAllObjectsInDimenstion(minecraft.player.level().dimension()); + if(!SkyObjects.isEmpty()){ + for (DistantSkyObject object : SkyObjects) { + object.PartialTick(minecraft.getDeltaTracker().getGameTimeDeltaPartialTick(false)); + render2DObjectInSkybox(event, object.GetTextureID(), object.GetName(),object.GetHorizontalAngle(),object.GetVerticalAngle(),object.GetTranslate(),object.GetScale(),object.GetColourModifiers(),object.GetMeshBuffer(), CUSTOM_SKYBOX_PIPELINE); + } + } + } + + private static void addSkyboxFace(BufferBuilder bufferBuilder, float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, + float u4, float v4, int colour) { + bufferBuilder.addVertex(x1, y1, z1).setUv(u1, v1).setColor(colour); + bufferBuilder.addVertex(x2, y2, z2).setUv(u2, v2).setColor(colour); + bufferBuilder.addVertex(x3, y3, z3).setUv(u3, v3).setColor(colour); + bufferBuilder.addVertex(x4, y4, z4).setUv(u4, v4).setColor(colour); + } + + public static void render2DObjectInSkybox(RenderLevelStageEvent.AfterSky event, Identifier textureId, String Name, float HorizontalRotationRad, float VerticalRotationRad, Vector3f Translate, Vector3f Scale, Vector4f colourModulator, GpuBuffer meshBuffer, RenderPipeline pipeline) { + initBuffers(); + Minecraft minecraft = Minecraft.getInstance(); + PoseStack poseStack = event.getPoseStack(); + SkyRenderState state = event.getLevelRenderState().skyRenderState; + poseStack.pushPose(); + poseStack.mulPose(Axis.YP.rotation(HorizontalRotationRad)); + poseStack.mulPose(Axis.XP.rotation(VerticalRotationRad)); + Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushMatrix(); + modelViewStack.mul(poseStack.last().pose()); + modelViewStack.translate(Translate); + modelViewStack.scale(Scale); + GpuBufferSlice dynamicTransforms = RenderSystem.getDynamicUniforms().writeTransform(modelViewStack, colourModulator, new Vector3f(), new Matrix4f()); + GpuTextureView colour = minecraft.getMainRenderTarget().getColorTextureView(); + GpuTextureView depth = minecraft.getMainRenderTarget().getDepthTextureView(); + GpuBuffer indexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).getBuffer(6); + AbstractTexture texture = minecraft.getTextureManager().getTexture(textureId); + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Age of the Gods Skybox Object [" + Name + "]", colour, OptionalInt.empty(), depth, OptionalDouble.empty())) { + renderPass.setPipeline(pipeline); + RenderSystem.bindDefaultUniforms(renderPass); + renderPass.setUniform("DynamicTransforms", dynamicTransforms); + renderPass.bindTexture("Sampler0", texture.getTextureView(), texture.getSampler()); + renderPass.setVertexBuffer(0, meshBuffer); + renderPass.setIndexBuffer(indexBuffer, RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).type()); + renderPass.drawIndexed(0, 0, 6, 1); + } + modelViewStack.popMatrix(); + poseStack.popPose(); + } + + public static void renderCustomSun(RenderLevelStageEvent.AfterSky event, Identifier textureId) { + initBuffers(); + SkyRenderState state = event.getLevelRenderState().skyRenderState; + render2DObjectInSkybox(event, textureId, "Sun",(float)Math.toRadians(-90F),state.sunAngle,new Vector3f(0,100.0f,0),new Vector3f(30.0F,-1.0F,30.0F),new Vector4f(1f,1f,1f,state.rainBrightness), sunBuffer,RenderPipelines.CELESTIAL); + } + + public static void renderCustomMoon(RenderLevelStageEvent.AfterSky event, Identifier textureId) { + initBuffers(); + SkyRenderState state = event.getLevelRenderState().skyRenderState; + render2DObjectInSkybox(event, textureId, "Moon",(float)Math.toRadians(-90F),state.moonAngle,new Vector3f(0,100.0f,0),new Vector3f(30.0F,-1.0F,30.0F),new Vector4f(1f,1f,1f,1f), moonBuffer,RenderPipelines.CELESTIAL); + } + + public static float getNightAlpha(long dayTime) { + long time = dayTime % 24000; + + if (time >= 13000) { + if (time < 15000) return (float) (time-13000) / 2000.0F; + if (time > 22000) return 1.0F - ((float)(time - 22000) / 2000.0F); + return 1.0F; + } + return 0.0F; + } + public static float getDayAlpha(long dayTime) { + long time = dayTime % 24000; + + if (time >= 0 && time < 13000) { + if (time < 2000) return (float) time / 2000.0F; + if (time > 11000) return 1.0F - ((float)(time - 11000) / 2000.0F); + return 1.0F; + } + return 0.0F; + } + + + public static void renderCustomSkybox(RenderLevelStageEvent.AfterSky event, Identifier daytextureId, Identifier nighttextureid, Identifier dusktextureid) { + initBuffers(); + Minecraft minecraft = Minecraft.getInstance(); + long time = minecraft.level != null ? minecraft.level.getOverworldClockTime() % 24000 : 0; + float dayAlpha = getDayAlpha(time); + float nightAlpha = getNightAlpha(time); + PoseStack poseStack = event.getPoseStack(); + Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pushMatrix(); + modelViewStack.mul(poseStack.last().pose()); + GpuTextureView colour = minecraft.getMainRenderTarget().getColorTextureView(); + GpuTextureView depth = minecraft.getMainRenderTarget().getDepthTextureView(); + GpuBuffer indexBuffer = RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).getBuffer(36); + GpuBufferSlice dynamicTransforms = RenderSystem.getDynamicUniforms().writeTransform(modelViewStack, new Vector4f(1.0F, 1.0F, 1.0F, 1.0F), new Vector3f(), new Matrix4f()); + AbstractTexture texture = minecraft.getTextureManager().getTexture(dusktextureid); + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Age of the Gods Dusk Skybox", colour, OptionalInt.empty(), depth, OptionalDouble.empty())) { + renderPass.setPipeline(RenderPipelines.END_SKY); + RenderSystem.bindDefaultUniforms(renderPass); + renderPass.setUniform("DynamicTransforms", dynamicTransforms); + renderPass.bindTexture("Sampler0", texture.getTextureView(), texture.getSampler()); + renderPass.setVertexBuffer(0, skyboxBuffer); + renderPass.setIndexBuffer(indexBuffer, RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).type()); + renderPass.drawIndexed(0, 0, 36, 1); + } + dynamicTransforms = RenderSystem.getDynamicUniforms().writeTransform(modelViewStack, new Vector4f(1.0F, 1.0F, 1.0F, dayAlpha), new Vector3f(), new Matrix4f()); + texture = minecraft.getTextureManager().getTexture(daytextureId); + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Age of the Gods Day Skybox", colour, OptionalInt.empty(), depth, OptionalDouble.empty())) { + renderPass.setPipeline(RenderPipelines.END_SKY); + RenderSystem.bindDefaultUniforms(renderPass); + renderPass.setUniform("DynamicTransforms", dynamicTransforms); + renderPass.bindTexture("Sampler0", texture.getTextureView(), texture.getSampler()); + renderPass.setVertexBuffer(0, skyboxBuffer); + renderPass.setIndexBuffer(indexBuffer, RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).type()); + renderPass.drawIndexed(0, 0, 36, 1); + } + dynamicTransforms = RenderSystem.getDynamicUniforms().writeTransform(modelViewStack, new Vector4f(1.0F, 1.0F, 1.0F, nightAlpha), new Vector3f(), new Matrix4f()); + texture = minecraft.getTextureManager().getTexture(nighttextureid); + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Age of the Gods Night Skybox", colour, OptionalInt.empty(), depth, OptionalDouble.empty())) { + renderPass.setPipeline(RenderPipelines.END_SKY); + RenderSystem.bindDefaultUniforms(renderPass); + renderPass.setUniform("DynamicTransforms", dynamicTransforms); + renderPass.bindTexture("Sampler0", texture.getTextureView(), texture.getSampler()); + renderPass.setVertexBuffer(0, skyboxBuffer); + renderPass.setIndexBuffer(indexBuffer, RenderSystem.getSequentialBuffer(VertexFormat.Mode.QUADS).type()); + renderPass.drawIndexed(0, 0, 36, 1); + } + modelViewStack.popMatrix(); + } + + public static float MoonScale = 0.75f; + public static float SunScale = 0.75f; + + private static GpuBuffer buildCelestialBuffer(float CelestialScale, String CelestialObjectName) { + VertexFormat format = DefaultVertexFormat.POSITION_TEX; + + try (ByteBufferBuilder byteBufferBuilder = ByteBufferBuilder.exactlySized(4 * format.getVertexSize())) { + BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, format); + bufferBuilder.addVertex( -CelestialScale, 0.0F, -CelestialScale).setUv(0.0F, 0.0F); + bufferBuilder.addVertex( CelestialScale, 0.0F, -CelestialScale).setUv(1.0F, 0.0F); + bufferBuilder.addVertex( CelestialScale, 0.0F, CelestialScale).setUv( 1.0F, 1.0F); + bufferBuilder.addVertex( -CelestialScale, 0.0F, CelestialScale).setUv( 0.0F, 1.0F); + try (MeshData mesh = bufferBuilder.buildOrThrow()) { + return RenderSystem.getDevice().createBuffer(() -> "Age of the Gods " + CelestialObjectName +" Pass", 32, mesh.vertexBuffer()); + } + } + } + + + private static GpuBuffer buildSkyboxBuffer() { + VertexFormat format = DefaultVertexFormat.POSITION_TEX_COLOR; + try (ByteBufferBuilder byteBufferBuilder = ByteBufferBuilder.exactlySized(24 * format.getVertexSize())) { + BufferBuilder bufferBuilder = new BufferBuilder(byteBufferBuilder, VertexFormat.Mode.QUADS, format); + float distance = 100.0F; + float size = 100.0F; + int colour = 0xFFFFFFFF; + addSkyboxFace(bufferBuilder, -size, distance, -size, 1.0F / 4.0F, 1.0F / 3.0F, size, distance, -size, 2.0F / 4.0F, 1.0F / 3.0F, size, distance, size, 2.0F / 4.0F, 0.0F, -size, distance, size, 1.0F / 4.0F, 0.0F, colour); + addSkyboxFace(bufferBuilder, -size, -distance, -size, 1.0F / 4.0F, 2.0F / 3.0F, -size, -distance, size, 1.0F / 4.0F, 3.0F / 3.0F, size, -distance, size, 2.0F / 4.0F, 3.0F / 3.0F, size, -distance, -size, 2.0F / 4.0F, 2.0F / 3.0F, colour); + addSkyboxFace(bufferBuilder, -distance, -size, size, 0.0F, 2.0F / 3.0F, -distance, -size, -size, 1.0F / 4.0F, 2.0F / 3.0F, -distance, size, -size, 1.0F / 4.0F, 1.0F / 3.0F, -distance, size, size, 0.0F, 1.0F / 3.0F, colour); + addSkyboxFace(bufferBuilder, -size, -size, -distance, 1.0F / 4.0F, 2.0F / 3.0F, size, -size, -distance, 2.0F / 4.0F, 2.0F / 3.0F, size, size, -distance, 2.0F / 4.0F, 1.0F / 3.0F, -size, size, -distance, 1.0F / 4.0F, 1.0F / 3.0F, colour); + addSkyboxFace(bufferBuilder, distance, -size, -size, 2.0F / 4.0F, 2.0F / 3.0F, distance, -size, size, 3.0F / 4.0F, 2.0F / 3.0F, distance, size, size, 3.0F / 4.0F, 1.0F / 3.0F, distance, size, -size, 2.0F / 4.0F, 1.0F / 3.0F, colour); + addSkyboxFace(bufferBuilder, size, -size, distance, 3.0F / 4.0F, 2.0F / 3.0F, -size, -size, distance, 4.0F / 4.0F, 2.0F / 3.0F, -size, size, distance, 4.0F / 4.0F, 1.0F / 3.0F, size, size, distance, 3.0F / 4.0F, 1.0F / 3.0F, colour); + try (MeshData meshData = bufferBuilder.buildOrThrow()) { + return RenderSystem.getDevice().createBuffer(() -> "Age of the Gods Skybox", 40, meshData.vertexBuffer()); + } + } + } + +} diff --git a/src/main/java/net/halbear/aotg/utility/ClientEventHandler.java b/src/main/java/net/halbear/aotg/utility/ClientEventHandler.java index 83cd77b..522d648 100644 --- a/src/main/java/net/halbear/aotg/utility/ClientEventHandler.java +++ b/src/main/java/net/halbear/aotg/utility/ClientEventHandler.java @@ -1,4 +1,21 @@ package net.halbear.aotg.utility; +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.rendering.skybox.DistantSkyObject; +import net.minecraft.client.Minecraft; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; + +@EventBusSubscriber(modid = AgeoftheGods.MODID, value = Dist.CLIENT) public class ClientEventHandler { + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Pre event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.level != null && mc.player != null) { + DistantSkyObject.TickUpdate(mc.level.dimension()); + } + } } diff --git a/src/main/java/net/halbear/aotg/utility/DataGenerators/AOTGModelProvider.java b/src/main/java/net/halbear/aotg/utility/DataGenerators/AOTGModelProvider.java new file mode 100644 index 0000000..8401359 --- /dev/null +++ b/src/main/java/net/halbear/aotg/utility/DataGenerators/AOTGModelProvider.java @@ -0,0 +1,32 @@ +package net.halbear.aotg.utility.DataGenerators; + +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.registries.ModBlocks; +import net.halbear.aotg.registries.ModItems; +import net.minecraft.client.data.models.BlockModelGenerators; +import net.minecraft.client.data.models.ItemModelGenerators; +import net.minecraft.client.data.models.ModelProvider; +import net.minecraft.client.data.models.MultiVariant; +import net.minecraft.client.data.models.blockstates.MultiVariantGenerator; +import net.minecraft.client.data.models.model.ModelTemplate; +import net.minecraft.client.data.models.model.ModelTemplates; +import net.minecraft.client.data.models.model.TextureMapping; +import net.minecraft.client.data.models.model.TextureSlot; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.block.dispatch.Variant; +import net.minecraft.client.resources.model.sprite.Material; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.Identifier; +import net.minecraft.world.level.block.Block; + +public class AOTGModelProvider extends ModelProvider { + public AOTGModelProvider(PackOutput output){super(output, AgeoftheGods.MODID);} + + @Override + protected void registerModels(BlockModelGenerators BlockModels, ItemModelGenerators itemModels){ + // BlockModels.createTrivialCube(ModBlocks.LIMESTONE_BLOCK.get()); + // BlockModels.createTrivialCube(ModBlocks.LIMESTONE_GRASS_BLOCK.get()); + // BlockModels.createTrivialCube(ModBlocks.SHALE_BLOCK.get()); + // BlockModels.createTrivialCube(ModBlocks.SHALE_GRASS_BLOCK.get()); + } +} diff --git a/src/main/java/net/halbear/aotg/utility/DataGenerators/AgeOfTheGodsDataGeneration.java b/src/main/java/net/halbear/aotg/utility/DataGenerators/AgeOfTheGodsDataGeneration.java new file mode 100644 index 0000000..08309e1 --- /dev/null +++ b/src/main/java/net/halbear/aotg/utility/DataGenerators/AgeOfTheGodsDataGeneration.java @@ -0,0 +1,81 @@ +package net.halbear.aotg.utility.DataGenerators; + +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.custom.WorldGen.ModNoiseSettings; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.RegistrySetBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; +import net.minecraft.resources.Identifier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.levelgen.DensityFunction; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.synth.NormalNoise; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; +import net.neoforged.neoforge.data.event.GatherDataEvent; + +import java.util.Set; + +import static net.halbear.aotg.AgeoftheGods.LOGGER; +import static net.halbear.aotg.AgeoftheGods.MODID; + +@EventBusSubscriber(modid = MODID) +public class AgeOfTheGodsDataGeneration { + public static final ResourceKey TINY_PATCHY_NOISE = + ResourceKey.create(Registries.NOISE, Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "tiny_patchy_noise")); + + @SubscribeEvent + public static void gatherData(GatherDataEvent.Client event) { + LOGGER.info("gatherData event"); + + RegistrySetBuilder builder = new RegistrySetBuilder(). + add(Registries.NOISE, context -> { + context.register(TINY_PATCHY_NOISE, new net.minecraft.world.level.levelgen.synth.NormalNoise.NoiseParameters( + 0, + 1.0, 1.0, 1.0 + )); + }).add(Registries.NOISE_SETTINGS, context -> { + HolderGetter densityFunctions = context.lookup(Registries.DENSITY_FUNCTION); + HolderGetter noiseParameters = context.lookup(Registries.NOISE); + + NoiseGeneratorSettings vanillaSettings = NoiseGeneratorSettings.overworld(context, false, false); + + context.register( + ResourceKey.create(Registries.NOISE_SETTINGS, Identifier.withDefaultNamespace("overworld")), + new NoiseGeneratorSettings( + vanillaSettings.noiseSettings(), + Blocks.STONE.defaultBlockState(), + Blocks.WATER.defaultBlockState(), + vanillaSettings.noiseRouter(), + ModNoiseSettings.makeRules(context), + vanillaSettings.spawnTarget(), + 63, + false, + true, + true, + false + ) + ); + }); + LOGGER.info("World Gen something or other"); + event.createProvider(output -> new DatapackBuiltinEntriesProvider( + output, + event.getLookupProvider(), + builder, + Set.of("minecraft", AgeoftheGods.MODID) + )); + } + + @SubscribeEvent + public static void GatherClientData(GatherDataEvent.Client event){ + LOGGER.info("GatherClientData event"); + DataGenerator generator = event.getGenerator(); + PackOutput output = generator.getPackOutput(); + + // generator.addProvider(true, new AOTGModelProvider(output)); + } +} diff --git a/src/main/java/net/halbear/aotg/utility/Mixin/CameraMixin.java b/src/main/java/net/halbear/aotg/utility/Mixin/CameraMixin.java new file mode 100644 index 0000000..434b304 --- /dev/null +++ b/src/main/java/net/halbear/aotg/utility/Mixin/CameraMixin.java @@ -0,0 +1,26 @@ +package net.halbear.aotg.utility.Mixin; + +import net.minecraft.client.Camera; +import net.minecraft.client.CameraType; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import org.joml.Vector3f; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + + +@Mixin(Camera.class) +public abstract class CameraMixin { + //@Inject(method = {"update"}, at = @At(value = "TAIL"),cancellable = true, remap = true) + //private void update(DeltaTracker deltaTracker, CallbackInfo ci){ +// + //} + //@Shadow(aliases = {"move", "func_216782_a"}) + //protected abstract void movePosition(double p_216782_1_, double p_216782_3_, double p_216782_5_); + // @Shadow(aliases = {"getMaxZoom", "func_216779_a"}) protected abstract double calcCameraDistance(double p_216779_1_); +} \ No newline at end of file diff --git a/src/main/java/net/halbear/aotg/utility/ModEventHandler.java b/src/main/java/net/halbear/aotg/utility/ModEventHandler.java index 25bfd16..47bcdeb 100644 --- a/src/main/java/net/halbear/aotg/utility/ModEventHandler.java +++ b/src/main/java/net/halbear/aotg/utility/ModEventHandler.java @@ -1,4 +1,100 @@ package net.halbear.aotg.utility; +import com.mojang.blaze3d.pipeline.BlendFunction; +import com.mojang.blaze3d.pipeline.ColorTargetState; +import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.serialization.MapCodec; +import net.halbear.aotg.AgeoftheGods; +import net.halbear.aotg.registries.ModBlocks; +import net.halbear.aotg.rendering.skybox.SkyBoxRendering; +import net.minecraft.client.color.block.BlockTintSource; +import net.minecraft.client.color.item.GrassColorSource; +import net.minecraft.client.color.item.ItemTintSource; +import net.minecraft.client.color.item.ItemTintSources; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.BiomeColors; +import net.minecraft.client.renderer.RenderPipelines; +import net.minecraft.client.renderer.block.BlockAndTintGetter; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.Identifier; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.GrassColor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.EventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; +import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent.BlockTintSources; +import net.neoforged.neoforge.client.event.RegisterRenderPipelinesEvent; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.List; + +import static net.minecraft.client.renderer.RenderPipelines.MATRICES_PROJECTION_SNIPPET; + +@EventBusSubscriber(modid = AgeoftheGods.MODID, value = Dist.CLIENT) public class ModEventHandler { -} + + @SubscribeEvent + public static void onRegisterPipelines(RegisterRenderPipelinesEvent event) { + SkyBoxRendering.CUSTOM_SKYBOX_PIPELINE = RenderPipeline.builder(new RenderPipeline.Snippet[]{MATRICES_PROJECTION_SNIPPET}) + .withLocation(Identifier.fromNamespaceAndPath(AgeoftheGods.MODID, "pipeline/custom_skybox")) + .withVertexShader(Identifier.withDefaultNamespace("core/position_tex")) + .withFragmentShader(Identifier.withDefaultNamespace("core/position_tex")) + .withSampler("Sampler0") + .withCull(false) + .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)).withVertexFormat(DefaultVertexFormat.POSITION_TEX, VertexFormat.Mode.QUADS).build(); + + event.registerPipeline(SkyBoxRendering.CUSTOM_SKYBOX_PIPELINE); + System.out.println("Age of the Gods pipeline Registered"); + } + + public static void BlockTint(RegisterColorHandlersEvent.BlockTintSources event, Block block) { + event.register( + List.of(new BlockTintSource() { + @Override + public int color(BlockState state) { + return 0xFFFFFFFF; + } + + @Override + public int colorInWorld(BlockState state, BlockAndTintGetter level, BlockPos pos) { + return BiomeColors.getAverageGrassColor(level, pos); + } + }), + block + ); + } + + @SubscribeEvent + public static void registerBlockTint(RegisterColorHandlersEvent.BlockTintSources event) { + BlockTint(event, ModBlocks.LIMESTONE_GRASS_BLOCK.get()); + BlockTint(event, ModBlocks.SHALE_GRASS_BLOCK.get()); + } + + @SubscribeEvent + public static void registerItemTint(RegisterColorHandlersEvent.ItemTintSources event) { + event.register( ModBlocks.LIMESTONE_GRASS_BLOCK.getId(), + (new CustomItemGrassTint().type()) ); + event.register( ModBlocks.SHALE_GRASS_BLOCK.getId(), + (new CustomItemGrassTint().type()) ); + } + + private static class CustomItemGrassTint implements ItemTintSource { + @Override + public int calculate(ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity) { + return GrassColor.get(0.5D, 1.0D); // Classic vanilla inventory grass green + } + + @Override + public @NotNull MapCodec type() { + return MapCodec.unit(this); + } + } +} \ No newline at end of file diff --git a/src/main/resources/ageofthegods.mixins.json b/src/main/resources/ageofthegods.mixins.json index 1da9ceb..be48ff8 100644 --- a/src/main/resources/ageofthegods.mixins.json +++ b/src/main/resources/ageofthegods.mixins.json @@ -1,6 +1,6 @@ { "required": true, - "package": "net.halbear.aotg.mixin", + "package": "net.halbear.aotg.utility.Mixin", "compatibilityLevel": "JAVA_25", "mixins": [], "injectors": { diff --git a/src/main/resources/aotg_overworld.json b/src/main/resources/aotg_overworld.json new file mode 100644 index 0000000..06d9dc8 --- /dev/null +++ b/src/main/resources/aotg_overworld.json @@ -0,0 +1,103 @@ +{ + "sea_level": 128, + "disable_mob_generation": false, + "aquifers_enabled": true, + "ore_veins_enabled": true, + "legacy_random_source": false, + "default_block": { "Name": "minecraft:stone" }, + "default_fluid": { "Name": "minecraft:water", "Properties": { "level": "0" } }, + "noise": { + "min_y": -64, + "height": 512, + "size_horizontal": 1, + "size_vertical": 2 + }, + "noise_router": { + "barrier": 0.0, + "fluid_level_floodedness": 0.0, + "fluid_level_spread": 0.0, + "lava": 0.0, + "temperature": "minecraft:overworld/temperature", + "vegetation": "minecraft:overworld/vegetation", + "continents": "minecraft:overworld/continents", + "erosion": "minecraft:overworld/erosion", + "depth": "minecraft:overworld/depth", + "ridges": "minecraft:overworld/ridges", + "initial_density_without_jaggedness": "minecraft:overworld/initial_density_without_jaggedness", + "final_density": "minecraft:overworld/final_density", + "vein_toggle": 0.0, + "vein_ridged": 0.0, + "vein_gap": 0.0, + "preliminary_surface_level": "minecraft:overworld/preliminary_surface_level" + }, + "spawn_target": [], + "surface_rule": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ "ageofthegods:garrigue" ] + }, + "then_run": { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:y_above", "anchor": { "absolute": 129 }, "surface_depth_multiplier": 0, "add_stone_depth": false }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:stone_depth", "offset": 0, "add_surface_depth": false, "secondary_depth_range": 0, "surface_type": "floor" }, + "then_run": { "type": "minecraft:block", "result_state": { "Name": "ageofthegods:limestone_grass_block" } } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "ageofthegods:limestone_block" } + } + ] + } + } + }, + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:biome", + "biome_is": [ "ageofthegods:maquis_shrubland" ] + }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:stone_depth", "offset": 0, "add_surface_depth": false, "secondary_depth_range": 0, "surface_type": "floor" }, + "then_run": { "type": "minecraft:block", "result_state": { "Name": "ageofthegods:shale_grass_block" } } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "ageofthegods:shale_block" } + } + ] + } + }, + { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:y_above", "anchor": { "absolute": 129 }, "surface_depth_multiplier": 0, "add_stone_depth": false }, + "then_run": { + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { "type": "minecraft:stone_depth", "offset": 0, "add_surface_depth": false, "secondary_depth_range": 0, "surface_type": "floor" }, + "then_run": { "type": "minecraft:block", "result_state": { "Name": "minecraft:grass_block" } } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:dirt" } + } + ] + } + } + ] + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/blockstates/limestone_block.json b/src/main/resources/assets/ageofthegods/blockstates/limestone_block.json new file mode 100644 index 0000000..a9a75d5 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/blockstates/limestone_block.json @@ -0,0 +1,9 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/limestone/limestone1", "weight": 3 + } + ] + } +} diff --git a/src/main/resources/assets/ageofthegods/blockstates/limestone_grass_block.json b/src/main/resources/assets/ageofthegods/blockstates/limestone_grass_block.json new file mode 100644 index 0000000..c413d32 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/blockstates/limestone_grass_block.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/limestone/limestone_grass", "weight": 3 + }, + { + "model": "ageofthegods:block/limestone/limestone_grass2", "weight": 3 + }, + { + "model": "ageofthegods:block/limestone/limestone_grass3", "weight": 3 + } + ] + } +} diff --git a/src/main/resources/assets/ageofthegods/blockstates/shale_block.json b/src/main/resources/assets/ageofthegods/blockstates/shale_block.json new file mode 100644 index 0000000..248c81e --- /dev/null +++ b/src/main/resources/assets/ageofthegods/blockstates/shale_block.json @@ -0,0 +1,12 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/shale/shale1", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale2", "weight": 1 + } + ] + } +} diff --git a/src/main/resources/assets/ageofthegods/blockstates/shale_grass_block.json b/src/main/resources/assets/ageofthegods/blockstates/shale_grass_block.json new file mode 100644 index 0000000..2887afb --- /dev/null +++ b/src/main/resources/assets/ageofthegods/blockstates/shale_grass_block.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "ageofthegods:block/shale/shale_grass", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale_grass2", "weight": 1 + }, + { + "model": "ageofthegods:block/shale/shale_grass3", "weight": 1 + } + ] + } +} diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone1.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone1.json new file mode 100644 index 0000000..02b7fe1 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "ageofthegods:block/limestone/limestone" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone2.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone2.json new file mode 100644 index 0000000..7b22a94 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "ageofthegods:block/limestone/limestone2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone3.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone3.json new file mode 100644 index 0000000..87700ab --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "ageofthegods:block/limestone/limestone3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass.json new file mode 100644 index 0000000..1d259e3 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/limestone/limestonegrassside", + "bottom": "ageofthegods:block/limestone/limestone", + "top": "ageofthegods:block/grass/grasstopgrey", + "side": "ageofthegods:block/limestone/limestonegrassside", + "overlay": "ageofthegods:block/grass/grasssideoverlay" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass2.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass2.json new file mode 100644 index 0000000..4c7fda4 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass2.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/limestone/limestonegrassside", + "bottom": "ageofthegods:block/limestone/limestone", + "top": "ageofthegods:block/grass/grasstopgrey2", + "side": "ageofthegods:block/limestone/limestonegrassside", + "overlay": "ageofthegods:block/grass/grasssideoverlay" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass3.json b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass3.json new file mode 100644 index 0000000..652a99e --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/limestone/limestone_grass3.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/limestone/limestonegrassside", + "bottom": "ageofthegods:block/limestone/limestone", + "top": "ageofthegods:block/grass/grasstopgrey3", + "side": "ageofthegods:block/limestone/limestonegrassside", + "overlay": "ageofthegods:block/grass/grasssideoverlay" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/shale/shale1.json b/src/main/resources/assets/ageofthegods/models/block/shale/shale1.json new file mode 100644 index 0000000..84cbacd --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/shale/shale1.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "ageofthegods:block/shale/shaletop1", + "up": "ageofthegods:block/shale/shaletop1", + "north": "ageofthegods:block/shale/shaleside", + "east": "ageofthegods:block/shale/shaleside", + "south": "ageofthegods:block/shale/shaleside", + "west": "ageofthegods:block/shale/shaleside", + "particle": "ageofthegods:block/shale/shaleside" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/shale/shale2.json b/src/main/resources/assets/ageofthegods/models/block/shale/shale2.json new file mode 100644 index 0000000..36549ff --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/shale/shale2.json @@ -0,0 +1,12 @@ +{ + "parent": "block/cube", + "textures": { + "down": "ageofthegods:block/shale/shaletop2", + "up": "ageofthegods:block/shale/shaletop2", + "north": "ageofthegods:block/shale/shaleside", + "east": "ageofthegods:block/shale/shaleside", + "south": "ageofthegods:block/shale/shaleside", + "west": "ageofthegods:block/shale/shaleside", + "particle": "ageofthegods:block/shale/shaleside" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass.json b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass.json new file mode 100644 index 0000000..6625bf5 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/shale/shalegrassside", + "bottom": "ageofthegods:block/shale/shaletop1", + "top": "ageofthegods:block/grass/grasstopgrey", + "side": "ageofthegods:block/shale/shalegrassside", + "overlay": "ageofthegods:block/grass/grasssideoverlay" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass2.json b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass2.json new file mode 100644 index 0000000..73b0e3d --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass2.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/shale/shalegrassside", + "bottom": "ageofthegods:block/shale/shaletop1", + "top": "ageofthegods:block/grass/grasstopgrey2", + "side": "ageofthegods:block/shale/shalegrassside", + "overlay": "ageofthegods:block/grass/grasssideoverlay" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass3.json b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass3.json new file mode 100644 index 0000000..7a96223 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/block/shale/shale_grass3.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:block/block", + "textures": { + "particle": "ageofthegods:block/shale/shalegrassside", + "bottom": "ageofthegods:block/shale/shaletop1", + "top": "ageofthegods:block/grass/grasstopgrey3", + "side": "ageofthegods:block/shale/shalegrassside", + "overlay": "ageofthegods:block/shale/shalegrassoverlayl" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "down": { "texture": "#bottom", "cullface": "down" }, + "up": { "texture": "#top", "cullface": "up", "tintindex": 0 }, + "north": { "texture": "#side", "cullface": "north" }, + "south": { "texture": "#side", "cullface": "south" }, + "west": { "texture": "#side", "cullface": "west" }, + "east": { "texture": "#side", "cullface": "east" } + } + }, + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": { "texture": "#overlay", "cullface": "north", "tintindex": 0 }, + "south": { "texture": "#overlay", "cullface": "south", "tintindex": 0 }, + "west": { "texture": "#overlay", "cullface": "west", "tintindex": 0 }, + "east": { "texture": "#overlay", "cullface": "east", "tintindex": 0 } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/item/limestone_block.json b/src/main/resources/assets/ageofthegods/models/item/limestone_block.json new file mode 100644 index 0000000..8acfd78 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/item/limestone_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ageofthegods:block/limestone_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/models/item/shale_block.json b/src/main/resources/assets/ageofthegods/models/item/shale_block.json new file mode 100644 index 0000000..1e52824 --- /dev/null +++ b/src/main/resources/assets/ageofthegods/models/item/shale_block.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "ageofthegods:block/shale_block" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeBack.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeBack.png new file mode 100644 index 0000000..90c4e67 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeBack.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeDown.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeDown.png new file mode 100644 index 0000000..e525434 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeDown.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeFront.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeFront.png new file mode 100644 index 0000000..90c4e67 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeFront.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeLeft.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeLeft.png new file mode 100644 index 0000000..90c4e67 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeLeft.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeRight.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeRight.png new file mode 100644 index 0000000..90c4e67 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeRight.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeUp.png b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeUp.png new file mode 100644 index 0000000..e74c550 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxExtraLargeUp.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeBack.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeBack.png new file mode 100644 index 0000000..655cd32 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeBack.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeDown.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeDown.png new file mode 100644 index 0000000..c1f6fd5 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeDown.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeFront.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeFront.png new file mode 100644 index 0000000..48eab2f Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeFront.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeLeft.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeLeft.png new file mode 100644 index 0000000..f02b8de Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeLeft.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeRight.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeRight.png new file mode 100644 index 0000000..1ef6f7b Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeRight.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeUp.png b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeUp.png new file mode 100644 index 0000000..e9e57f7 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/SkyboxNightExtraLargeUp.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoil.png b/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoil.png new file mode 100644 index 0000000..41ce647 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoil.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoilgrassside.png b/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoilgrassside.png new file mode 100644 index 0000000..ac59613 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/drysoil/drysoilgrassside.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasssideoverlay.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasssideoverlay.png new file mode 100644 index 0000000..c3ca66b Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasssideoverlay.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop1.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop1.png new file mode 100644 index 0000000..5e609fe Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop1.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop2.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop2.png new file mode 100644 index 0000000..c4426b1 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop3.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop3.png new file mode 100644 index 0000000..5cfe8e3 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop3.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop4.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop4.png new file mode 100644 index 0000000..af0ddab Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop4.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop5.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop5.png new file mode 100644 index 0000000..5a1b6dd Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstop5.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey.png new file mode 100644 index 0000000..3acf54d Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey2.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey2.png new file mode 100644 index 0000000..e0af3fc Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey3.png b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey3.png new file mode 100644 index 0000000..f6dfa10 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/grass/grasstopgrey3.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone.png b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone.png new file mode 100644 index 0000000..690e519 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone2.png b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone2.png new file mode 100644 index 0000000..97468ff Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone3.png b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone3.png new file mode 100644 index 0000000..f1eea60 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestone3.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/limestone/limestonegrassside.png b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestonegrassside.png new file mode 100644 index 0000000..0d91b91 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/limestone/limestonegrassside.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassoverlayl.png b/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassoverlayl.png new file mode 100644 index 0000000..3861e35 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassoverlayl.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassside.png b/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassside.png new file mode 100644 index 0000000..92c3f60 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/shale/shalegrassside.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/shale/shaleside.png b/src/main/resources/assets/ageofthegods/textures/block/shale/shaleside.png new file mode 100644 index 0000000..0988757 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/shale/shaleside.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop1.png b/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop1.png new file mode 100644 index 0000000..38688be Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop1.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop2.png b/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop2.png new file mode 100644 index 0000000..f7ec07c Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/block/shale/shaletop2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/cloud2.png b/src/main/resources/assets/ageofthegods/textures/cloud2.png new file mode 100644 index 0000000..184c65d Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/cloud2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/cloud3.png b/src/main/resources/assets/ageofthegods/textures/cloud3.png new file mode 100644 index 0000000..1df1496 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/cloud3.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/moontexture.png b/src/main/resources/assets/ageofthegods/textures/moontexture.png new file mode 100644 index 0000000..75eca3a Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/moontexture.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/skybox/cubemapnightskybox.png b/src/main/resources/assets/ageofthegods/textures/skybox/cubemapnightskybox.png new file mode 100644 index 0000000..37a9c2a Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/skybox/cubemapnightskybox.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/skybox/cubemaptransitionskybox.png b/src/main/resources/assets/ageofthegods/textures/skybox/cubemaptransitionskybox.png new file mode 100644 index 0000000..b4fc9ec Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/skybox/cubemaptransitionskybox.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/skybox/skyboxcubemapday.png b/src/main/resources/assets/ageofthegods/textures/skybox/skyboxcubemapday.png new file mode 100644 index 0000000..bd774ce Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/skybox/skyboxcubemapday.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/smallcloud1.png b/src/main/resources/assets/ageofthegods/textures/smallcloud1.png new file mode 100644 index 0000000..d5be829 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/smallcloud1.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/smallcloud2.png b/src/main/resources/assets/ageofthegods/textures/smallcloud2.png new file mode 100644 index 0000000..a8ea74e Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/smallcloud2.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/smallcloud3.png b/src/main/resources/assets/ageofthegods/textures/smallcloud3.png new file mode 100644 index 0000000..ff2e6f3 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/smallcloud3.png differ diff --git a/src/main/resources/assets/ageofthegods/textures/suntexture.png b/src/main/resources/assets/ageofthegods/textures/suntexture.png new file mode 100644 index 0000000..d57f308 Binary files /dev/null and b/src/main/resources/assets/ageofthegods/textures/suntexture.png differ diff --git a/src/main/resources/data/ageofthegods/worldgen/biome/garrigue.json b/src/main/resources/data/ageofthegods/worldgen/biome/garrigue.json new file mode 100644 index 0000000..83dc63d --- /dev/null +++ b/src/main/resources/data/ageofthegods/worldgen/biome/garrigue.json @@ -0,0 +1,64 @@ +{ + "has_precipitation": true, + "temperature": 0.7, + "downfall": 0.8, + "temperature_modifier": "none", + "effects": { + "water_color": 4311792, + "grass_color": 13162858, + "foliage_color": 9226315, + "ambient_loop_sound": "minecraft:ambient.cave", + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "attributes": { + "minecraft:visual/sky_color": 8906751, + "minecraft:visual/fog_color": 16777215, + "minecraft:visual/water_fog_color": 329011 + }, + "carvers": [ + "minecraft:cave", + "minecraft:canyon" + ], + "features": [ + [], + [ "minecraft:lake_lava_underground", "minecraft:lake_lava_surface" ], + [ "minecraft:amethyst_geode" ], + [], + [], + [], + [ + "minecraft:ore_dirt", + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_diamond" + ], + [], + [], + [ "minecraft:patch_grass_plain", "minecraft:brown_mushroom_normal" ], + [ ] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [ + { "type": "minecraft:spider", "weight": 100, "minCount": 4, "maxCount": 4 }, + { "type": "minecraft:zombie", "weight": 95, "minCount": 4, "maxCount": 4 } + ], + "creature": [ + { "type": "minecraft:wolf", "weight": 5, "minCount": 4, "maxCount": 4 } + ], + "ambient": [], + "water_creature": [], + "underground_water_creature": [], + "water_ambient": [], + "axolotls": [] + }, + "spawn_costs": {} +} \ No newline at end of file diff --git a/src/main/resources/data/ageofthegods/worldgen/biome/maquis_shrubland.json b/src/main/resources/data/ageofthegods/worldgen/biome/maquis_shrubland.json new file mode 100644 index 0000000..28b09e9 --- /dev/null +++ b/src/main/resources/data/ageofthegods/worldgen/biome/maquis_shrubland.json @@ -0,0 +1,67 @@ +{ + "has_precipitation": true, + "temperature": 0.3, + "downfall": 0.8, + "temperature_modifier": "none", + "effects": { + "sky_color": 8906751, + "fog_color": 3060735, + "water_color": 4311792, + "water_fog_color": 4311792, + "grass_color": 16444553, + "foliage_color": 9429794, + "ambient_loop_sound": "minecraft:ambient.cave", + "mood_sound": { + "sound": "minecraft:ambient.cave", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "attributes": { + "minecraft:visual/sky_color": 8906751, + "minecraft:visual/fog_color": 16777215, + "minecraft:visual/water_fog_color": 329011 + }, + "carvers": [ + "minecraft:cave", + "minecraft:canyon" + ], + "features": [ + [], + [ "minecraft:lake_lava_underground", "minecraft:lake_lava_surface" ], + [ "minecraft:amethyst_geode" ], + [], + [], + [], + [ + "minecraft:ore_dirt", + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_diamond" + ], + [], + [], + [ "minecraft:patch_grass_plain", "minecraft:brown_mushroom_normal" ], + [ ] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [ + { "type": "minecraft:spider", "weight": 100, "minCount": 4, "maxCount": 4 }, + { "type": "minecraft:zombie", "weight": 95, "minCount": 4, "maxCount": 4 } + ], + "creature": [ + { "type": "minecraft:wolf", "weight": 5, "minCount": 4, "maxCount": 4 } + ], + "ambient": [], + "water_creature": [], + "underground_water_creature": [], + "water_ambient": [], + "axolotls": [] + }, + "spawn_costs": {} +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/dimension/overworld.json b/src/main/resources/data/minecraft/dimension/overworld.json new file mode 100644 index 0000000..5a4b3b5 --- /dev/null +++ b/src/main/resources/data/minecraft/dimension/overworld.json @@ -0,0 +1,36 @@ +{ + "type": "minecraft:overworld", + "generator": { + "type": "minecraft:noise", + "settings": "minecraft:overworld", + "biome_source": { + "type": "minecraft:multi_noise", + "biomes": [ + { + "biome": "ageofthegods:garrigue", + "parameters": { + "temperature": [-1.0, -0.1], + "humidity": [-1.0, 1.0], + "continentalness": [-1.2, 1.0], + "erosion": [-1.0, 1.0], + "weirdness": [-1.0, 1.0], + "depth": 0.0, + "offset": 0.0 + } + }, + { + "biome": "ageofthegods:maquis_shrubland", + "parameters": { + "temperature": [0.1, 1.0], + "humidity": [-1.0, 1.0], + "continentalness": [-1.2, 1.0], + "erosion": [-1.0, 1.0], + "weirdness": [-1.0, 1.0], + "depth": 0.0, + "offset": 0.0 + } + } + ] + } + } +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/dimension_type/overworld.json b/src/main/resources/data/minecraft/dimension_type/overworld.json new file mode 100644 index 0000000..d6063bb --- /dev/null +++ b/src/main/resources/data/minecraft/dimension_type/overworld.json @@ -0,0 +1,43 @@ +{ + "attributes": { + "minecraft:audio/background_music": { + "creative": { + "max_delay": 24000, + "min_delay": 12000, + "sound": "minecraft:music.creative" + }, + "default": { + "max_delay": 24000, + "min_delay": 12000, + "sound": "minecraft:music.game" + } + }, + "minecraft:gameplay/eyeblossom_open": true, + "minecraft:gameplay/creaking_active": true, + "minecraft:visual/cloud_height": 240, + "minecraft:visual/cloud_color": "#ccffffff", + "minecraft:visual/ambient_light_color": "#0a0a0a", + "minecraft:gameplay/can_start_raid": true, + "minecraft:gameplay/respawn_anchor_works": false + }, + "default_clock": "minecraft:overworld", + "timelines": "#minecraft:in_overworld", + "ambient_light": 0.0, + "bed_works": true, + "coordinate_scale": 1.0, + "effects": "minecraft:overworld", + "has_ceiling": false, + "has_raids": true, + "has_skylight": true, + "height": 512, + "infiniburn": "#minecraft:infiniburn_overworld", + "logical_height": 512, + "min_y": -64, + "monster_spawn_light_level": 0, + "monster_spawn_block_light_limit": 0, + "natural": true, + "piglin_safe": false, + "respawn_anchor_works": false, + "ultrawarm": false, + "has_ender_dragon_fight": false +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/block/dirt.json b/src/main/resources/data/minecraft/tags/block/dirt.json new file mode 100644 index 0000000..28f91e2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/block/dirt.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "ageofthegods:limestone_grass_block", + "ageofthegods:limestone_block", + "ageofthegods:shale_grass_block", + "ageofthegods:shale_block" + ] +} \ No newline at end of file diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta new file mode 100644 index 0000000..74a4565 --- /dev/null +++ b/src/main/resources/pack.mcmeta @@ -0,0 +1,7 @@ +{ + "pack": { + "min_format": 100.0, + "max_format": 101.1, + "description": "" + } +} \ No newline at end of file