summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft')
-rw-r--r--src/main/java/net/minecraft/server/WorldChunkManager.java121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/WorldChunkManager.java b/src/main/java/net/minecraft/server/WorldChunkManager.java
new file mode 100644
index 00000000..3eff8654
--- /dev/null
+++ b/src/main/java/net/minecraft/server/WorldChunkManager.java
@@ -0,0 +1,121 @@
+package net.minecraft.server;
+
+import java.util.Random;
+
+public class WorldChunkManager {
+
+ private NoiseGeneratorOctaves2 e;
+ private NoiseGeneratorOctaves2 f;
+ private NoiseGeneratorOctaves2 g;
+ public double[] temperature;
+ public double[] rain;
+ public double[] c;
+ public BiomeBase[] d;
+
+ protected WorldChunkManager() {}
+
+ public WorldChunkManager(World world) {
+ this.e = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 9871L), 4);
+ this.f = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 39811L), 4);
+ this.g = new NoiseGeneratorOctaves2(new Random(world.getSeed() * 543321L), 2);
+ }
+
+ public BiomeBase a(ChunkCoordIntPair chunkcoordintpair) {
+ return this.getBiome(chunkcoordintpair.x << 4, chunkcoordintpair.z << 4);
+ }
+
+ public BiomeBase getBiome(int i, int j) {
+ return this.getBiomeData(i, j, 1, 1)[0];
+ }
+
+ public BiomeBase[] getBiomeData(int i, int j, int k, int l) {
+ this.d = this.a(this.d, i, j, k, l);
+ return this.d;
+ }
+
+ public double[] a(double[] adouble, int i, int j, int k, int l) {
+ if (adouble == null || adouble.length < k * l) {
+ adouble = new double[k * l];
+ }
+
+ adouble = this.e.a(adouble, (double) i, (double) j, k, l, 0.02500000037252903D, 0.02500000037252903D, 0.25D);
+ this.c = this.g.a(this.c, (double) i, (double) j, k, l, 0.25D, 0.25D, 0.5882352941176471D);
+ int i1 = 0;
+
+ for (int j1 = 0; j1 < k; ++j1) {
+ for (int k1 = 0; k1 < l; ++k1) {
+ double d0 = this.c[i1] * 1.1D + 0.5D;
+ double d1 = 0.01D;
+ double d2 = 1.0D - d1;
+ double d3 = (adouble[i1] * 0.15D + 0.7D) * d2 + d0 * d1;
+
+ d3 = 1.0D - (1.0D - d3) * (1.0D - d3);
+ if (d3 < 0.0D) {
+ d3 = 0.0D;
+ }
+
+ if (d3 > 1.0D) {
+ d3 = 1.0D;
+ }
+
+ adouble[i1] = d3;
+ ++i1;
+ }
+ }
+
+ return adouble;
+ }
+
+ public BiomeBase[] a(BiomeBase[] abiomebase, int i, int j, int k, int l) {
+ if (abiomebase == null || abiomebase.length < k * l) {
+ abiomebase = new BiomeBase[k * l];
+ }
+
+ this.temperature = this.e.a(this.temperature, (double) i, (double) j, k, k, 0.02500000037252903D, 0.02500000037252903D, 0.25D);
+ this.rain = this.f.a(this.rain, (double) i, (double) j, k, k, 0.05000000074505806D, 0.05000000074505806D, 0.3333333333333333D);
+ this.c = this.g.a(this.c, (double) i, (double) j, k, k, 0.25D, 0.25D, 0.5882352941176471D);
+ int i1 = 0;
+
+ for (int j1 = 0; j1 < k; ++j1) {
+ for (int k1 = 0; k1 < l; ++k1) {
+ double d0 = this.c[i1] * 1.1D + 0.5D;
+ double d1 = 0.01D;
+ double d2 = 1.0D - d1;
+ double d3 = (this.temperature[i1] * 0.15D + 0.7D) * d2 + d0 * d1;
+
+ d1 = 0.0020D;
+ d2 = 1.0D - d1;
+ double d4 = (this.rain[i1] * 0.15D + 0.5D) * d2 + d0 * d1;
+
+ d3 = 1.0D - (1.0D - d3) * (1.0D - d3);
+ if (d3 < 0.0D) {
+ d3 = 0.0D;
+ }
+
+ if (d4 < 0.0D) {
+ d4 = 0.0D;
+ }
+
+ if (d3 > 1.0D) {
+ d3 = 1.0D;
+ }
+
+ if (d4 > 1.0D) {
+ d4 = 1.0D;
+ }
+
+ this.temperature[i1] = d3;
+ this.rain[i1] = d4;
+ abiomebase[i1++] = BiomeBase.a(d3, d4);
+ }
+ }
+
+ return abiomebase;
+ }
+
+ // CraftBukkit start
+ public double getHumidity(int x, int z) {
+ return this.f.a(this.rain, (double)x, (double)z, 1, 1, 0.05000000074505806D, 0.05000000074505806D, 0.3333333333333333D)[0];
+ }
+ // CraftBukkit end
+}