public NoisePerlin(java.util.Random random) { permutations = new int[512]; xCoord = random.nextDouble() * 256D; yCoord = random.nextDouble() * 256D; zCoord = random.nextDouble() * 256D; for(int i = 0; i < 256; i++) { permutations[i] = i; } for(int j = 0; j < 256; j++) { int k = random.nextInt(256 - j) + j; int l = permutations[j]; permutations[j] = permutations[k]; permutations[k] = l; permutations[j + 256] = permutations[j]; } }
public override bool generate(World world, java.util.Random random, int i, int j, int k) { float f = random.nextFloat() * 3.141593F; double d = (float)(i + 8) + (MathHelper.sin(f) * (float)numberOfBlocks) / 8F; double d1 = (float)(i + 8) - (MathHelper.sin(f) * (float)numberOfBlocks) / 8F; double d2 = (float)(k + 8) + (MathHelper.cos(f) * (float)numberOfBlocks) / 8F; double d3 = (float)(k + 8) - (MathHelper.cos(f) * (float)numberOfBlocks) / 8F; double d4 = (j + random.nextInt(3)) - 2; double d5 = (j + random.nextInt(3)) - 2; for (int l = 0; l <= numberOfBlocks; l++) { double d6 = d + ((d1 - d) * (double)l) / (double)numberOfBlocks; double d7 = d4 + ((d5 - d4) * (double)l) / (double)numberOfBlocks; double d8 = d2 + ((d3 - d2) * (double)l) / (double)numberOfBlocks; double d9 = (random.nextDouble() * (double)numberOfBlocks) / 16D; double d10 = (double)(MathHelper.sin(((float)l * 3.141593F) / (float)numberOfBlocks) + 1.0F) * d9 + 1.0D; double d11 = (double)(MathHelper.sin(((float)l * 3.141593F) / (float)numberOfBlocks) + 1.0F) * d9 + 1.0D; int i1 = MathHelper.floor_double(d6 - d10 / 2D); int j1 = MathHelper.floor_double(d7 - d11 / 2D); int k1 = MathHelper.floor_double(d8 - d10 / 2D); int l1 = MathHelper.floor_double(d6 + d10 / 2D); int i2 = MathHelper.floor_double(d7 + d11 / 2D); int j2 = MathHelper.floor_double(d8 + d10 / 2D); for (int k2 = i1; k2 <= l1; k2++) { double d12 = (((double)k2 + 0.5D) - d6) / (d10 / 2D); if (d12 * d12 >= 1.0D) { continue; } for (int l2 = j1; l2 <= i2; l2++) { double d13 = (((double)l2 + 0.5D) - d7) / (d11 / 2D); if (d12 * d12 + d13 * d13 >= 1.0D) { continue; } for (int i3 = k1; i3 <= j2; i3++) { double d14 = (((double)i3 + 0.5D) - d8) / (d10 / 2D); if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && world.GetBlock(k2, l2, i3) == (byte)Blocks.Stone) { world.SetBlock(k2, l2, i3, (byte)minableBlockId); } } } } } return true; }
public override bool generate(World world, java.util.Random random, int i, int j, int k) { i -= 8; for(k -= 8; j > 0 && world.IsAirBlock(i, j, k); j--) { } j -= 4; bool[] aflag = new bool[2048]; int l = random.nextInt(4) + 4; for(int i1 = 0; i1 < l; i1++) { double d = random.nextDouble() * 6D + 3D; double d1 = random.nextDouble() * 4D + 2D; double d2 = random.nextDouble() * 6D + 3D; double d3 = random.nextDouble() * (16D - d - 2D) + 1.0D + d / 2D; double d4 = random.nextDouble() * (8D - d1 - 4D) + 2D + d1 / 2D; double d5 = random.nextDouble() * (16D - d2 - 2D) + 1.0D + d2 / 2D; for(int j4 = 1; j4 < 15; j4++) { for(int k4 = 1; k4 < 15; k4++) { for(int l4 = 1; l4 < 7; l4++) { double d6 = ((double)j4 - d3) / (d / 2D); double d7 = ((double)l4 - d4) / (d1 / 2D); double d8 = ((double)k4 - d5) / (d2 / 2D); double d9 = d6 * d6 + d7 * d7 + d8 * d8; if(d9 < 1.0D) { aflag[(j4 * 16 + k4) * 8 + l4] = true; } } } } } for(int j1 = 0; j1 < 16; j1++) { for(int j2 = 0; j2 < 16; j2++) { for(int j3 = 0; j3 < 8; j3++) { bool flag = !aflag[(j1 * 16 + j2) * 8 + j3] && (j1 < 15 && aflag[((j1 + 1) * 16 + j2) * 8 + j3] || j1 > 0 && aflag[((j1 - 1) * 16 + j2) * 8 + j3] || j2 < 15 && aflag[(j1 * 16 + (j2 + 1)) * 8 + j3] || j2 > 0 && aflag[(j1 * 16 + (j2 - 1)) * 8 + j3] || j3 < 7 && aflag[(j1 * 16 + j2) * 8 + (j3 + 1)] || j3 > 0 && aflag[(j1 * 16 + j2) * 8 + (j3 - 1)]); if(!flag) { continue; } byte block = world.GetBlock(i + j1, j + j3, k + j2); if(j3 >= 4 && BlockData.IsLiquid(block)) { return false; } if (j3 < 4 && !BlockData.IsSolid(block) && world.GetBlock(i + j1, j + j3, k + j2) != blockIndex) { return false; } } } } for(int k1 = 0; k1 < 16; k1++) { for(int k2 = 0; k2 < 16; k2++) { for(int k3 = 0; k3 < 8; k3++) { if(aflag[(k1 * 16 + k2) * 8 + k3]) { world.SetBlock(i + k1, j + k3, k + k2, (byte)(k3 < 4 ? blockIndex : 0)); } } } } for(int l1 = 0; l1 < 16; l1++) { for(int l2 = 0; l2 < 16; l2++) { for(int l3 = 4; l3 < 8; l3++) { if(aflag[(l1 * 16 + l2) * 8 + l3] && world.GetBlock(i + l1, (j + l3) - 1, k + l2) == (byte)Blocks.Dirt /*&& world.getSavedLightValue(EnumSkyBlock.Sky, i + l1, j + l3, k + l2) > 0*/) // TODO: Lighting stuffs! { world.SetBlock(i + l1, (j + l3) - 1, k + l2, (byte)Blocks.Grass); } } } } if(BlockData.BlockMaterial((byte)blockIndex) == Material.Lava) { for(int i2 = 0; i2 < 16; i2++) { for(int i3 = 0; i3 < 16; i3++) { for(int i4 = 0; i4 < 8; i4++) { bool flag1 = !aflag[(i2 * 16 + i3) * 8 + i4] && (i2 < 15 && aflag[((i2 + 1) * 16 + i3) * 8 + i4] || i2 > 0 && aflag[((i2 - 1) * 16 + i3) * 8 + i4] || i3 < 15 && aflag[(i2 * 16 + (i3 + 1)) * 8 + i4] || i3 > 0 && aflag[(i2 * 16 + (i3 - 1)) * 8 + i4] || i4 < 7 && aflag[(i2 * 16 + i3) * 8 + (i4 + 1)] || i4 > 0 && aflag[(i2 * 16 + i3) * 8 + (i4 - 1)]); if(flag1 && (i4 < 4 || random.nextInt(2) != 0) && BlockData.IsSolid(world.GetBlock(i + i2, j + i4, k + i3))) { world.SetBlock(i + i2, j + i4, k + i3, (byte)Blocks.Stone); } } } } } return true; }