diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java index 0dfbccf00..3e907bdc3 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PreLoadCompatibilityOptions.java @@ -14,39 +14,32 @@ public class PreLoadCompatibilityOptions implements ConfigTemplate { @Default private boolean doRegistryInjection = false; - @Value("features.inject-biome.enable") + @Value("features.inject-namespaces") @Default - private boolean doBiomeInjection = false; + private Set featureNamespaces = new HashSet<>(); + + @Value("structures.inject-namespaces") + @Default + private Set structureNamespaces = new HashSet<>(); @Value("features.inject-registry.excluded-features") @Default private Set excludedRegistryFeatures = new HashSet<>(); - @Value("features.inject-biome.excluded-features") - @Default - private Set excludedBiomeFeatures = new HashSet<>(); - @Value("structures.inject-biome.excluded-features") - @Default - private Set excludedBiomeStructures = new HashSet<>(); + public Set getFeatureNamespaces() { + return featureNamespaces; + } - public boolean doBiomeInjection() { - return doBiomeInjection; + public Set getStructureNamespaces() { + return structureNamespaces; } public boolean doRegistryInjection() { return doRegistryInjection; } - public Set getExcludedBiomeFeatures() { - return excludedBiomeFeatures; - } - public Set getExcludedRegistryFeatures() { return excludedRegistryFeatures; } - - public Set getExcludedBiomeStructures() { - return excludedBiomeStructures; - } } diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index c761cade4..5cce866e4 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -17,11 +17,13 @@ import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.carver.ConfiguredCarver; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredStructureFeature; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; import java.util.Locale; import java.util.Map; +import java.util.Objects; import java.util.function.Supplier; public final class FabricUtil { @@ -64,25 +66,24 @@ public final class FabricUtil { TerraFabricPlugin.getInstance().getDebugLogger().info("Injecting Vanilla structures and features into Terra biome " + biome.getTemplate().getID()); for(Supplier> structureFeature : vanilla.getGenerationSettings().getStructureFeatures()) { - Identifier key = BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE.getId(structureFeature.get()); - if(!compatibilityOptions.getExcludedBiomeStructures().contains(key) && !postLoadCompatibilityOptions.getExcludedPerBiomeStructures().getOrDefault(biome, Collections.emptySet()).contains(key)) { + Identifier key = Objects.requireNonNull(BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE.getId(structureFeature.get())); + if(compatibilityOptions.getStructureNamespaces().contains(key.getNamespace()) && !postLoadCompatibilityOptions.getExcludedPerBiomeStructures().getOrDefault(biome, Collections.emptySet()).contains(key)) { generationSettings.structureFeature(structureFeature.get()); TerraFabricPlugin.getInstance().getDebugLogger().info("Injected structure " + key); } } - if(compatibilityOptions.doBiomeInjection()) { - for(int step = 0; step < vanilla.getGenerationSettings().getFeatures().size(); step++) { - for(Supplier> featureSupplier : vanilla.getGenerationSettings().getFeatures().get(step)) { - Identifier key = BuiltinRegistries.CONFIGURED_FEATURE.getId(featureSupplier.get()); - if(!compatibilityOptions.getExcludedBiomeFeatures().contains(key) && !postLoadCompatibilityOptions.getExcludedPerBiomeFeatures().getOrDefault(biome, Collections.emptySet()).contains(key)) { - generationSettings.feature(step, featureSupplier); - TerraFabricPlugin.getInstance().getDebugLogger().info("Injected feature " + key + " at stage " + step); - } + for(int step = 0; step < vanilla.getGenerationSettings().getFeatures().size(); step++) { + for(Supplier> featureSupplier : vanilla.getGenerationSettings().getFeatures().get(step)) { + Identifier key = Objects.requireNonNull(BuiltinRegistries.CONFIGURED_FEATURE.getId(featureSupplier.get())); + if(compatibilityOptions.getFeatureNamespaces().contains(key.getNamespace()) && !postLoadCompatibilityOptions.getExcludedPerBiomeFeatures().getOrDefault(biome, Collections.emptySet()).contains(key)) { + generationSettings.feature(step, featureSupplier); + TerraFabricPlugin.getInstance().getDebugLogger().info("Injected feature " + key + " at stage " + step); } } } + BiomeEffectsAccessor accessor = (BiomeEffectsAccessor) vanilla.getEffects(); BiomeEffects.Builder effects = new BiomeEffects.Builder() .waterColor(colors.getOrDefault("water", accessor.getWaterColor()))