From f625fcd72f5d6dc2bc42027a37fb2fecafb11a8c Mon Sep 17 00:00:00 2001 From: MrTJP Date: Fri, 12 Apr 2024 12:54:12 -0400 Subject: [PATCH] fix: world gen features now respect config file settings --- .../mrtjp/projectred/core/Configurator.java | 48 ++- .../8334375f2c689bc1064105fb5f28a68385b7f9ae | 11 +- .../add_electrotine_ore_to_overworld.json | 62 ++++ ...json => add_marble_cave_to_overworld.json} | 1 + .../biome_modifier/add_overworld_ores.json | 313 ------------------ .../add_peridot_ore_to_overworld.json | 56 ++++ .../add_ruby_ore_to_overworld.json | 56 ++++ .../add_sapphire_ore_to_overworld.json | 56 ++++ .../add_silver_ore_to_overworld.json | 56 ++++ .../add_tin_ore_to_overworld.json | 56 ++++ .../exploration/ProjectRedExploration.java | 6 + .../init/ExplorationWorldFeatures.java | 49 ++- .../world/gen/AddCarversBiomeModifier.java | 39 --- ...FileControlledAddCarversBiomeModifier.java | 49 +++ ...ileControlledAddFeaturesBiomeModifier.java | 49 +++ 15 files changed, 501 insertions(+), 406 deletions(-) create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_electrotine_ore_to_overworld.json rename exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/{add_overworld_carvers.json => add_marble_cave_to_overworld.json} (98%) delete mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_ores.json create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_peridot_ore_to_overworld.json create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_ruby_ore_to_overworld.json create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_sapphire_ore_to_overworld.json create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_silver_ore_to_overworld.json create mode 100644 exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_tin_ore_to_overworld.json delete mode 100644 exploration/src/main/java/mrtjp/projectred/exploration/world/gen/AddCarversBiomeModifier.java create mode 100644 exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddCarversBiomeModifier.java create mode 100644 exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddFeaturesBiomeModifier.java diff --git a/core/src/main/java/mrtjp/projectred/core/Configurator.java b/core/src/main/java/mrtjp/projectred/core/Configurator.java index 762b40897..ad7f2d1cf 100644 --- a/core/src/main/java/mrtjp/projectred/core/Configurator.java +++ b/core/src/main/java/mrtjp/projectred/core/Configurator.java @@ -4,6 +4,8 @@ import codechicken.lib.config.ConfigFile; import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; import static mrtjp.projectred.core.ProjectRedCore.MOD_ID; @@ -27,19 +29,21 @@ public class Configurator { public static boolean fabulousLights = true; /* World Gen */ + public static String rubyOreKey = "ruby_ore"; + public static String sapphireOreKey = "sapphire_ore"; + public static String peridotOreKey = "peridot_ore"; + public static String tinOreKey = "tin_ore"; + public static String silverOreKey = "silver_ore"; + public static String electrotineOreKey = "electrotine_ore"; + public static String marbleCaveKey = "marble_cave"; public static boolean gen_MarbleCave = true; public static boolean gen_Ruby = true; - public static int gen_RubyVeinSize = 8; public static boolean gen_Sapphire = true; - public static int gen_SapphireVeinSize = 8; public static boolean gen_Peridot = true; - public static int gen_PeridotVeinSize = 10; public static boolean gen_Tin = true; - public static int gen_TinVeinSize = 8; public static boolean gen_Silver = true; - public static int gen_SilverVeinSize = 9; public static boolean gen_Electrotine = true; - public static int gen_ElectrotineVeinSize = 8; + public static Map worldFeatures = new HashMap<>(); /* Compatibility */ public static boolean compat_CCBundledCable = true; @@ -54,6 +58,12 @@ public static void load() { config.save(); } + private static boolean loadAndStoreFeature(ConfigCategory gen, String key, boolean def) { + boolean value = gen.getValue(key).setDefaultBoolean(def).getBoolean(); + worldFeatures.put(key, value); + return value; + } + private static void loadValues(ConfigCategory config) { //TODO remove later @@ -77,19 +87,13 @@ private static void loadValues(ConfigCategory config) { fabulousLights = rendering.getValue("fabulous_lights").setDefaultBoolean(fabulousLights).setComment("Use fabulous shader pipeline for lights when on Fabulous Graphics mode").getBoolean(); ConfigCategory gen = config.getCategory("world_gen").setComment("World gen settings"); - gen_Ruby = gen.getValue("ruby_ore").setDefaultBoolean(gen_Ruby).setComment("Enable Ruby Ore generation").getBoolean(); - gen_RubyVeinSize = gen.getValue("ruby_ore_vein_size").setDefaultInt(gen_RubyVeinSize).setComment("Ruby Ore vein size").getInt(); - gen_Sapphire = gen.getValue("sapphire_ore").setDefaultBoolean(gen_Sapphire).setComment("Enable Sapphire Ore generation").getBoolean(); - gen_SapphireVeinSize = gen.getValue("sapphire_ore_vein_size").setDefaultInt(gen_SapphireVeinSize).setComment("Sapphire Ore vein size").getInt(); - gen_Peridot = gen.getValue("peridot_ore").setDefaultBoolean(gen_Peridot).setComment("Enable Peridot Ore generation").getBoolean(); - gen_PeridotVeinSize = gen.getValue("peridot_ore_vein_size").setDefaultInt(gen_PeridotVeinSize).setComment("Peridot Ore vein size").getInt(); - gen_Tin = gen.getValue("tin_ore").setDefaultBoolean(gen_Tin).setComment("Enable Tin Ore generation").getBoolean(); - gen_TinVeinSize = gen.getValue("tin_ore_vein_size").setDefaultInt(gen_TinVeinSize).setComment("Tin Ore vein size").getInt(); - gen_Silver = gen.getValue("silver_ore").setDefaultBoolean(gen_Silver).setComment("Enable Silver Ore generation").getBoolean(); - gen_SilverVeinSize = gen.getValue("silver_ore_vein_size").setDefaultInt(gen_SilverVeinSize).setComment("Silver Ore vein size").getInt(); - gen_Electrotine = gen.getValue("electrotine_ore").setDefaultBoolean(gen_Electrotine).setComment("Enable Electrotine Ore generation").getBoolean(); - gen_ElectrotineVeinSize = gen.getValue("electrotine_ore_vein_size").setDefaultInt(gen_ElectrotineVeinSize).setComment("Electrotine Ore vein size").getInt(); - gen_MarbleCave = gen.getValue("marble_cave").setDefaultBoolean(gen_MarbleCave).setComment("Enable Marble Cave generation").getBoolean(); + gen_Ruby = loadAndStoreFeature(gen, rubyOreKey, true); + gen_Sapphire = loadAndStoreFeature(gen, sapphireOreKey, true); + gen_Peridot = loadAndStoreFeature(gen, peridotOreKey, true); + gen_Tin = loadAndStoreFeature(gen, tinOreKey, true); + gen_Silver = loadAndStoreFeature(gen, silverOreKey, true); + gen_Electrotine = loadAndStoreFeature(gen, electrotineOreKey, true); + gen_MarbleCave = loadAndStoreFeature(gen, marbleCaveKey, true); ConfigCategory compat = config.getCategory("compatibility").setComment("Control the loading of various compatibility hooks. These settings are ignored unless the Compatibility module is installed."); compat_CCBundledCable = compat.getValue("computercraft").setDefaultBoolean(compat_CCBundledCable).setComment("This allows computers to connect to bundled cables with the RS API.").getBoolean(); @@ -123,17 +127,11 @@ private static void loadAndDeleteLegacyValues(ConfigCategory config) { ConfigCategory gen = config.getCategory("World Gen"); gen_Ruby = gen.getValue("Ruby Ore").setDefaultBoolean(gen_Ruby).getBoolean(); - gen_RubyVeinSize = gen.getValue("Ruby Ore vein size").setDefaultInt(gen_RubyVeinSize).getInt(); gen_Sapphire = gen.getValue("Sapphire Ore").setDefaultBoolean(gen_Sapphire).getBoolean(); - gen_SapphireVeinSize = gen.getValue("Sapphire Ore vein size").setDefaultInt(gen_SapphireVeinSize).getInt(); gen_Peridot = gen.getValue("Peridot Ore").setDefaultBoolean(gen_Peridot).getBoolean(); - gen_PeridotVeinSize = gen.getValue("Peridot Ore vein size").setDefaultInt(gen_PeridotVeinSize).getInt(); gen_Tin = gen.getValue("Tin Ore").setDefaultBoolean(gen_Tin).getBoolean(); - gen_TinVeinSize = gen.getValue("Tin Ore vein size").setDefaultInt(gen_TinVeinSize).getInt(); gen_Silver = gen.getValue("Silver Ore").setDefaultBoolean(gen_Silver).getBoolean(); - gen_SilverVeinSize = gen.getValue("Silver Ore vein size").setDefaultInt(gen_SilverVeinSize).getInt(); gen_Electrotine = gen.getValue("Electrotine Ore").setDefaultBoolean(gen_Electrotine).getBoolean(); - gen_ElectrotineVeinSize = gen.getValue("Electrotine Ore vein size").setDefaultInt(gen_ElectrotineVeinSize).getInt(); gen_MarbleCave = gen.getValue("Marble Caves").setDefaultBoolean(gen_MarbleCave).getBoolean(); ConfigCategory compat = config.getCategory("Compatibility"); diff --git a/exploration/src/main/generated/.cache/8334375f2c689bc1064105fb5f28a68385b7f9ae b/exploration/src/main/generated/.cache/8334375f2c689bc1064105fb5f28a68385b7f9ae index ccd0f7deb..74bab02fa 100644 --- a/exploration/src/main/generated/.cache/8334375f2c689bc1064105fb5f28a68385b7f9ae +++ b/exploration/src/main/generated/.cache/8334375f2c689bc1064105fb5f28a68385b7f9ae @@ -1,3 +1,8 @@ -// 1.19.2 2024-03-04T11:32:53.74826 forge/biome_modifier generator for projectred_exploration -d945627f6efcd004553c4907dafa754afd32182e data/projectred_exploration/forge/biome_modifier/add_overworld_carvers.json -867d7ebae686f787cde12b48c638e594733e28ae data/projectred_exploration/forge/biome_modifier/add_overworld_ores.json +// 1.19.2 2024-04-12T12:50:48.118367 forge/biome_modifier generator for projectred_exploration +a9ee4e4ea7ce9d6a5e98587da776a55196704fa2 data/projectred_exploration/forge/biome_modifier/add_electrotine_ore_to_overworld.json +b040a155acc4c4c41dadb18f3a2a8d514cf7cd22 data/projectred_exploration/forge/biome_modifier/add_marble_cave_to_overworld.json +d44596fde99ef0bd30d0ead290049c629e8b74b1 data/projectred_exploration/forge/biome_modifier/add_peridot_ore_to_overworld.json +bdc09c896ef2863532a7ef17a2e3567274819eef data/projectred_exploration/forge/biome_modifier/add_ruby_ore_to_overworld.json +691f03827983499ee1547931cc06a5cfbecb3349 data/projectred_exploration/forge/biome_modifier/add_sapphire_ore_to_overworld.json +05ade71ce944b91d3b8309ba9b396cef7377b64a data/projectred_exploration/forge/biome_modifier/add_silver_ore_to_overworld.json +c4f8a9b2d88c1b62f59e68aca1d58249ffe5c0cf data/projectred_exploration/forge/biome_modifier/add_tin_ore_to_overworld.json diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_electrotine_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_electrotine_ore_to_overworld.json new file mode 100644 index 000000000..316d6b489 --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_electrotine_ore_to_overworld.json @@ -0,0 +1,62 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "electrotine_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 8, + "targets": [ + { + "state": { + "Name": "projectred_exploration:electrotine_ore", + "Properties": { + "lit": "false" + } + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_electrotine_ore", + "Properties": { + "lit": "false" + } + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 4 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 32 + }, + "min_inclusive": { + "absolute": -32 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_carvers.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_marble_cave_to_overworld.json similarity index 98% rename from exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_carvers.json rename to exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_marble_cave_to_overworld.json index 67c96e80d..5f3c88cf2 100644 --- a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_carvers.json +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_marble_cave_to_overworld.json @@ -72,5 +72,6 @@ } } }, + "configKey": "marble_cave", "step": "air" } \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_ores.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_ores.json deleted file mode 100644 index 488baea53..000000000 --- a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_overworld_ores.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "type": "forge:add_features", - "biomes": "#minecraft:is_overworld", - "features": [ - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 8, - "targets": [ - { - "state": { - "Name": "projectred_exploration:ruby_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_ruby_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 1 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 80 - }, - "min_inclusive": { - "absolute": -80 - } - } - } - ] - }, - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 8, - "targets": [ - { - "state": { - "Name": "projectred_exploration:sapphire_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_sapphire_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 1 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 80 - }, - "min_inclusive": { - "absolute": -80 - } - } - } - ] - }, - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 10, - "targets": [ - { - "state": { - "Name": "projectred_exploration:peridot_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_peridot_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 1 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 80 - }, - "min_inclusive": { - "absolute": -80 - } - } - } - ] - }, - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 8, - "targets": [ - { - "state": { - "Name": "projectred_exploration:electrotine_ore", - "Properties": { - "lit": "false" - } - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_electrotine_ore", - "Properties": { - "lit": "false" - } - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 4 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 32 - }, - "min_inclusive": { - "absolute": -32 - } - } - } - ] - }, - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 8, - "targets": [ - { - "state": { - "Name": "projectred_exploration:tin_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_tin_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 8 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 56 - }, - "min_inclusive": { - "absolute": -24 - } - } - } - ] - }, - { - "feature": { - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 9, - "targets": [ - { - "state": { - "Name": "projectred_exploration:silver_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "projectred_exploration:deepslate_silver_ore" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } - }, - "placement": [ - { - "type": "minecraft:count", - "count": 6 - }, - { - "type": "minecraft:in_square" - }, - { - "type": "minecraft:height_range", - "height": { - "type": "minecraft:trapezoid", - "max_inclusive": { - "absolute": 32 - }, - "min_inclusive": { - "absolute": -64 - } - } - } - ] - } - ], - "step": "underground_ores" -} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_peridot_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_peridot_ore_to_overworld.json new file mode 100644 index 000000000..9bb2e7cbb --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_peridot_ore_to_overworld.json @@ -0,0 +1,56 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "peridot_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 10, + "targets": [ + { + "state": { + "Name": "projectred_exploration:peridot_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_peridot_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 80 + }, + "min_inclusive": { + "absolute": -80 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_ruby_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_ruby_ore_to_overworld.json new file mode 100644 index 000000000..306439ac0 --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_ruby_ore_to_overworld.json @@ -0,0 +1,56 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "ruby_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 8, + "targets": [ + { + "state": { + "Name": "projectred_exploration:ruby_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_ruby_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 80 + }, + "min_inclusive": { + "absolute": -80 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_sapphire_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_sapphire_ore_to_overworld.json new file mode 100644 index 000000000..9c68a38d6 --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_sapphire_ore_to_overworld.json @@ -0,0 +1,56 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "sapphire_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 8, + "targets": [ + { + "state": { + "Name": "projectred_exploration:sapphire_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_sapphire_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 1 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 80 + }, + "min_inclusive": { + "absolute": -80 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_silver_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_silver_ore_to_overworld.json new file mode 100644 index 000000000..cb8dc7777 --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_silver_ore_to_overworld.json @@ -0,0 +1,56 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "silver_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 9, + "targets": [ + { + "state": { + "Name": "projectred_exploration:silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_silver_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 6 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 32 + }, + "min_inclusive": { + "absolute": -64 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_tin_ore_to_overworld.json b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_tin_ore_to_overworld.json new file mode 100644 index 000000000..a37714b5d --- /dev/null +++ b/exploration/src/main/generated/data/projectred_exploration/forge/biome_modifier/add_tin_ore_to_overworld.json @@ -0,0 +1,56 @@ +{ + "type": "projectred_exploration:add_features", + "biomes": "#minecraft:is_overworld", + "configKey": "tin_ore", + "features": { + "feature": { + "type": "minecraft:ore", + "config": { + "discard_chance_on_air_exposure": 0.0, + "size": 8, + "targets": [ + { + "state": { + "Name": "projectred_exploration:tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:stone_ore_replaceables" + } + }, + { + "state": { + "Name": "projectred_exploration:deepslate_tin_ore" + }, + "target": { + "predicate_type": "minecraft:tag_match", + "tag": "minecraft:deepslate_ore_replaceables" + } + } + ] + } + }, + "placement": [ + { + "type": "minecraft:count", + "count": 8 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:trapezoid", + "max_inclusive": { + "absolute": 56 + }, + "min_inclusive": { + "absolute": -24 + } + } + } + ] + }, + "step": "underground_ores" +} \ No newline at end of file diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/ProjectRedExploration.java b/exploration/src/main/java/mrtjp/projectred/exploration/ProjectRedExploration.java index e4023b537..f1ef4f029 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/ProjectRedExploration.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/ProjectRedExploration.java @@ -6,6 +6,7 @@ import com.mojang.serialization.Codec; import mrtjp.projectred.exploration.data.*; import mrtjp.projectred.exploration.init.*; +import net.minecraft.core.Registry; import net.minecraft.data.DataGenerator; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.MenuType; @@ -14,6 +15,9 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.carver.WorldCarver; +import net.minecraft.world.level.levelgen.placement.PlacementFilter; +import net.minecraft.world.level.levelgen.placement.PlacementModifier; +import net.minecraft.world.level.levelgen.placement.PlacementModifierType; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.common.world.BiomeModifier; @@ -42,6 +46,8 @@ public class ProjectRedExploration { public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, MOD_ID); public static final DeferredRegister MICRO_MATERIALS = DeferredRegister.create(new ResourceLocation(CBMicroblock.MOD_ID, "micro_material"), MOD_ID); + public static final DeferredRegister> PLACEMENT_MODIFIERS = DeferredRegister.create(Registry.PLACEMENT_MODIFIER_REGISTRY, MOD_ID); + public static final SimpleCreativeTab EXPLORATION_CREATIVE_TAB = new SimpleCreativeTab(MOD_ID, () -> new ItemStack(MARBLE_BRICK_BLOCK.get())); static { diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationWorldFeatures.java b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationWorldFeatures.java index 2cfed4bad..9f7f20443 100644 --- a/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationWorldFeatures.java +++ b/exploration/src/main/java/mrtjp/projectred/exploration/init/ExplorationWorldFeatures.java @@ -5,7 +5,8 @@ import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; import mrtjp.projectred.core.Configurator; -import mrtjp.projectred.exploration.world.gen.AddCarversBiomeModifier; +import mrtjp.projectred.exploration.world.gen.ConfigFileControlledAddCarversBiomeModifier; +import mrtjp.projectred.exploration.world.gen.ConfigFileControlledAddFeaturesBiomeModifier; import mrtjp.projectred.exploration.world.gen.MarbleCaveWorldCarver; import net.minecraft.core.Holder; import net.minecraft.core.HolderSet; @@ -35,7 +36,6 @@ import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.common.data.JsonCodecProvider; import net.minecraftforge.common.world.BiomeModifier; -import net.minecraftforge.common.world.ForgeBiomeModifiers; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; @@ -55,7 +55,8 @@ public class ExplorationWorldFeatures { public static RegistryObject> MARBLE_CAVE_CARVER; // Biome Modifier Codecs - public static RegistryObject> ADD_CARVER_BIOME_MODIFIER_CODEC; + public static RegistryObject> ADD_CARVER_BIOME_MODIFIER_CODEC; + public static RegistryObject> ADD_FEATURES_BIOME_MODIFIER_CODEC; public static void register() { @@ -65,8 +66,9 @@ public static void register() { // Features // None yet. For custom ores, we register a configured variant of Vanilla Feature.ORE - // Codecs (since forge doesnt provide a default "Add Carvers" biome modifier) - ADD_CARVER_BIOME_MODIFIER_CODEC = BIOME_MODIFIER_SERIALIZERS.register("add_carver", () -> AddCarversBiomeModifier.CODEC); + // Codecs + ADD_CARVER_BIOME_MODIFIER_CODEC = BIOME_MODIFIER_SERIALIZERS.register("add_carver", ConfigFileControlledAddCarversBiomeModifier::createCodec); + ADD_FEATURES_BIOME_MODIFIER_CODEC = BIOME_MODIFIER_SERIALIZERS.register("add_features", ConfigFileControlledAddFeaturesBiomeModifier::createCodec); } public static JsonCodecProvider biomeModifiersProvider(DataGenerator dataGenerator, ExistingFileHelper existingFileHelper) { @@ -88,12 +90,12 @@ public static JsonCodecProvider biomeModifiersProvider(DataGenera UniformFloat.of(-1.0F, -0.4F))); // floor level // Configured ores - ConfiguredFeature rubyOreConfiguration = createOreConfiguration(RUBY_ORE_BLOCK, DEEPSLATE_RUBY_ORE_BLOCK, Configurator.gen_RubyVeinSize); - ConfiguredFeature sapphireOreConfiguration = createOreConfiguration(SAPPHIRE_ORE_BLOCK, DEEPSLATE_SAPPHIRE_ORE_BLOCK, Configurator.gen_SapphireVeinSize); - ConfiguredFeature peridotOreConfiguration = createOreConfiguration(PERIDOT_ORE_BLOCK, DEEPSLATE_PERIDOT_ORE_BLOCK, Configurator.gen_PeridotVeinSize); - ConfiguredFeature electrotineOreConfiguration = createOreConfiguration(ELECTROTINE_ORE_BLOCK, DEEPSLATE_ELECTROTINE_ORE_BLOCK, Configurator.gen_ElectrotineVeinSize); - ConfiguredFeature tinOreConfiguration = createOreConfiguration(TIN_ORE_BLOCK, DEEPSLATE_TIN_ORE_BLOCK, Configurator.gen_TinVeinSize); - ConfiguredFeature silverOreConfiguration = createOreConfiguration(SILVER_ORE_BLOCK, DEEPSLATE_SILVER_ORE_BLOCK, Configurator.gen_SilverVeinSize); + ConfiguredFeature rubyOreConfiguration = createOreConfiguration(RUBY_ORE_BLOCK, DEEPSLATE_RUBY_ORE_BLOCK, 8); + ConfiguredFeature sapphireOreConfiguration = createOreConfiguration(SAPPHIRE_ORE_BLOCK, DEEPSLATE_SAPPHIRE_ORE_BLOCK, 8); + ConfiguredFeature peridotOreConfiguration = createOreConfiguration(PERIDOT_ORE_BLOCK, DEEPSLATE_PERIDOT_ORE_BLOCK, 10); + ConfiguredFeature electrotineOreConfiguration = createOreConfiguration(ELECTROTINE_ORE_BLOCK, DEEPSLATE_ELECTROTINE_ORE_BLOCK, 8); + ConfiguredFeature tinOreConfiguration = createOreConfiguration(TIN_ORE_BLOCK, DEEPSLATE_TIN_ORE_BLOCK, 8); + ConfiguredFeature silverOreConfiguration = createOreConfiguration(SILVER_ORE_BLOCK, DEEPSLATE_SILVER_ORE_BLOCK, 9); // Placements PlacedFeature rubyOrePlacedFeature = createOrePlacement(rubyOreConfiguration, -80, 80, 1); @@ -110,21 +112,16 @@ public static JsonCodecProvider biomeModifiersProvider(DataGenera ops, ForgeRegistries.Keys.BIOME_MODIFIERS, Map.of( - new ResourceLocation(MOD_ID, "add_overworld_ores"), new ForgeBiomeModifiers.AddFeaturesBiomeModifier( - isOverworldBiomes, - HolderSet.direct( - Holder.direct(rubyOrePlacedFeature), - Holder.direct(sapphireOrePlacedFeature), - Holder.direct(peridotOrePlacedFeature), - Holder.direct(electrotineOrePlacedFeature), - Holder.direct(tinOrePlacedFeature), - Holder.direct(silverOrePlacedFeature) - ), - GenerationStep.Decoration.UNDERGROUND_ORES), - new ResourceLocation(MOD_ID, "add_overworld_carvers"), new AddCarversBiomeModifier( - isOverworldBiomes, - HolderSet.direct(Holder.direct(marbleCaveConfiguredCarver)), - GenerationStep.Carving.AIR) + // Overworld ores + new ResourceLocation(MOD_ID, "add_ruby_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(rubyOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.rubyOreKey), + new ResourceLocation(MOD_ID, "add_sapphire_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(sapphireOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.sapphireOreKey), + new ResourceLocation(MOD_ID, "add_peridot_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(peridotOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.peridotOreKey), + new ResourceLocation(MOD_ID, "add_electrotine_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(electrotineOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.electrotineOreKey), + new ResourceLocation(MOD_ID, "add_tin_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(tinOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.tinOreKey), + new ResourceLocation(MOD_ID, "add_silver_ore_to_overworld"), new ConfigFileControlledAddFeaturesBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(silverOrePlacedFeature)), GenerationStep.Decoration.UNDERGROUND_ORES, Configurator.silverOreKey), + + // Overworld carvers + new ResourceLocation(MOD_ID, "add_marble_cave_to_overworld"), new ConfigFileControlledAddCarversBiomeModifier(isOverworldBiomes, HolderSet.direct(Holder.direct(marbleCaveConfiguredCarver)), GenerationStep.Carving.AIR, Configurator.marbleCaveKey) )); } diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/AddCarversBiomeModifier.java b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/AddCarversBiomeModifier.java deleted file mode 100644 index 08e5185bc..000000000 --- a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/AddCarversBiomeModifier.java +++ /dev/null @@ -1,39 +0,0 @@ -package mrtjp.projectred.exploration.world.gen; - -import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.Holder; -import net.minecraft.core.HolderSet; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; -import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder; -import net.minecraftforge.common.world.BiomeModifier; -import net.minecraftforge.common.world.ForgeBiomeModifiers; -import net.minecraftforge.common.world.ModifiableBiomeInfo; - -/** - * For some reason, Forge does not provide this in {@link ForgeBiomeModifiers}. - */ -public record AddCarversBiomeModifier(HolderSet biomes, HolderSet> carvers, GenerationStep.Carving step) implements BiomeModifier { - - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Biome.LIST_CODEC.fieldOf("biomes").forGetter(m -> m.biomes), - ConfiguredWorldCarver.LIST_CODEC.fieldOf("carvers").forGetter(m -> m.carvers), - GenerationStep.Carving.CODEC.fieldOf("step").forGetter(m -> m.step) - ).apply(instance, AddCarversBiomeModifier::new)); - - @Override - public void modify(Holder biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) { - - if (phase == Phase.ADD && this.biomes.contains(biome)) { - BiomeGenerationSettingsBuilder generationSettings = builder.getGenerationSettings(); - this.carvers.forEach(holder -> generationSettings.addCarver(this.step, holder)); - } - } - - @Override - public Codec codec() { - return CODEC; - } -} diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddCarversBiomeModifier.java b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddCarversBiomeModifier.java new file mode 100644 index 000000000..e7c7dd65b --- /dev/null +++ b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddCarversBiomeModifier.java @@ -0,0 +1,49 @@ +package mrtjp.projectred.exploration.world.gen; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.exploration.init.ExplorationWorldFeatures; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.carver.ConfiguredWorldCarver; +import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ForgeBiomeModifiers; +import net.minecraftforge.common.world.ModifiableBiomeInfo; + +/** + * For some reason, Forge does not provide this in {@link ForgeBiomeModifiers}. This one also allows for + * dynamic control via ProjectRed's mod config file. + */ +public record ConfigFileControlledAddCarversBiomeModifier(HolderSet biomes, HolderSet> carvers, GenerationStep.Carving step, String configKey) implements BiomeModifier { + + @Override + public void modify(Holder biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) { + + if (isEnabled() && phase == Phase.ADD && this.biomes.contains(biome)) { + BiomeGenerationSettingsBuilder generationSettings = builder.getGenerationSettings(); + this.carvers.forEach(holder -> generationSettings.addCarver(this.step, holder)); + } + } + + @Override + public Codec codec() { + return ExplorationWorldFeatures.ADD_CARVER_BIOME_MODIFIER_CODEC.get(); + } + + private boolean isEnabled() { + return Configurator.worldFeatures.getOrDefault(configKey, false); + } + + public static Codec createCodec() { + return RecordCodecBuilder.create(instance -> instance.group( + Biome.LIST_CODEC.fieldOf("biomes").forGetter(m -> m.biomes), + ConfiguredWorldCarver.LIST_CODEC.fieldOf("carvers").forGetter(m -> m.carvers), + GenerationStep.Carving.CODEC.fieldOf("step").forGetter(m -> m.step), + Codec.STRING.fieldOf("configKey").forGetter(m -> m.configKey) + ).apply(instance, ConfigFileControlledAddCarversBiomeModifier::new)); + } +} diff --git a/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddFeaturesBiomeModifier.java b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddFeaturesBiomeModifier.java new file mode 100644 index 000000000..468ed07e3 --- /dev/null +++ b/exploration/src/main/java/mrtjp/projectred/exploration/world/gen/ConfigFileControlledAddFeaturesBiomeModifier.java @@ -0,0 +1,49 @@ +package mrtjp.projectred.exploration.world.gen; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import mrtjp.projectred.core.Configurator; +import mrtjp.projectred.exploration.init.ExplorationWorldFeatures; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.GenerationStep; +import net.minecraft.world.level.levelgen.placement.PlacedFeature; +import net.minecraftforge.common.world.BiomeGenerationSettingsBuilder; +import net.minecraftforge.common.world.BiomeModifier; +import net.minecraftforge.common.world.ForgeBiomeModifiers; +import net.minecraftforge.common.world.ModifiableBiomeInfo; + +/** + * A type of {@link ForgeBiomeModifiers.AddFeaturesBiomeModifier} that can be disabled by its corresponding + * field in ProjectRed's Config file. + */ +public record ConfigFileControlledAddFeaturesBiomeModifier(HolderSet biomes, HolderSet features, GenerationStep.Decoration step, String configKey) implements BiomeModifier { + + @Override + public void modify(Holder biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) { + + if (isEnabled() && phase == Phase.ADD && this.biomes.contains(biome)) { + BiomeGenerationSettingsBuilder generationSettings = builder.getGenerationSettings(); + this.features.forEach(holder -> generationSettings.addFeature(this.step, holder)); + } + } + + @Override + public Codec codec() { + return ExplorationWorldFeatures.ADD_FEATURES_BIOME_MODIFIER_CODEC.get(); + } + + private boolean isEnabled() { + return Configurator.worldFeatures.getOrDefault(configKey, false); + } + + public static Codec createCodec() { + return RecordCodecBuilder.create(instance -> instance.group( + Biome.LIST_CODEC.fieldOf("biomes").forGetter(m -> m.biomes), + PlacedFeature.LIST_CODEC.fieldOf("features").forGetter(m -> m.features), + GenerationStep.Decoration.CODEC.fieldOf("step").forGetter(m -> m.step), + Codec.STRING.fieldOf("configKey").forGetter(m -> m.configKey) + ).apply(instance, ConfigFileControlledAddFeaturesBiomeModifier::new)); + } +}