Exemple #1
0
        private void TryToFall(net.minecraft.src.World world, int i, int j, int k)
        {
            int l  = i;
            int i1 = j;
            int j1 = k;

            if (CanFallBelow(world, l, i1 - 1, j1) && i1 >= 0)
            {
                byte byte0 = 32;
                if (fallInstantly || !world.CheckChunksExist(i - byte0, j - byte0, k - byte0, i +
                                                             byte0, j + byte0, k + byte0))
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                    for (; CanFallBelow(world, i, j - 1, k) && j > 0; j--)
                    {
                    }
                    if (j > 0)
                    {
                        world.SetBlockWithNotify(i, j, k, ID);
                    }
                }
                else
                {
                    net.minecraft.src.EntityFallingSand entityfallingsand = new net.minecraft.src.EntityFallingSand
                                                                                (world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F, ID);
                    world.AddEntity(entityfallingsand);
                }
            }
        }
Exemple #2
0
        public override void OnBlockRemoval(net.minecraft.src.World world, int i, int j,
                                            int k)
        {
            byte byte0 = 4;
            int  l     = byte0 + 1;

            if (world.CheckChunksExist(i - l, j - l, k - l, i + l, j + l, k + l))
            {
                for (int i1 = -byte0; i1 <= byte0; i1++)
                {
                    for (int j1 = -byte0; j1 <= byte0; j1++)
                    {
                        for (int k1 = -byte0; k1 <= byte0; k1++)
                        {
                            int l1 = world.GetBlockId(i + i1, j + j1, k + k1);
                            if (l1 != net.minecraft.src.Block.LEAVES.ID)
                            {
                                continue;
                            }
                            int i2 = world.GetBlockMetadata(i + i1, j + j1, k + k1);
                            if ((i2 & 8) == 0)
                            {
                                world.SetBlockMetadata(i + i1, j + j1, k + k1, i2 | 8);
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
        public override void OnBlockRemoval(net.minecraft.src.World world, int i, int j,
                                            int k)
        {
            int l  = 1;
            int i1 = l + 1;

            if (world.CheckChunksExist(i - i1, j - i1, k - i1, i + i1, j + i1, k + i1))
            {
                for (int j1 = -l; j1 <= l; j1++)
                {
                    for (int k1 = -l; k1 <= l; k1++)
                    {
                        for (int l1 = -l; l1 <= l; l1++)
                        {
                            int i2 = world.GetBlockId(i + j1, j + k1, k + l1);
                            if (i2 == net.minecraft.src.Block.LEAVES.ID)
                            {
                                int j2 = world.GetBlockMetadata(i + j1, j + k1, k + l1);
                                world.SetBlockMetadata(i + j1, j + k1, k + l1, j2 | 8);
                            }
                        }
                    }
                }
            }
        }
Exemple #4
0
        public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                        k, SharpBukkitLive.SharpBukkit.SharpRandom random)
        {
            if (world.singleplayerWorld)
            {
                return;
            }
            int l = world.GetBlockMetadata(i, j, k);

            if ((l & 8) != 0)
            {
                byte byte0 = 4;
                int  i1    = byte0 + 1;
                byte byte1 = 32;
                int  j1    = byte1 * byte1;
                int  k1    = byte1 / 2;
                if (adjacentTreeBlocks == null)
                {
                    adjacentTreeBlocks = new int[byte1 * byte1 * byte1];
                }
                if (world.CheckChunksExist(i - i1, j - i1, k - i1, i + i1, j + i1, k + i1))
                {
                    for (int l1 = -byte0; l1 <= byte0; l1++)
                    {
                        for (int k2 = -byte0; k2 <= byte0; k2++)
                        {
                            for (int i3 = -byte0; i3 <= byte0; i3++)
                            {
                                int k3 = world.GetBlockId(i + l1, j + k2, k + i3);
                                if (k3 == net.minecraft.src.Block.LOG.ID)
                                {
                                    adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = 0;
                                    continue;
                                }
                                if (k3 == net.minecraft.src.Block.LEAVES.ID)
                                {
                                    adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = -2;
                                }
                                else
                                {
                                    adjacentTreeBlocks[(l1 + k1) * j1 + (k2 + k1) * byte1 + (i3 + k1)] = -1;
                                }
                            }
                        }
                    }
                    for (int i2 = 1; i2 <= 4; i2++)
                    {
                        for (int l2 = -byte0; l2 <= byte0; l2++)
                        {
                            for (int j3 = -byte0; j3 <= byte0; j3++)
                            {
                                for (int l3 = -byte0; l3 <= byte0; l3++)
                                {
                                    if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] != i2 - 1)
                                    {
                                        continue;
                                    }
                                    if (adjacentTreeBlocks[((l2 + k1) - 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] == -
                                        2)
                                    {
                                        adjacentTreeBlocks[((l2 + k1) - 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] = i2;
                                    }
                                    if (adjacentTreeBlocks[(l2 + k1 + 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] == -2)
                                    {
                                        adjacentTreeBlocks[(l2 + k1 + 1) * j1 + (j3 + k1) * byte1 + (l3 + k1)] = i2;
                                    }
                                    if (adjacentTreeBlocks[(l2 + k1) * j1 + ((j3 + k1) - 1) * byte1 + (l3 + k1)] == -
                                        2)
                                    {
                                        adjacentTreeBlocks[(l2 + k1) * j1 + ((j3 + k1) - 1) * byte1 + (l3 + k1)] = i2;
                                    }
                                    if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1 + 1) * byte1 + (l3 + k1)] == -2)
                                    {
                                        adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1 + 1) * byte1 + (l3 + k1)] = i2;
                                    }
                                    if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + ((l3 + k1) - 1)] == -
                                        2)
                                    {
                                        adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + ((l3 + k1) - 1)] = i2;
                                    }
                                    if (adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1 + 1)] == -2)
                                    {
                                        adjacentTreeBlocks[(l2 + k1) * j1 + (j3 + k1) * byte1 + (l3 + k1 + 1)] = i2;
                                    }
                                }
                            }
                        }
                    }
                }
                int j2 = adjacentTreeBlocks[k1 * j1 + k1 * byte1 + k1];
                if (j2 >= 0)
                {
                    world.SetBlockMetadata(i, j, k, l & -9);
                }
                else
                {
                    RemoveLeaves(world, i, j, k);
                }
            }
        }