/// <summary>
        /// 
        /// </summary>
        /// <param name="w"></param>
        /// <param name="c"></param>
        public override void Generate(World w, Chunk c)
        {
            random = new Random(w.seed);
            int cx = c.x << 4, cz = c.z << 4;
            int waterLevel = 64 + 15 / 2 - 4;
            if (w.seed == 0)
            {
                for (int x = 0; x < 16; ++x)
                    for (int z = 0; z < 16; ++z)
                    {
                        for (int y = 0; y < 1; ++y)
                            c.UNCHECKEDPlaceBlock(x, y, z, 0x07);
                        for (int y = 1; y < 50; ++y)
                            c.UNCHECKEDPlaceBlock(x, y, z, 0x01);
                        for (int y = 50; y < 65; ++y)
                            c.UNCHECKEDPlaceBlock(x, y, z, 0x03);
                        c.UNCHECKEDPlaceBlock(x, 65, z, 0x02);
                    }
            }
            else
            {
                for (int x = 0; x < 16; x++)
                {
                    for (int z = 0; z < 16; z++)
                    {

                        int v = (int)(64 + voronoi.GetValue(cx + x, 5, cz + z) * 7 + (perlin2.GetValue(cx + x, 7, cz + z) + (perlin.GetValue(cx + x, 10, cz + z))) * 15);

                        // Bedrock
                        int bedrockHeight = random.Next(1, 6);
                        for (int y = 0; y < bedrockHeight; y++)
                            c.UNCHECKEDPlaceBlock(x, y, z, 0x07);

                        // Stone
                        for (int y = bedrockHeight; y < v - 5; y++)
                            c.UNCHECKEDPlaceBlock(x, y, z, 0x01);

                        // Dirt
                        for (int y = v - 5; y < v; y++)
                            c.UNCHECKEDPlaceBlock(x, y, z, (byte)(desertSelector.GetValue(cx + x, y, cz + z) > 0.4 ? 0x0C : 0x03));

                        if (v <= waterLevel)
                        {
                            c.UNCHECKEDPlaceBlock(x, v, z, 0x0C); // Send
                        }
                        else
                        {
                            c.UNCHECKEDPlaceBlock(x, v, z, (byte)(desertSelector.GetValue(cx + x, v, cz + z) > 0.35 ? 0x0C : 0x02));
                        }
                    }
                }

                for (int x = 0; x < 16; x++)
                {
                    //for( int y = 0; y < 128; y++ ) {
                    for (int z = 0; z < 16; z++)
                    {
                        var d = 0.0;
                        var prevV = (64 + voronoi.GetValue(cx + x, 5, cz + z) * 7 + (perlin2.GetValue(cx + x, 7, cz + z) + (perlin.GetValue(cx + x, 10, cz + z))) * 15);
                        if (prevV < waterLevel)
                            d = (waterLevel - prevV) * 0.78;

                        var v = (-mountains.GetValue(cx + x, 127, cz + z));
                        if (v >= d)
                        {
                            var h = (64 + (int)(v * 39));

                            int lvl = 0;

                            for (int y = h - 1; y >= 0; y--)
                            {
                                var mv = mountains2.GetValue(cx + x, y, cz + z);
                                bool desert = desertSelector.GetValue(cx + x, y, cz + z) > 0.4;
                                //if( mv > 0.4 ) {
                                if (lvl == 0)
                                    c.UNCHECKEDPlaceBlock(x, y, z, (byte)(desert ? 0x0C : 0x02));
                                else if (lvl < 5)
                                    c.UNCHECKEDPlaceBlock(x, y, z, (byte)(desert ? 0x0C : 0x03));
                                else
                                    c.UNCHECKEDPlaceBlock(x, y, z, 0x01);

                                ++lvl;
                                //}
                            }
                        }
                    }
                    //}
                }

                for (int x = 0; x < 16; x++)
                {
                    for (int z = 0; z < 16; z++)
                    {
                        for (int y = 0; y < 128; y++)
                        {
                            if (caves.GetValue(cx + x, y, cz + z) > (128 - y) * 0.0132)
                            {
                                c.UNCHECKEDPlaceBlock(x, y, z, 0x00);
                                if (c.SGB(x, y - 1, z) == 0x03)
                                    c.UNCHECKEDPlaceBlock(x, y - 1, z, 0x02);
                            }

                            if (y <= waterLevel && c.SGB(x, y, z) == 0x00)
                            {
                                c.UNCHECKEDPlaceBlock(x, y, z, 0x08);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="w"></param>
 /// <param name="c"></param>
 public override void Generate(World w, Chunk c)
 {
     //DateTime start = DateTime.Now;
     //int cx = c.x << 4, cz = c.z << 4;
     //int waterLevel = 64 + 15 / 2 - 4;
     if (w.seed == 0)
     {
         for (int x = 0; x < 16; ++x)
             for (int z = 0; z < 16; ++z)
             {
                 for (int y = 0; y < 1; ++y)
                     c.UNCHECKEDPlaceBlock(x, y, z, 0x07);
                 for (int y = 1; y < 50; ++y)
                     c.UNCHECKEDPlaceBlock(x, y, z, 0x01);
                 for (int y = 50; y < 65; ++y)
                     c.UNCHECKEDPlaceBlock(x, y, z, 0x03);
                 c.UNCHECKEDPlaceBlock(x, 65, z, 0x02);
             }
     }
     else
     {
         lock (this.blarg) // We have to do this otherwise shit gets f****d.
         {
             random.setSeed((long)c.x * 0x4f9939f508L + (long)c.z * 0x1ef1565bd5L);
             generateTerrain(c.x, c.z, c.blocks);
             //biomesForGeneration = worldObj.getWorldChunkManager().loadBlockGeneratorData(biomesForGeneration, i * 16, j * 16, 16, 16);
             replaceBlocksForBiome(c.x, c.z, c.blocks/*, biomesForGeneration*/);
             caveGenerator.generate(worldObj, c.x, c.z, c.blocks);
             if (field_35563_t)
             {
                 //field_35559_d.generate(this, worldObj, i, j, abyte0);
                 //field_35558_f.generate(this, worldObj, i, j, abyte0);
                 //field_35560_e.generate(this, worldObj, i, j, abyte0);
             }
             field_35564_x.generate(worldObj, c.x, c.z, c.blocks);
         }
     }
     //TimeSpan took = DateTime.Now - start;
     //Console.WriteLine(took.TotalMilliseconds);
 }