aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/BiomeSource.h
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/BiomeSource.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/BiomeSource.h')
-rw-r--r--Minecraft.World/BiomeSource.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/Minecraft.World/BiomeSource.h b/Minecraft.World/BiomeSource.h
new file mode 100644
index 00000000..bef09db0
--- /dev/null
+++ b/Minecraft.World/BiomeSource.h
@@ -0,0 +1,106 @@
+#pragma once
+#include "Biome.h"
+#include "BiomeSource.h"
+#include "BiomeCache.h"
+#include "net.minecraft.world.level.levelgen.synth.h"
+
+class ChunkPos;
+class Level;
+class Layer;
+class TilePos;
+class LevelType;
+
+class BiomeSource
+{
+private:
+ shared_ptr<Layer> layer;
+ shared_ptr<Layer> zoomedLayer;
+public:
+ static const int CACHE_DIAMETER = 256;
+
+private:
+ BiomeCache *cache;
+
+ vector<Biome *> playerSpawnBiomes;
+
+protected:
+ void _init();
+ void _init(__int64 seed, LevelType *generator);
+ BiomeSource();
+
+public:
+ BiomeSource(__int64 seed, LevelType *generator);
+ BiomeSource(Level *level);
+private:
+ static bool getIsMatch(float *frac); // 4J added
+ static void getFracs(intArray indices, float *fracs); // 4J added
+public:
+#ifdef __PSVITA__
+ static __int64 findSeed(LevelType *generator, bool* pServerRunning); // MGH - added pRunning, so we can early out of this on Vita as it can take up to 60 secs // 4J added
+#else
+ static __int64 findSeed(LevelType *generator); // 4J added
+#endif
+ ~BiomeSource();
+
+public:
+ vector<Biome *> getPlayerSpawnBiomes() { return playerSpawnBiomes; }
+ virtual Biome *getBiome(ChunkPos *cp);
+ virtual Biome *getBiome(int x, int z);
+
+ // 4J - changed the interface for these methods, mainly for thread safety
+ virtual float getDownfall(int x, int z) const;
+ virtual floatArray getDownfallBlock(int x, int z, int w, int h) const;
+ virtual void getDownfallBlock(floatArray &downfalls, int x, int z, int w, int h) const;
+
+ // 4J - changed the interface for these methods, mainly for thread safety
+ virtual BiomeCache::Block *getBlockAt(int x, int y);
+ virtual float getTemperature(int x, int y, int z) const;
+ float scaleTemp(float temp, int y ) const; // 4J - brought forward from 1.2.3
+ virtual floatArray getTemperatureBlock(int x, int z, int w, int h) const;
+ virtual void getTemperatureBlock(floatArray& temperatures, int x, int z, int w, int h) const;
+
+ virtual BiomeArray getRawBiomeBlock(int x, int z, int w, int h) const;
+ virtual void getRawBiomeBlock(BiomeArray &biomes, int x, int z, int w, int h) const;
+ virtual void getRawBiomeIndices(intArray &biomes, int x, int z, int w, int h) const; // 4J added
+ virtual BiomeArray getBiomeBlock(int x, int z, int w, int h) const;
+ virtual void getBiomeBlock(BiomeArray& biomes, int x, int z, int w, int h, bool useCache) const;
+
+ virtual byteArray getBiomeIndexBlock(int x, int z, int w, int h) const;
+ virtual void getBiomeIndexBlock(byteArray& biomeIndices, int x, int z, int w, int h, bool useCache) const;
+
+ /**
+ * Checks if an area around a block contains only the specified biomes.
+ * Useful for placing elements like towns.
+ *
+ * This is a bit of a rough check, to make it as fast as possible. To ensure
+ * NO other biomes, add a margin of at least four blocks to the radius
+ */
+ virtual bool containsOnly(int x, int z, int r, vector<Biome *> allowed);
+
+ /**
+ * Checks if an area around a block contains only the specified biome.
+ * Useful for placing elements like towns.
+ *
+ * This is a bit of a rough check, to make it as fast as possible. To ensure
+ * NO other biomes, add a margin of at least four blocks to the radius
+ */
+ virtual bool containsOnly(int x, int z, int r, Biome *allowed);
+
+ /**
+ * Finds the specified biome within the radius. This will return a random
+ * position if several are found. This test is fairly rough.
+ *
+ * Returns null if the biome wasn't found
+ */
+ virtual TilePos *findBiome(int x, int z, int r, Biome *toFind, Random *random);
+
+ /**
+ * Finds one of the specified biomes within the radius. This will return a
+ * random position if several are found. This test is fairly rough.
+ *
+ * Returns null if the biome wasn't found
+ */
+ virtual TilePos *findBiome(int x, int z, int r, vector<Biome *> allowed, Random *random);
+
+ void update();
+};