mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-03 08:25:31 +00:00
cleanup and add per-biome exclusions
This commit is contained in:
parent
d93d064d97
commit
2fdb96a850
@ -35,7 +35,7 @@ import com.dfsek.terra.config.PluginConfig;
|
|||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
import com.dfsek.terra.config.lang.Language;
|
import com.dfsek.terra.config.lang.Language;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
import com.dfsek.terra.fabric.config.PackFeatureOptionsTemplate;
|
import com.dfsek.terra.fabric.config.PackCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
|
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
|
||||||
import com.dfsek.terra.fabric.generation.PopulatorFeature;
|
import com.dfsek.terra.fabric.generation.PopulatorFeature;
|
||||||
import com.dfsek.terra.fabric.generation.TerraBiomeSource;
|
import com.dfsek.terra.fabric.generation.TerraBiomeSource;
|
||||||
@ -295,7 +295,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
|
|
||||||
private final TerraPlugin main;
|
private final TerraPlugin main;
|
||||||
|
|
||||||
private final Map<ConfigPack, PackFeatureOptionsTemplate> templates = new HashMap<>();
|
private final Map<ConfigPack, PackCompatibilityOptions> templates = new HashMap<>();
|
||||||
|
|
||||||
private FabricAddon(TerraPlugin main) {
|
private FabricAddon(TerraPlugin main) {
|
||||||
this.main = main;
|
this.main = main;
|
||||||
@ -330,7 +330,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
injectTree(treeRegistry, "CRIMSON_FUNGUS", ConfiguredFeatures.CRIMSON_FUNGI);
|
injectTree(treeRegistry, "CRIMSON_FUNGUS", ConfiguredFeatures.CRIMSON_FUNGI);
|
||||||
injectTree(treeRegistry, "WARPED_FUNGUS", ConfiguredFeatures.WARPED_FUNGI);
|
injectTree(treeRegistry, "WARPED_FUNGUS", ConfiguredFeatures.WARPED_FUNGI);
|
||||||
|
|
||||||
PackFeatureOptionsTemplate template = new PackFeatureOptionsTemplate();
|
PackCompatibilityOptions template = new PackCompatibilityOptions();
|
||||||
try {
|
try {
|
||||||
event.loadTemplate(template);
|
event.loadTemplate(template);
|
||||||
} catch(ConfigException e) {
|
} catch(ConfigException e) {
|
||||||
@ -359,7 +359,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<ConfigPack, PackFeatureOptionsTemplate> getTemplates() {
|
public Map<ConfigPack, PackCompatibilityOptions> getTemplates() {
|
||||||
return templates;
|
return templates;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,16 @@ package com.dfsek.terra.fabric.config;
|
|||||||
import com.dfsek.tectonic.annotations.Default;
|
import com.dfsek.tectonic.annotations.Default;
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@SuppressWarnings("FieldMayBeFinal")
|
@SuppressWarnings("FieldMayBeFinal")
|
||||||
public class PackFeatureOptionsTemplate implements ConfigTemplate {
|
public class PackCompatibilityOptions implements ConfigTemplate {
|
||||||
@Value("features.inject-registry.enable")
|
@Value("features.inject-registry.enable")
|
||||||
@Default
|
@Default
|
||||||
private boolean doRegistryInjection = false;
|
private boolean doRegistryInjection = false;
|
||||||
@ -26,6 +29,18 @@ public class PackFeatureOptionsTemplate implements ConfigTemplate {
|
|||||||
@Default
|
@Default
|
||||||
private Set<Identifier> excludedBiomeFeatures = new HashSet<>();
|
private Set<Identifier> excludedBiomeFeatures = new HashSet<>();
|
||||||
|
|
||||||
|
@Value("features.inject-biome.exclude-biomes")
|
||||||
|
@Default
|
||||||
|
private Map<BiomeBuilder, Set<Identifier>> excludedPerBiomeFeatures = new HashMap<>();
|
||||||
|
|
||||||
|
@Value("structures.inject-biome.excluded-features")
|
||||||
|
@Default
|
||||||
|
private Set<Identifier> excludedBiomeStructures = new HashSet<>();
|
||||||
|
|
||||||
|
@Value("structures.inject-biome.exclude-biomes")
|
||||||
|
@Default
|
||||||
|
private Map<BiomeBuilder, Set<Identifier>> excludedPerBiomeStructures = new HashMap<>();
|
||||||
|
|
||||||
public boolean doBiomeInjection() {
|
public boolean doBiomeInjection() {
|
||||||
return doBiomeInjection;
|
return doBiomeInjection;
|
||||||
}
|
}
|
||||||
@ -41,4 +56,16 @@ public class PackFeatureOptionsTemplate implements ConfigTemplate {
|
|||||||
public Set<Identifier> getExcludedRegistryFeatures() {
|
public Set<Identifier> getExcludedRegistryFeatures() {
|
||||||
return excludedRegistryFeatures;
|
return excludedRegistryFeatures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<BiomeBuilder, Set<Identifier>> getExcludedPerBiomeFeatures() {
|
||||||
|
return excludedPerBiomeFeatures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<BiomeBuilder, Set<Identifier>> getExcludedPerBiomeStructures() {
|
||||||
|
return excludedPerBiomeStructures;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Identifier> getExcludedBiomeStructures() {
|
||||||
|
return excludedBiomeStructures;
|
||||||
|
}
|
||||||
}
|
}
|
@ -148,10 +148,9 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
|
|||||||
int cx = FastMath.floorMod(x, 16);
|
int cx = FastMath.floorMod(x, 16);
|
||||||
int cz = FastMath.floorMod(z, 16);
|
int cz = FastMath.floorMod(z, 16);
|
||||||
|
|
||||||
int height = world.getWorld().getMaxHeight();
|
int height = world.getWorld().getMaxHeight() - 1;
|
||||||
|
|
||||||
do height--;
|
while(height >= 0 && sampler.sample(cx, height, cz) < 0) height--;
|
||||||
while(height >= 0 && sampler.sample(cx, height, cz) < 0);
|
|
||||||
|
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@ package com.dfsek.terra.fabric.generation;
|
|||||||
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
import com.dfsek.terra.fabric.util.FabricUtil;
|
|
||||||
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
||||||
|
import com.dfsek.terra.fabric.util.FabricUtil;
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
@ -14,7 +14,6 @@ import net.minecraft.world.biome.Biome;
|
|||||||
import net.minecraft.world.biome.source.BiomeSource;
|
import net.minecraft.world.biome.source.BiomeSource;
|
||||||
import net.minecraft.world.gen.feature.StructureFeature;
|
import net.minecraft.world.gen.feature.StructureFeature;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class TerraBiomeSource extends BiomeSource {
|
public class TerraBiomeSource extends BiomeSource {
|
||||||
@ -33,9 +32,7 @@ public class TerraBiomeSource extends BiomeSource {
|
|||||||
private final ConfigPack pack;
|
private final ConfigPack pack;
|
||||||
|
|
||||||
public TerraBiomeSource(Registry<Biome> biomes, long seed, ConfigPack pack) {
|
public TerraBiomeSource(Registry<Biome> biomes, long seed, ConfigPack pack) {
|
||||||
super(biomes.stream()
|
super(biomes.stream().collect(Collectors.toList()));
|
||||||
.filter(biome -> Objects.requireNonNull(biomes.getId(biome)).getNamespace().equals("terra")) // Filter out non-Terra biomes.
|
|
||||||
.collect(Collectors.toList()));
|
|
||||||
this.biomeRegistry = biomes;
|
this.biomeRegistry = biomes;
|
||||||
this.seed = seed;
|
this.seed = seed;
|
||||||
this.grid = pack.getBiomeProviderBuilder().build(seed);
|
this.grid = pack.getBiomeProviderBuilder().build(seed);
|
||||||
|
@ -4,7 +4,7 @@ import com.dfsek.terra.config.builder.BiomeBuilder;
|
|||||||
import com.dfsek.terra.config.pack.ConfigPack;
|
import com.dfsek.terra.config.pack.ConfigPack;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
||||||
import com.dfsek.terra.fabric.config.PackFeatureOptionsTemplate;
|
import com.dfsek.terra.fabric.config.PackCompatibilityOptions;
|
||||||
import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
|
import com.dfsek.terra.fabric.mixin.access.BiomeEffectsAccessor;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
@ -17,6 +17,7 @@ import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|||||||
import net.minecraft.world.gen.feature.ConfiguredStructureFeature;
|
import net.minecraft.world.gen.feature.ConfiguredStructureFeature;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
@ -52,18 +53,21 @@ public final class FabricUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PackCompatibilityOptions compatibilityOptions = fabricAddon.getTemplates().get(pack);
|
||||||
|
|
||||||
for(Supplier<ConfiguredStructureFeature<?, ?>> structureFeature : vanilla.getGenerationSettings().getStructureFeatures()) {
|
for(Supplier<ConfiguredStructureFeature<?, ?>> structureFeature : vanilla.getGenerationSettings().getStructureFeatures()) {
|
||||||
generationSettings.structureFeature(structureFeature.get());
|
Identifier key = BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE.getId(structureFeature.get());
|
||||||
|
if(!compatibilityOptions.getExcludedBiomeStructures().contains(key) && !compatibilityOptions.getExcludedPerBiomeStructures().getOrDefault(biome, Collections.emptySet()).contains(key)) {
|
||||||
|
generationSettings.structureFeature(structureFeature.get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PackFeatureOptionsTemplate optionsTemplate = fabricAddon.getTemplates().get(pack);
|
if(compatibilityOptions.doBiomeInjection()) {
|
||||||
|
|
||||||
if(optionsTemplate.doBiomeInjection()) {
|
|
||||||
TerraFabricPlugin.getInstance().getDebugLogger().info("Injecting features into " + biome.getTemplate().getID());
|
TerraFabricPlugin.getInstance().getDebugLogger().info("Injecting features into " + biome.getTemplate().getID());
|
||||||
for(int step = 0; step < vanilla.getGenerationSettings().getFeatures().size(); step++) {
|
for(int step = 0; step < vanilla.getGenerationSettings().getFeatures().size(); step++) {
|
||||||
for(Supplier<ConfiguredFeature<?, ?>> featureSupplier : vanilla.getGenerationSettings().getFeatures().get(step)) {
|
for(Supplier<ConfiguredFeature<?, ?>> featureSupplier : vanilla.getGenerationSettings().getFeatures().get(step)) {
|
||||||
Identifier key = BuiltinRegistries.CONFIGURED_FEATURE.getId(featureSupplier.get());
|
Identifier key = BuiltinRegistries.CONFIGURED_FEATURE.getId(featureSupplier.get());
|
||||||
if(!optionsTemplate.getExcludedBiomeFeatures().contains(key)) {
|
if(!compatibilityOptions.getExcludedBiomeFeatures().contains(key) && !compatibilityOptions.getExcludedPerBiomeFeatures().getOrDefault(biome, Collections.emptySet()).contains(key)) {
|
||||||
generationSettings.feature(step, featureSupplier);
|
generationSettings.feature(step, featureSupplier);
|
||||||
TerraFabricPlugin.getInstance().getDebugLogger().info("Injected " + key + " at stage " + step);
|
TerraFabricPlugin.getInstance().getDebugLogger().info("Injected " + key + " at stage " + step);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user