Merge branch 'master' into future
This commit is contained in:
commit
f517b8d4b0
1 file changed
+47
-5
@@ -10,10 +10,8 @@ import net.minecraft.structure.pool.StructurePool;
|
||||
import net.minecraft.structure.pool.StructurePoolElement;
|
||||
import net.minecraft.structure.processor.StructureProcessorLists;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.math.BlockBox;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.util.registry.BuiltinRegistries;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.util.registry.RegistryKey;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
@@ -37,6 +35,7 @@ import net.minecraft.world.gen.feature.TreeFeatureConfig;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class FeatureGenerator
|
||||
{
|
||||
@@ -58,19 +57,46 @@ public class FeatureGenerator
|
||||
|
||||
}
|
||||
|
||||
ConfiguredFeature<?, ?> feature = world.getRegistryManager().get(Registry.CONFIGURED_FEATURE_KEY).get(id);
|
||||
if (feature != null)
|
||||
ConfiguredFeature<?, ?> configuredFeature = world.getRegistryManager().get(Registry.CONFIGURED_FEATURE_KEY).get(id);
|
||||
if (configuredFeature != null)
|
||||
{
|
||||
CarpetSettings.skipGenerationChecks.set(true);
|
||||
try
|
||||
{
|
||||
return feature.generate(world, world.getChunkManager().getChunkGenerator(), world.random, pos);
|
||||
return configuredFeature.generate(world, world.getChunkManager().getChunkGenerator(), world.random, pos);
|
||||
}
|
||||
finally
|
||||
{
|
||||
CarpetSettings.skipGenerationChecks.set(false);
|
||||
}
|
||||
}
|
||||
StructureFeature<?> structure = Registry.STRUCTURE_FEATURE.get(id);
|
||||
if (structure != null)
|
||||
{
|
||||
ConfiguredStructureFeature<?,?> configuredStandard = getDefaultFeature(structure, world, pos, true);
|
||||
if (configuredStandard != null)
|
||||
return ((StructureFeatureInterface)configuredStandard.feature).plopAnywhere(
|
||||
world, pos, world.getChunkManager().getChunkGenerator(),
|
||||
false, world.getRegistryManager().get(Registry.BIOME_KEY).get(BiomeKeys.PLAINS), configuredStandard.config);
|
||||
|
||||
}
|
||||
Feature<?> feature = Registry.FEATURE.get(id);
|
||||
if (feature != null)
|
||||
{
|
||||
ConfiguredFeature<?,?> configuredStandard = getDefaultFeature(feature, world, pos, true);
|
||||
if (configuredStandard != null)
|
||||
{
|
||||
CarpetSettings.skipGenerationChecks.set(true);
|
||||
try
|
||||
{
|
||||
return configuredStandard.generate(world, world.getChunkManager().getChunkGenerator(), world.random, pos);
|
||||
}
|
||||
finally
|
||||
{
|
||||
CarpetSettings.skipGenerationChecks.set(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -147,6 +173,22 @@ public class FeatureGenerator
|
||||
findFirst().map(Map.Entry::getValue).orElse(null);
|
||||
}
|
||||
|
||||
private static ConfiguredFeature<?, ?> getDefaultFeature(Feature<?> feature, ServerWorld world, BlockPos pos, boolean tryHard)
|
||||
{
|
||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> configuredStepFeatures = world.getBiome(pos).getGenerationSettings().getFeatures();
|
||||
for (List<Supplier<ConfiguredFeature<?, ?>>> step: configuredStepFeatures)
|
||||
for (Supplier<ConfiguredFeature<?, ?>> provider: step)
|
||||
{
|
||||
ConfiguredFeature<?, ?> configuredFeature = provider.get();
|
||||
if (configuredFeature.feature == feature)
|
||||
return configuredFeature;
|
||||
}
|
||||
if (!tryHard) return null;
|
||||
return world.getRegistryManager().get(Registry.CONFIGURED_FEATURE_KEY).getEntries().stream().
|
||||
filter(cS -> cS.getValue().feature == feature).
|
||||
findFirst().map(Map.Entry::getValue).orElse(null);
|
||||
}
|
||||
|
||||
public static <T extends FeatureConfig> StructureStart shouldStructureStartAt(ServerWorld world, BlockPos pos, StructureFeature<T> structure, boolean computeBox)
|
||||
{
|
||||
long seed = world.getSeed();
|
||||
|
||||
Reference in new issue
Block a user