diff --git a/build.gradle b/build.gradle index 355fd5d158..906f74f0f9 100644 --- a/build.gradle +++ b/build.gradle @@ -66,6 +66,7 @@ dependencies { // compileOnly "mezz.jei:jei-${project.mc_version}-common-api:${project.jei_version}" // compileOnly "mezz.jei:jei-${project.mc_version}-neoforge-api:${project.jei_version}" // runtimeOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")) + implementation "curse.maven:worldedit-225608:5564371" jarJar("com.aetherteam.nitrogen:nitrogen_internals:${project.nitrogen_version}") { jarJar.ranged(it, "[${project.nitrogen_version},)") diff --git a/src/generated/resources/assets/aether_ii/lang/en_us.json b/src/generated/resources/assets/aether_ii/lang/en_us.json index 863da8ebfa..1ba015101a 100644 --- a/src/generated/resources/assets/aether_ii/lang/en_us.json +++ b/src/generated/resources/assets/aether_ii/lang/en_us.json @@ -826,6 +826,8 @@ "menu.aether_ii.artisans_bench": "Artisan's Bench", "menu.aether_ii.holystone_furnace": "Holystone Furnace", "pack.aether_ii.mod.description": "Aether II Resources", + "structure.aether_ii.camp_highfields": "Camp Highfields", + "structure.aether_ii.infected_guardian_tree": "Infected Guardian Tree", "structure.aether_ii.outpost": "Outpost", "subtitles.aether_ii.block.aercloud.blue_aercloud_bounce": "Blue Aercloud bounces", "subtitles.aether_ii.block.aether_portal.ambient": "Aether Portal whooshes", diff --git a/src/generated/resources/data/aether_ii/tags/block/infected_guardian_tree_replaceables.json b/src/generated/resources/data/aether_ii/tags/block/infected_guardian_tree_replaceables.json new file mode 100644 index 0000000000..8f72f5039b --- /dev/null +++ b/src/generated/resources/data/aether_ii/tags/block/infected_guardian_tree_replaceables.json @@ -0,0 +1,7 @@ +{ + "values": [ + "aether_ii:red_cloudwool", + "aether_ii:blue_cloudwool", + "minecraft:spawner" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/infected_guardian_tree.json b/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/infected_guardian_tree.json new file mode 100644 index 0000000000..5533baf6ad --- /dev/null +++ b/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/infected_guardian_tree.json @@ -0,0 +1,15 @@ +{ + "values": [ + "aether_ii:flourishing_field", + "aether_ii:verdant_woods", + "aether_ii:shrouded_forest", + "aether_ii:magnetic_scar", + "aether_ii:turquoise_forest", + "aether_ii:violet_highwoods", + "aether_ii:frigid_sierra", + "aether_ii:enduring_woodland", + "aether_ii:sheer_tundra", + "aether_ii:contaminated_jungle", + "aether_ii:battleground_wastes" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/outpost.json b/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/outpost.json index 2050ec9b6b..103c5ce568 100644 --- a/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/outpost.json +++ b/src/generated/resources/data/aether_ii/tags/worldgen/biome/has_structure/outpost.json @@ -5,7 +5,6 @@ "aether_ii:shrouded_forest", "aether_ii:magnetic_scar", "aether_ii:turquoise_forest", - "aether_ii:glistening_swamp", "aether_ii:violet_highwoods", "aether_ii:frigid_sierra", "aether_ii:enduring_woodland", diff --git a/src/generated/resources/data/aether_ii/worldgen/processor_list/infected_guardian_tree.json b/src/generated/resources/data/aether_ii/worldgen/processor_list/infected_guardian_tree.json new file mode 100644 index 0000000000..4873a97bd3 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/processor_list/infected_guardian_tree.json @@ -0,0 +1,51 @@ +{ + "processors": [ + { + "processor_type": "minecraft:rule", + "rules": [ + { + "input_predicate": { + "predicate_type": "minecraft:tag_match", + "tag": "aether_ii:infected_guardian_tree_replaceables" + }, + "location_predicate": { + "block": "minecraft:air", + "predicate_type": "minecraft:block_match" + }, + "output_state": { + "Name": "minecraft:air" + } + }, + { + "input_predicate": { + "predicate_type": "minecraft:tag_match", + "tag": "aether_ii:infected_guardian_tree_replaceables" + }, + "location_predicate": { + "block": "minecraft:water", + "predicate_type": "minecraft:block_match" + }, + "output_state": { + "Name": "minecraft:water", + "Properties": { + "level": "0" + } + } + }, + { + "input_predicate": { + "predicate_type": "minecraft:tag_match", + "tag": "aether_ii:infected_guardian_tree_replaceables" + }, + "location_predicate": { + "block": "aether_ii:cold_aercloud", + "predicate_type": "minecraft:block_match" + }, + "output_state": { + "Name": "aether_ii:cold_aercloud" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/structure/camp_highfields.json b/src/generated/resources/data/aether_ii/worldgen/structure/camp_highfields.json index 553479d526..a6c465f3e0 100644 --- a/src/generated/resources/data/aether_ii/worldgen/structure/camp_highfields.json +++ b/src/generated/resources/data/aether_ii/worldgen/structure/camp_highfields.json @@ -6,7 +6,7 @@ "liquid_settings": "ignore_waterlogging", "max_distance_from_center": 32, "project_start_to_heightmap": "WORLD_SURFACE_WG", - "size": 20, + "size": 4, "spawn_overrides": {}, "start_height": { "absolute": 0 diff --git a/src/generated/resources/data/aether_ii/worldgen/structure/infected_guardian_tree.json b/src/generated/resources/data/aether_ii/worldgen/structure/infected_guardian_tree.json new file mode 100644 index 0000000000..3d14cb8d3a --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/structure/infected_guardian_tree.json @@ -0,0 +1,16 @@ +{ + "type": "aether_ii:aether_jigsaw", + "biomes": "#aether_ii:has_structure/infected_guardian_tree", + "discard_above_y": 160, + "discard_below_y": 128, + "liquid_settings": "ignore_waterlogging", + "max_distance_from_center": 128, + "project_start_to_heightmap": "WORLD_SURFACE_WG", + "size": 12, + "spawn_overrides": {}, + "start_height": { + "absolute": -16 + }, + "start_pool": "aether_ii:dungeon/infected_guardian_tree/entrance", + "step": "surface_structures" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/structure/outpost.json b/src/generated/resources/data/aether_ii/worldgen/structure/outpost.json index 6d4f0342b6..8a0574256e 100644 --- a/src/generated/resources/data/aether_ii/worldgen/structure/outpost.json +++ b/src/generated/resources/data/aether_ii/worldgen/structure/outpost.json @@ -6,7 +6,7 @@ "liquid_settings": "ignore_waterlogging", "max_distance_from_center": 32, "project_start_to_heightmap": "WORLD_SURFACE_WG", - "size": 10, + "size": 4, "spawn_overrides": {}, "start_height": { "absolute": 0 diff --git a/src/generated/resources/data/aether_ii/worldgen/structure_set/surface_dungeons.json b/src/generated/resources/data/aether_ii/worldgen/structure_set/surface_dungeons.json new file mode 100644 index 0000000000..f79cba5eaf --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/structure_set/surface_dungeons.json @@ -0,0 +1,19 @@ +{ + "placement": { + "type": "minecraft:random_spread", + "exclusion_zone": { + "chunk_count": 8, + "other_set": "aether_ii:outposts" + }, + "frequency_reduction_method": "legacy_type_2", + "salt": 2209164, + "separation": 12, + "spacing": 32 + }, + "structures": [ + { + "structure": "aether_ii:infected_guardian_tree", + "weight": 1 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/additional_paths.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/additional_paths.json index 29198a7918..46c443fc8e 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/additional_paths.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/additional_paths.json @@ -5,7 +5,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/additional_paths/path_01", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -14,7 +15,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/additional_paths/path_02", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 } diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/center.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/center.json index ca52ee74c5..dfda41e9f5 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/center.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/center.json @@ -5,7 +5,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/small_center_01", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -14,7 +15,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/small_center_02", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -23,7 +25,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/medium_center_01", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -32,7 +35,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/medium_center_02", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -41,7 +45,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/large_center_01", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 }, @@ -50,7 +55,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/center/large_center_02", "processors": "aether_ii:camp_highfields", - "projection": "terrain_matching" + "projection": "terrain_matching", + "replace_air": true }, "weight": 1 } diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/decorations.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/decorations.json index 5235995827..d4c3043874 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/decorations.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/decorations.json @@ -5,7 +5,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/decorations/blueberry_farm", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 }, @@ -14,7 +15,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/decorations/orange_farm", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 }, @@ -23,7 +25,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/decorations/valkyrie_sprout_farm", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 }, @@ -32,7 +35,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/decorations/well", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 2 }, diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/storage_areas.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/storage_areas.json index ee5bbdbab6..fc2e09ea64 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/storage_areas.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/storage_areas.json @@ -5,7 +5,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/storage_areas/storage_area_01", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 2 }, @@ -14,7 +15,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/storage_areas/storage_area_02", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 2 }, diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/tents.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/tents.json index c613a56c19..2c997d8200 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/tents.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/camp/highfields/tents.json @@ -5,7 +5,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/tents/small_tent", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 }, @@ -14,7 +15,8 @@ "element_type": "aether_ii:aether_pool_element", "location": "aether_ii:camp/highfields/tents/tent", "processors": "aether_ii:camp_highfields", - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 2 } diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/arena.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/arena.json new file mode 100644 index 0000000000..dacbb0c47d --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/arena.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/boss/arena", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/entrance.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/entrance.json new file mode 100644 index 0000000000..f5b450752c --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/entrance.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/entrance", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/lobbies.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/lobbies.json new file mode 100644 index 0000000000..674b7ab23b --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/lobbies.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/lobbies/lobby_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_1.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_1.json new file mode 100644 index 0000000000..3f3a78986a --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_1.json @@ -0,0 +1,29 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_1/main_path_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_1/main_path_02", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_2.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_2.json new file mode 100644 index 0000000000..a7bdad48e3 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_2.json @@ -0,0 +1,29 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_2/main_path_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_2/main_path_02", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_3.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_3.json new file mode 100644 index 0000000000..dc89f02801 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/main_path/floor_3.json @@ -0,0 +1,29 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_3/main_path_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/main_path/floor_3/main_path_02", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/paths.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/paths.json new file mode 100644 index 0000000000..f5521fc47d --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/paths.json @@ -0,0 +1,55 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/paths/path_01", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 2 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/paths/path_02", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/paths/path_03", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 3 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/paths/corner", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 2 + }, + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/paths/t_crossing", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 3 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/rooms.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/rooms.json new file mode 100644 index 0000000000..4b4964cf29 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/rooms.json @@ -0,0 +1,15 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/rooms/room_01", + "processors": "aether_ii:infected_guardian_tree", + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/lower.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/lower.json new file mode 100644 index 0000000000..d6b03b0c32 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/lower.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/staircase/floor_1/lower_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/upper.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/upper.json new file mode 100644 index 0000000000..86b325d98b --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_1/upper.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/staircase/floor_1/upper_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/lower.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/lower.json new file mode 100644 index 0000000000..f852e02c61 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/lower.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/staircase/floor_2/lower_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/upper.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/upper.json new file mode 100644 index 0000000000..0958be7940 --- /dev/null +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/dungeon/infected_guardian_tree/staircase/floor_2/upper.json @@ -0,0 +1,17 @@ +{ + "elements": [ + { + "element": { + "element_type": "aether_ii:aether_pool_element", + "location": "aether_ii:dungeon/infected_guardian_tree/staircase/floor_2/upper_01", + "processors": { + "processors": [] + }, + "projection": "rigid", + "replace_air": false + }, + "weight": 1 + } + ], + "fallback": "minecraft:empty" +} \ No newline at end of file diff --git a/src/generated/resources/data/aether_ii/worldgen/template_pool/outpost/outposts.json b/src/generated/resources/data/aether_ii/worldgen/template_pool/outpost/outposts.json index 0d4fba3c9d..2db75c1b83 100644 --- a/src/generated/resources/data/aether_ii/worldgen/template_pool/outpost/outposts.json +++ b/src/generated/resources/data/aether_ii/worldgen/template_pool/outpost/outposts.json @@ -7,7 +7,8 @@ "processors": { "processors": [] }, - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 }, @@ -18,7 +19,8 @@ "processors": { "processors": [] }, - "projection": "rigid" + "projection": "rigid", + "replace_air": true }, "weight": 1 } diff --git a/src/main/java/com/aetherteam/aetherii/AetherIITags.java b/src/main/java/com/aetherteam/aetherii/AetherIITags.java index 54d9bae64a..83d11d6cd4 100644 --- a/src/main/java/com/aetherteam/aetherii/AetherIITags.java +++ b/src/main/java/com/aetherteam/aetherii/AetherIITags.java @@ -61,6 +61,8 @@ public static class Blocks { public static final TagKey COCKATRICE_SPAWNABLE_BLACKLIST = tag("cockatrice_spawnable_blacklist"); public static final TagKey SWET_SPAWNABLE_ON = tag("swet_spawnable_on"); + public static final TagKey INFECTED_GUARDIAN_TREE_REPLACEABLES = tag("infected_guardian_tree_replaceables"); + public static final TagKey MOA_HATCH_BLOCK = tag("moa_hatch_block"); public static final TagKey HOLYSTONE_ABILITY_GUARANTEED = tag("holystone_ability_guaranteed"); @@ -183,6 +185,7 @@ public static class Biomes { public static final TagKey HAS_STRUCTURE_OUTPOST = tag("has_structure/outpost"); public static final TagKey HAS_STRUCTURE_CAMP_HIGHFIELDS = tag("has_structure/camp_highfields"); + public static final TagKey HAS_STRUCTURE_INFECTED_GUARDIAN_TREE = tag("has_structure/infected_guardian_tree"); public static final TagKey MYCELIUM_CONVERSION = tag("mycelium_conversion"); public static final TagKey PODZOL_CONVERSION = tag("podzol_conversion"); diff --git a/src/main/java/com/aetherteam/aetherii/data/generators/AetherIILanguageData.java b/src/main/java/com/aetherteam/aetherii/data/generators/AetherIILanguageData.java index 4b883ab3de..0be03d5a4c 100644 --- a/src/main/java/com/aetherteam/aetherii/data/generators/AetherIILanguageData.java +++ b/src/main/java/com/aetherteam/aetherii/data/generators/AetherIILanguageData.java @@ -889,6 +889,8 @@ protected void addTranslations() { // Structures this.addStructure(AetherIIStructures.OUTPOST, "Outpost"); + this.addStructure(AetherIIStructures.CAMP_HIGHFIELDS, "Camp Highfields"); + this.addStructure(AetherIIStructures.INFECTED_GUARDIAN_TREE, "Infected Guardian Tree"); // Attributes diff --git a/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBiomeTagData.java b/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBiomeTagData.java index b9e18dfc2f..3096ac85cf 100644 --- a/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBiomeTagData.java +++ b/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBiomeTagData.java @@ -91,7 +91,6 @@ public void addTags(HolderLookup.Provider provider) { HighlandsBiomes.SHROUDED_FOREST, HighlandsBiomes.MAGNETIC_SCAR, HighlandsBiomes.TURQUOISE_FOREST, - HighlandsBiomes.GLISTENING_SWAMP, HighlandsBiomes.VIOLET_HIGHWOODS, HighlandsBiomes.FRIGID_SIERRA, HighlandsBiomes.ENDURING_WOODLAND, @@ -102,5 +101,19 @@ public void addTags(HolderLookup.Provider provider) { HighlandsBiomes.FLOURISHING_FIELD, HighlandsBiomes.VERDANT_WOODS ); + + this.tag(AetherIITags.Biomes.HAS_STRUCTURE_INFECTED_GUARDIAN_TREE).add( + HighlandsBiomes.FLOURISHING_FIELD, + HighlandsBiomes.VERDANT_WOODS, + HighlandsBiomes.SHROUDED_FOREST, + HighlandsBiomes.MAGNETIC_SCAR, + HighlandsBiomes.TURQUOISE_FOREST, + HighlandsBiomes.VIOLET_HIGHWOODS, + HighlandsBiomes.FRIGID_SIERRA, + HighlandsBiomes.ENDURING_WOODLAND, + HighlandsBiomes.SHEER_TUNDRA, + HighlandsBiomes.CONTAMINATED_JUNGLE, + HighlandsBiomes.BATTLEGROUND_WASTES + ); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBlockTagData.java b/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBlockTagData.java index 6898daefaf..d6389c8384 100644 --- a/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBlockTagData.java +++ b/src/main/java/com/aetherteam/aetherii/data/generators/tags/AetherIIBlockTagData.java @@ -252,9 +252,12 @@ public void addTags(HolderLookup.Provider provider) { this.tag(AetherIITags.Blocks.AECHOR_PLANT_SPAWNABLE_ON).add(AetherIIBlocks.AETHER_GRASS_BLOCK.get()); this.tag(AetherIITags.Blocks.COCKATRICE_SPAWNABLE_BLACKLIST); this.tag(AetherIITags.Blocks.SWET_SPAWNABLE_ON).add(AetherIIBlocks.AETHER_GRASS_BLOCK.get()); - this.tag(AetherIITags.Blocks.MOA_HATCH_BLOCK).add( - AetherIIBlocks.WOVEN_SKYROOT_STICKS.get() + this.tag(AetherIITags.Blocks.INFECTED_GUARDIAN_TREE_REPLACEABLES).add( + AetherIIBlocks.RED_CLOUDWOOL.get(), + AetherIIBlocks.BLUE_CLOUDWOOL.get(), + Blocks.SPAWNER ); + this.tag(AetherIITags.Blocks.MOA_HATCH_BLOCK).add(AetherIIBlocks.WOVEN_SKYROOT_STICKS.get()); this.tag(AetherIITags.Blocks.HOLYSTONE_ABILITY_GUARANTEED).addTag(Tags.Blocks.ORES); this.tag(AetherIITags.Blocks.GRAVITITE_ABILITY_BLACKLIST).addTags( BlockTags.BUTTONS, diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIProcessorLists.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIProcessorLists.java index e6d4d27168..33924684ad 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIProcessorLists.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIProcessorLists.java @@ -1,6 +1,7 @@ package com.aetherteam.aetherii.data.resources.registries; import com.aetherteam.aetherii.AetherII; +import com.aetherteam.aetherii.AetherIITags; import com.aetherteam.aetherii.block.AetherIIBlocks; import com.aetherteam.aetherii.block.natural.ValkyrieSproutBlock; import com.google.common.collect.ImmutableList; @@ -15,6 +16,7 @@ public class AetherIIProcessorLists { public static final ResourceKey CAMP_HIGHFIELDS = createKey("camp_highfields"); + public static final ResourceKey INFECTED_GUARDIAN_TREE = createKey("infected_guardian_tree"); public static void bootstrap(BootstrapContext context) { register(context, CAMP_HIGHFIELDS, ImmutableList.of( @@ -29,6 +31,14 @@ public static void bootstrap(BootstrapContext context) { new ProcessorRule(new RandomBlockMatchTest(AetherIIBlocks.VALKYRIE_SPROUT.get(), 0.15F), AlwaysTrueTest.INSTANCE, AetherIIBlocks.VALKYRIE_SPROUT.get().defaultBlockState().setValue(ValkyrieSproutBlock.AGE, 1)) )) )); + + register(context, INFECTED_GUARDIAN_TREE, ImmutableList.of( + new RuleProcessor(ImmutableList.of( + new ProcessorRule(new TagMatchTest(AetherIITags.Blocks.INFECTED_GUARDIAN_TREE_REPLACEABLES), new BlockMatchTest(Blocks.AIR), Blocks.AIR.defaultBlockState()), + new ProcessorRule(new TagMatchTest(AetherIITags.Blocks.INFECTED_GUARDIAN_TREE_REPLACEABLES), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState()), + new ProcessorRule(new TagMatchTest(AetherIITags.Blocks.INFECTED_GUARDIAN_TREE_REPLACEABLES), new BlockMatchTest(AetherIIBlocks.COLD_AERCLOUD.get()), AetherIIBlocks.COLD_AERCLOUD.get().defaultBlockState()) + )) + )); } private static ResourceKey createKey(String name) { diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructureSets.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructureSets.java index 8902486013..1bb5810be1 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructureSets.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructureSets.java @@ -19,6 +19,7 @@ public class AetherIIStructureSets { public static final ResourceKey OUTPOSTS = createKey("outposts"); public static final ResourceKey CAMPS = createKey("camps"); + public static final ResourceKey SURFACE_DUNGEONS = createKey("surface_dungeons"); private static ResourceKey createKey(String name) { return ResourceKey.create(Registries.STRUCTURE_SET, ResourceLocation.fromNamespaceAndPath(AetherII.MODID, name)); @@ -36,5 +37,8 @@ public static void bootstrap(BootstrapContext context) { context.register(CAMPS, new StructureSet(structures.getOrThrow(AetherIIStructures.CAMP_HIGHFIELDS), new RandomSpreadStructurePlacement(Vec3i.ZERO, StructurePlacement.FrequencyReductionMethod.LEGACY_TYPE_1, 0.6F, 1147092, Optional.of(new StructurePlacement.ExclusionZone(outposts, 8)), 22, 10, RandomSpreadType.LINEAR))); + + context.register(SURFACE_DUNGEONS, new StructureSet(structures.getOrThrow(AetherIIStructures.INFECTED_GUARDIAN_TREE), + new RandomSpreadStructurePlacement(Vec3i.ZERO, StructurePlacement.FrequencyReductionMethod.LEGACY_TYPE_2, 1.0F, 2209164, Optional.of(new StructurePlacement.ExclusionZone(outposts, 8)), 32, 12, RandomSpreadType.LINEAR))); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructures.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructures.java index 49e0704bf0..bf8400cdb5 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructures.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/AetherIIStructures.java @@ -4,6 +4,7 @@ import com.aetherteam.aetherii.AetherIITags; import com.aetherteam.aetherii.data.resources.builders.AetherIIStructureBuilders; import com.aetherteam.aetherii.data.resources.registries.pools.CampHighfieldsPools; +import com.aetherteam.aetherii.data.resources.registries.pools.InfectedGuardianTreePools; import com.aetherteam.aetherii.data.resources.registries.pools.OutpostPools; import com.aetherteam.aetherii.world.structure.AetherJigsawStructure; import net.minecraft.core.HolderGetter; @@ -28,6 +29,7 @@ public class AetherIIStructures { public static final ResourceKey OUTPOST = createKey("outpost"); public static final ResourceKey CAMP_HIGHFIELDS = createKey("camp_highfields"); + public static final ResourceKey INFECTED_GUARDIAN_TREE = createKey("infected_guardian_tree"); private static ResourceKey createKey(String name) { return ResourceKey.create(Registries.STRUCTURE, ResourceLocation.fromNamespaceAndPath(AetherII.MODID, name)); @@ -39,10 +41,14 @@ public static void bootstrap(BootstrapContext context) { context.register(OUTPOST, new AetherJigsawStructure( AetherIIStructureBuilders.structure(biomes.getOrThrow(AetherIITags.Biomes.HAS_STRUCTURE_OUTPOST), GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.BEARD_THIN), - templatePools.getOrThrow(OutpostPools.OUTPOST), Optional.empty(), 10, ConstantHeight.of(VerticalAnchor.absolute(0)), Optional.of(Heightmap.Types.WORLD_SURFACE_WG), 32, 128, 256, List.of(), DimensionPadding.ZERO, LiquidSettings.IGNORE_WATERLOGGING)); + templatePools.getOrThrow(OutpostPools.OUTPOST), Optional.empty(), 4, ConstantHeight.of(VerticalAnchor.absolute(0)), Optional.of(Heightmap.Types.WORLD_SURFACE_WG), 32, 128, 256, List.of(), DimensionPadding.ZERO, LiquidSettings.IGNORE_WATERLOGGING)); context.register(CAMP_HIGHFIELDS, new AetherJigsawStructure( AetherIIStructureBuilders.structure(biomes.getOrThrow(AetherIITags.Biomes.HAS_STRUCTURE_CAMP_HIGHFIELDS), GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.BEARD_THIN), - templatePools.getOrThrow(CampHighfieldsPools.CENTER), Optional.empty(), 20, ConstantHeight.of(VerticalAnchor.absolute(0)), Optional.of(Heightmap.Types.WORLD_SURFACE_WG), 32, 128, 256, List.of(), DimensionPadding.ZERO, LiquidSettings.IGNORE_WATERLOGGING)); + templatePools.getOrThrow(CampHighfieldsPools.CENTER), Optional.empty(), 4, ConstantHeight.of(VerticalAnchor.absolute(0)), Optional.of(Heightmap.Types.WORLD_SURFACE_WG), 32, 128, 256, List.of(), DimensionPadding.ZERO, LiquidSettings.IGNORE_WATERLOGGING)); + + context.register(INFECTED_GUARDIAN_TREE, new AetherJigsawStructure( + AetherIIStructureBuilders.structure(biomes.getOrThrow(AetherIITags.Biomes.HAS_STRUCTURE_INFECTED_GUARDIAN_TREE), GenerationStep.Decoration.SURFACE_STRUCTURES, TerrainAdjustment.NONE), + templatePools.getOrThrow(InfectedGuardianTreePools.ENTRANCE), Optional.empty(), 12, ConstantHeight.of(VerticalAnchor.absolute(-16)), Optional.of(Heightmap.Types.WORLD_SURFACE_WG), 128, 128, 160, List.of(), DimensionPadding.ZERO, LiquidSettings.IGNORE_WATERLOGGING)); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/highlands/HighlandsPlacedFeatures.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/highlands/HighlandsPlacedFeatures.java index b91ff5d8e7..6471bb9055 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/highlands/HighlandsPlacedFeatures.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/highlands/HighlandsPlacedFeatures.java @@ -730,4 +730,4 @@ private static void register(BootstrapContext context, ResourceKe private static void register(BootstrapContext context, ResourceKey key, Holder> configuration, List modifiers) { context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); } -} +} \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/AetherIIPools.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/AetherIIPools.java index c1d32f109c..e1b704c6e1 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/AetherIIPools.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/AetherIIPools.java @@ -28,6 +28,7 @@ public static void bootstrap(BootstrapContext context) { OutpostPools.bootstrap(context); CampHighfieldsPools.bootstrap(context); + InfectedGuardianTreePools.bootstrap(context); } public static ResourceKey createKey(String name) { @@ -39,10 +40,18 @@ public static void register(BootstrapContext context, Str } public static Function aetherPool(String id) { - return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), EMPTY, pool); + return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), EMPTY, pool, false); } public static Function aetherPool(String id, Holder processor) { - return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), processor, pool); + return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), processor, pool, false); + } + + public static Function aetherPoolReplace(String id) { + return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), EMPTY, pool, true); + } + + public static Function aetherPoolReplace(String id, Holder processor) { + return pool -> new AetherPoolElement(Either.left(ResourceLocation.fromNamespaceAndPath(AetherII.MODID, id)), processor, pool, true); } } \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/CampHighfieldsPools.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/CampHighfieldsPools.java index 48805b3dc3..9d20dbe218 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/CampHighfieldsPools.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/CampHighfieldsPools.java @@ -30,12 +30,12 @@ public static void bootstrap(BootstrapContext context) { context.register(CENTER, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/small_center_01", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/small_center_02", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/medium_center_01", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/medium_center_02", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/large_center_01", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/center/large_center_02", processorCamp), 1) + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/small_center_01", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/small_center_02", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/medium_center_01", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/medium_center_02", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/large_center_01", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/center/large_center_02", processorCamp), 1) ), StructureTemplatePool.Projection.TERRAIN_MATCHING) ); @@ -43,8 +43,8 @@ public static void bootstrap(BootstrapContext context) { context.register(ADDITIONAL_PATHS, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("camp/highfields/additional_paths/path_01", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/additional_paths/path_02", processorCamp), 1) + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/additional_paths/path_01", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/additional_paths/path_02", processorCamp), 1) ), StructureTemplatePool.Projection.TERRAIN_MATCHING) ); @@ -52,8 +52,8 @@ public static void bootstrap(BootstrapContext context) { context.register(TENTS, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("camp/highfields/tents/small_tent", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/tents/tent", processorCamp), 2) + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/tents/small_tent", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/tents/tent", processorCamp), 2) ), StructureTemplatePool.Projection.RIGID) ); @@ -61,10 +61,10 @@ public static void bootstrap(BootstrapContext context) { context.register(DECORATIONS, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("camp/highfields/decorations/blueberry_farm", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/decorations/orange_farm", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/decorations/valkyrie_sprout_farm", processorCamp), 1), - Pair.of(AetherIIPools.aetherPool("camp/highfields/decorations/well", processorCamp), 2), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/decorations/blueberry_farm", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/decorations/orange_farm", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/decorations/valkyrie_sprout_farm", processorCamp), 1), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/decorations/well", processorCamp), 2), Pair.of(StructurePoolElement.empty(), 2) ), StructureTemplatePool.Projection.RIGID) @@ -73,8 +73,8 @@ public static void bootstrap(BootstrapContext context) { context.register(STORAGE_AREAS, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("camp/highfields/storage_areas/storage_area_01", processorCamp), 2), - Pair.of(AetherIIPools.aetherPool("camp/highfields/storage_areas/storage_area_02", processorCamp), 2), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/storage_areas/storage_area_01", processorCamp), 2), + Pair.of(AetherIIPools.aetherPoolReplace("camp/highfields/storage_areas/storage_area_02", processorCamp), 2), Pair.of(StructurePoolElement.empty(), 3) ), StructureTemplatePool.Projection.RIGID) diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/InfectedGuardianTreePools.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/InfectedGuardianTreePools.java new file mode 100644 index 0000000000..4bf73a17f9 --- /dev/null +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/InfectedGuardianTreePools.java @@ -0,0 +1,140 @@ +package com.aetherteam.aetherii.data.resources.registries.pools; + +import com.aetherteam.aetherii.data.resources.registries.AetherIIProcessorLists; +import com.google.common.collect.ImmutableList; +import com.mojang.datafixers.util.Pair; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.data.worldgen.Pools; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorList; + +public class InfectedGuardianTreePools { + public static final ResourceKey ENTRANCE = AetherIIPools.createKey("dungeon/infected_guardian_tree/entrance"); + public static final ResourceKey LOBBIES = AetherIIPools.createKey("dungeon/infected_guardian_tree/lobbies"); + + public static final ResourceKey MAIN_PATH_FLOOR_1 = AetherIIPools.createKey("dungeon/infected_guardian_tree/main_path/floor_1"); + public static final ResourceKey MAIN_PATH_FLOOR_2 = AetherIIPools.createKey("dungeon/infected_guardian_tree/main_path/floor_2"); + public static final ResourceKey MAIN_PATH_FLOOR_3 = AetherIIPools.createKey("dungeon/infected_guardian_tree/main_path/floor_3"); + + public static final ResourceKey PATHS = AetherIIPools.createKey("dungeon/infected_guardian_tree/paths"); + + public static final ResourceKey STAIRCASE_FLOOR_1_UPPER = AetherIIPools.createKey("dungeon/infected_guardian_tree/staircase/floor_1/upper"); + public static final ResourceKey STAIRCASE_FLOOR_1_LOWER = AetherIIPools.createKey("dungeon/infected_guardian_tree/staircase/floor_1/lower"); + public static final ResourceKey STAIRCASE_FLOOR_2_UPPER = AetherIIPools.createKey("dungeon/infected_guardian_tree/staircase/floor_2/upper"); + public static final ResourceKey STAIRCASE_FLOOR_2_LOWER = AetherIIPools.createKey("dungeon/infected_guardian_tree/staircase/floor_2/lower"); + + public static final ResourceKey ROOMS = AetherIIPools.createKey("dungeon/infected_guardian_tree/rooms"); + + public static final ResourceKey ARENA = AetherIIPools.createKey("dungeon/infected_guardian_tree/arena"); + + public static void bootstrap(BootstrapContext context) { + HolderGetter templatePools = context.lookup(Registries.TEMPLATE_POOL); + HolderGetter placement = context.lookup(Registries.PLACED_FEATURE); + Holder fallback = templatePools.getOrThrow(Pools.EMPTY); + HolderGetter processors = context.lookup(Registries.PROCESSOR_LIST); + + Holder processorDungeon = processors.getOrThrow(AetherIIProcessorLists.INFECTED_GUARDIAN_TREE); + + context.register(ENTRANCE, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/entrance"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(LOBBIES, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/lobbies/lobby_01"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + + context.register(MAIN_PATH_FLOOR_1, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_1/main_path_01"), 1), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_1/main_path_02"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(MAIN_PATH_FLOOR_2, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_2/main_path_01"), 1), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_2/main_path_02"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(MAIN_PATH_FLOOR_3, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_3/main_path_01"), 1), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/main_path/floor_3/main_path_02"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + + context.register(PATHS, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/paths/path_01", processorDungeon), 2), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/paths/path_02", processorDungeon), 1), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/paths/path_03", processorDungeon), 3), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/paths/corner", processorDungeon), 2), + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/paths/t_crossing", processorDungeon), 3) + ), + StructureTemplatePool.Projection.RIGID) + ); + + context.register(STAIRCASE_FLOOR_1_UPPER, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/staircase/floor_1/upper_01"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(STAIRCASE_FLOOR_1_LOWER, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/staircase/floor_1/lower_01"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(STAIRCASE_FLOOR_2_UPPER, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/staircase/floor_2/upper_01"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + context.register(STAIRCASE_FLOOR_2_LOWER, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/staircase/floor_2/lower_01"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + + context.register(ROOMS, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/rooms/room_01", processorDungeon), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + + context.register(ARENA, new StructureTemplatePool( + fallback, + ImmutableList.of( + Pair.of(AetherIIPools.aetherPool("dungeon/infected_guardian_tree/boss/arena"), 1) + ), + StructureTemplatePool.Projection.RIGID) + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/OutpostPools.java b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/OutpostPools.java index 81d2e5c455..82c47193d3 100644 --- a/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/OutpostPools.java +++ b/src/main/java/com/aetherteam/aetherii/data/resources/registries/pools/OutpostPools.java @@ -20,8 +20,8 @@ public static void bootstrap(BootstrapContext context) { context.register(OUTPOST, new StructureTemplatePool( fallback, ImmutableList.of( - Pair.of(AetherIIPools.aetherPool("outpost/outpost"), 1), - Pair.of(AetherIIPools.aetherPool("outpost/tall_outpost"), 1) + Pair.of(AetherIIPools.aetherPoolReplace("outpost/outpost"), 1), + Pair.of(AetherIIPools.aetherPoolReplace("outpost/tall_outpost"), 1) ), StructureTemplatePool.Projection.RIGID) ); diff --git a/src/main/java/com/aetherteam/aetherii/world/feature/configuration/DungeonEntranceConfiguration.java b/src/main/java/com/aetherteam/aetherii/world/feature/configuration/DungeonEntranceConfiguration.java new file mode 100644 index 0000000000..09e7e9324e --- /dev/null +++ b/src/main/java/com/aetherteam/aetherii/world/feature/configuration/DungeonEntranceConfiguration.java @@ -0,0 +1,15 @@ +package com.aetherteam.aetherii.world.feature.configuration; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; +import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; + +public record DungeonEntranceConfiguration(ResourceLocation path, int xOffset, int zOffset) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + ResourceLocation.CODEC.fieldOf("path").forGetter(DungeonEntranceConfiguration::path), + Codec.intRange(-64, 64).fieldOf("x_offset").forGetter(DungeonEntranceConfiguration::xOffset), + Codec.intRange(-64, 64).fieldOf("z_offset").forGetter(DungeonEntranceConfiguration::zOffset) + ).apply(instance, DungeonEntranceConfiguration::new)); +} \ No newline at end of file diff --git a/src/main/java/com/aetherteam/aetherii/world/structure/pool/AetherPoolElement.java b/src/main/java/com/aetherteam/aetherii/world/structure/pool/AetherPoolElement.java index c80c8c6535..2c5a5c6314 100644 --- a/src/main/java/com/aetherteam/aetherii/world/structure/pool/AetherPoolElement.java +++ b/src/main/java/com/aetherteam/aetherii/world/structure/pool/AetherPoolElement.java @@ -44,10 +44,16 @@ public class AetherPoolElement extends StructurePoolElement { AetherPoolElement::encodeTemplate, ResourceLocation.CODEC.map(Either::left) ); public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( - instance -> instance.group(templateCodec(), processorsCodec(), projectionCodec()).apply(instance, AetherPoolElement::new) + instance -> instance.group( + templateCodec(), + processorsCodec(), + projectionCodec(), + Codec.BOOL.fieldOf("replace_air").forGetter(structure -> structure.replaceAir) + ).apply(instance, AetherPoolElement::new) ); protected final Either template; protected final Holder processors; + protected final boolean replaceAir; private static DataResult encodeTemplate(Either p_210425_, DynamicOps p_210426_, T p_210427_) { Optional optional = p_210425_.left(); @@ -64,10 +70,11 @@ protected static RecordCodecBuilder codec.template); } - public AetherPoolElement(Either template, Holder processors, StructureTemplatePool.Projection projection) { + public AetherPoolElement(Either template, Holder processors, StructureTemplatePool.Projection projection, boolean replaceAir) { super(projection); this.template = template; this.processors = processors; + this.replaceAir = replaceAir; } @Override @@ -148,8 +155,7 @@ public boolean place(StructureTemplateManager templateManager, WorldGenLevel lev } /** - * Uses processors of {@link net.minecraft.world.level.levelgen.structure.pools.LegacySinglePoolElement} - * Might have a coded to determine if it should use processors of Single or Legacy Pool Elements in the future + * Based on {@link net.minecraft.world.level.levelgen.structure.pools.LegacySinglePoolElement} * */ protected StructurePlaceSettings getSettings(Rotation rotation, BoundingBox boundingBox, boolean offset) { StructurePlaceSettings settings = new StructurePlaceSettings(); @@ -157,9 +163,10 @@ protected StructurePlaceSettings getSettings(Rotation rotation, BoundingBox boun settings.setRotation(rotation); settings.setKnownShape(true); settings.setIgnoreEntities(false); - settings.addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); - settings.addProcessor(BlockIgnoreProcessor.STRUCTURE_AND_AIR); -// settings.setLiquidSettings() //todo + if (replaceAir) { + settings.addProcessor(BlockIgnoreProcessor.STRUCTURE_BLOCK); + settings.addProcessor(BlockIgnoreProcessor.STRUCTURE_AND_AIR); + } settings.setFinalizeEntities(true); if (!offset) { settings.addProcessor(JigsawReplacementProcessor.INSTANCE); diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/boss/arena.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/boss/arena.nbt new file mode 100644 index 0000000000..527a198fe0 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/boss/arena.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/entrance.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/entrance.nbt new file mode 100644 index 0000000000..60bb766af4 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/entrance.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/lobbies/lobby_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/lobbies/lobby_01.nbt new file mode 100644 index 0000000000..68d254a527 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/lobbies/lobby_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_01.nbt new file mode 100644 index 0000000000..3bc8358fd4 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_02.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_02.nbt new file mode 100644 index 0000000000..8369fb85c4 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_1/main_path_02.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_01.nbt new file mode 100644 index 0000000000..77c81f5e41 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_02.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_02.nbt new file mode 100644 index 0000000000..952b552489 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_2/main_path_02.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_01.nbt new file mode 100644 index 0000000000..8e3fb41d94 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_02.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_02.nbt new file mode 100644 index 0000000000..6f9aa8c6fb Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/main_path/floor_3/main_path_02.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/corner.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/corner.nbt new file mode 100644 index 0000000000..e11f9dbc34 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/corner.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_01.nbt new file mode 100644 index 0000000000..29e0a53a35 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_02.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_02.nbt new file mode 100644 index 0000000000..daf89c148f Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_02.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_03.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_03.nbt new file mode 100644 index 0000000000..e63f6eeb75 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/path_03.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/t_crossing.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/t_crossing.nbt new file mode 100644 index 0000000000..63070e2b76 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/paths/t_crossing.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/rooms/room_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/rooms/room_01.nbt new file mode 100644 index 0000000000..8a34c2f4d1 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/rooms/room_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/lower_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/lower_01.nbt new file mode 100644 index 0000000000..6e0f2a7654 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/lower_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/upper_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/upper_01.nbt new file mode 100644 index 0000000000..5de3596c07 Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_1/upper_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/lower_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/lower_01.nbt new file mode 100644 index 0000000000..12bc406e1b Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/lower_01.nbt differ diff --git a/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/upper_01.nbt b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/upper_01.nbt new file mode 100644 index 0000000000..68c4a3897b Binary files /dev/null and b/src/main/resources/data/aether_ii/structure/dungeon/infected_guardian_tree/staircase/floor_2/upper_01.nbt differ