diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/RandomScatteredLargeFeature.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.World/RandomScatteredLargeFeature.cpp')
| -rw-r--r-- | Minecraft.World/RandomScatteredLargeFeature.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Minecraft.World/RandomScatteredLargeFeature.cpp b/Minecraft.World/RandomScatteredLargeFeature.cpp new file mode 100644 index 00000000..d460dc14 --- /dev/null +++ b/Minecraft.World/RandomScatteredLargeFeature.cpp @@ -0,0 +1,84 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.biome.h" +#include "ScatteredFeaturePieces.h" +#include "RandomScatteredLargeFeature.h" + +vector<Biome *> RandomScatteredLargeFeature::allowedBiomes; + +void RandomScatteredLargeFeature::staticCtor() +{ + allowedBiomes.push_back( Biome::desert ); + allowedBiomes.push_back( Biome::desertHills ); + allowedBiomes.push_back( Biome::jungle ); +} + +RandomScatteredLargeFeature::RandomScatteredLargeFeature() +{ +} + +bool RandomScatteredLargeFeature::isFeatureChunk(int x, int z, bool bIsSuperflat) +{ + int featureSpacing = 32; + int minFeatureSeparation = 8; + + int xx = x; + int zz = z; + if (x < 0) x -= featureSpacing - 1; + if (z < 0) z -= featureSpacing - 1; + + int xCenterFeatureChunk = x / featureSpacing; + int zCenterFeatureChunk = z / featureSpacing; + Random *r = level->getRandomFor(xCenterFeatureChunk, zCenterFeatureChunk, 14357617); + xCenterFeatureChunk *= featureSpacing; + zCenterFeatureChunk *= featureSpacing; + xCenterFeatureChunk += r->nextInt(featureSpacing - minFeatureSeparation); + zCenterFeatureChunk += r->nextInt(featureSpacing - minFeatureSeparation); + x = xx; + z = zz; + + bool forcePlacement = false; + LevelGenerationOptions *levelGenOptions = app.getLevelGenerationOptions(); + if( levelGenOptions != NULL ) + { + forcePlacement = levelGenOptions->isFeatureChunk(x,z,eFeature_Temples); + } + + if (forcePlacement || (x == xCenterFeatureChunk && z == zCenterFeatureChunk)) + { + bool biomeOk = level->getBiomeSource()->containsOnly(x * 16 + 8, z * 16 + 8, 0, allowedBiomes); + if (biomeOk) + { + // System.out.println("feature at " + (x * 16) + " " + (z * 16)); + return true; + } + } + + return false; + +} + +StructureStart *RandomScatteredLargeFeature::createStructureStart(int x, int z) +{ + // System.out.println("feature at " + (x * 16) + " " + (z * 16)); + return new ScatteredFeatureStart(level, random, x, z); +} + + +RandomScatteredLargeFeature::ScatteredFeatureStart::ScatteredFeatureStart(Level *level, Random *random, int chunkX, int chunkZ) +{ + if (level->getBiome(chunkX * 16 + 8, chunkZ * 16 + 8) == Biome::jungle) + { + ScatteredFeaturePieces::JunglePyramidPiece *startRoom = new ScatteredFeaturePieces::JunglePyramidPiece(random, chunkX * 16, chunkZ * 16); + pieces.push_back(startRoom); + // System.out.println("jungle feature at " + (chunkX * 16) + " " + (chunkZ * 16)); + } + else + { + ScatteredFeaturePieces::DesertPyramidPiece *startRoom = new ScatteredFeaturePieces::DesertPyramidPiece(random, chunkX * 16, chunkZ * 16); + pieces.push_back(startRoom); + // System.out.println("desert feature at " + (chunkX * 16) + " " + (chunkZ * 16)); + } + + calculateBoundingBox(); +}
\ No newline at end of file |
