Esempio n. 1
0
 public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                 k, SharpBukkitLive.SharpBukkit.SharpRandom random)
 {
     if (world.GetSavedLightValue(net.minecraft.src.EnumSkyBlock.Block, i, j, k) > 11)
     {
         DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
         world.SetBlockWithNotify(i, j, k, 0);
     }
 }
Esempio n. 2
0
        public virtual void Func_4107_a(net.minecraft.src.World world)
        {
            int i = (field_960_e - field_956_b) + 1;
            int j = (field_959_f - field_962_c) + 1;
            int k = (field_958_g - field_961_d) + 1;
            int l = i * j * k;

            if (l > 32768)
            {
                System.Console.Out.WriteLine("Light too large, skipping!");
                return;
            }
            int  i1    = 0;
            int  j1    = 0;
            bool flag  = false;
            bool flag1 = false;

            for (int k1 = field_956_b; k1 <= field_960_e; k1++)
            {
                for (int l1 = field_961_d; l1 <= field_958_g; l1++)
                {
                    int  i2    = k1 >> 4;
                    int  j2    = l1 >> 4;
                    bool flag2 = false;
                    if (flag && i2 == i1 && j2 == j1)
                    {
                        flag2 = flag1;
                    }
                    else
                    {
                        flag2 = world.DoChunksNearChunkExist(k1, 0, l1, 1);
                        if (flag2)
                        {
                            net.minecraft.src.Chunk chunk = world.GetChunkFromChunkCoords(k1 >> 4, l1 >> 4);
                            if (chunk.Func_21101_g())
                            {
                                flag2 = false;
                            }
                        }
                        flag1 = flag2;
                        i1    = i2;
                        j1    = j2;
                    }
                    if (!flag2)
                    {
                        continue;
                    }
                    if (field_962_c < 0)
                    {
                        field_962_c = 0;
                    }
                    if (field_959_f >= 128)
                    {
                        field_959_f = 127;
                    }
                    for (int k2 = field_962_c; k2 <= field_959_f; k2++)
                    {
                        int l2 = world.GetSavedLightValue(field_957_a, k1, k2, l1);
                        int i3 = 0;
                        int j3 = world.GetBlockId(k1, k2, l1);
                        int k3 = net.minecraft.src.Block.lightOpacity[j3];
                        if (k3 == 0)
                        {
                            k3 = 1;
                        }
                        int l3 = 0;
                        if (field_957_a == net.minecraft.src.EnumSkyBlock.Sky)
                        {
                            if (world.CanExistingBlockSeeTheSky(k1, k2, l1))
                            {
                                l3 = 15;
                            }
                        }
                        else
                        {
                            if (field_957_a == net.minecraft.src.EnumSkyBlock.Block)
                            {
                                l3 = net.minecraft.src.Block.lightValue[j3];
                            }
                        }
                        if (k3 >= 15 && l3 == 0)
                        {
                            i3 = 0;
                        }
                        else
                        {
                            int i4 = world.GetSavedLightValue(field_957_a, k1 - 1, k2, l1);
                            int k4 = world.GetSavedLightValue(field_957_a, k1 + 1, k2, l1);
                            int l4 = world.GetSavedLightValue(field_957_a, k1, k2 - 1, l1);
                            int i5 = world.GetSavedLightValue(field_957_a, k1, k2 + 1, l1);
                            int j5 = world.GetSavedLightValue(field_957_a, k1, k2, l1 - 1);
                            int k5 = world.GetSavedLightValue(field_957_a, k1, k2, l1 + 1);
                            i3 = i4;
                            if (k4 > i3)
                            {
                                i3 = k4;
                            }
                            if (l4 > i3)
                            {
                                i3 = l4;
                            }
                            if (i5 > i3)
                            {
                                i3 = i5;
                            }
                            if (j5 > i3)
                            {
                                i3 = j5;
                            }
                            if (k5 > i3)
                            {
                                i3 = k5;
                            }
                            i3 -= k3;
                            if (i3 < 0)
                            {
                                i3 = 0;
                            }
                            if (l3 > i3)
                            {
                                i3 = l3;
                            }
                        }
                        if (l2 == i3)
                        {
                            continue;
                        }
                        world.SetLightValue(field_957_a, k1, k2, l1, i3);
                        int j4 = i3 - 1;
                        if (j4 < 0)
                        {
                            j4 = 0;
                        }
                        world.NeighborLightPropagationChanged(field_957_a, k1 - 1, k2, l1, j4);
                        world.NeighborLightPropagationChanged(field_957_a, k1, k2 - 1, l1, j4);
                        world.NeighborLightPropagationChanged(field_957_a, k1, k2, l1 - 1, j4);
                        if (k1 + 1 >= field_960_e)
                        {
                            world.NeighborLightPropagationChanged(field_957_a, k1 + 1, k2, l1, j4);
                        }
                        if (k2 + 1 >= field_959_f)
                        {
                            world.NeighborLightPropagationChanged(field_957_a, k1, k2 + 1, l1, j4);
                        }
                        if (l1 + 1 >= field_958_g)
                        {
                            world.NeighborLightPropagationChanged(field_957_a, k1, k2, l1 + 1, j4);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        public override bool Generate(net.minecraft.src.World world, SharpBukkitLive.SharpBukkit.SharpRandom 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.Next(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;
                        }
                        net.minecraft.src.Material material = world.GetBlockMaterial(i + j1, j + j3, k +
                                                                                     j2);
                        if (j3 >= 4 && material.GetIsLiquid())
                        {
                            return(false);
                        }
                        if (j3 < 4 && !material.IsSolid() && world.GetBlockId(i + j1, j + j3, k + j2) !=
                            field_15005_a)
                        {
                            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, k3 < 4 ? field_15005_a : 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.GetBlockId(i + l1, (j + l3) - 1, k +
                                                                               l2) == net.minecraft.src.Block.DIRT.ID && world.GetSavedLightValue(net.minecraft.src.EnumSkyBlock
                                                                                                                                                  .Sky, i + l1, j + l3, k + l2) > 0)
                        {
                            world.SetBlock(i + l1, (j + l3) - 1, k + l2, net.minecraft.src.Block.GRASS.ID
                                           );
                        }
                    }
                }
            }
            if (net.minecraft.src.Block.blocksList[field_15005_a].blockMaterial == net.minecraft.src.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.Next(2) != 0) && world.GetBlockMaterial(i + i2,
                                                                                                   j + i4, k + i3).IsSolid())
                            {
                                world.SetBlock(i + i2, j + i4, k + i3, net.minecraft.src.Block.STONE.ID);
                            }
                        }
                    }
                }
            }
            return(true);
        }