Beispiel #1
0
        private bool Func_27031_a(net.minecraft.src.World world, int i, int j, int k, bool
                                  flag, int l, int i1)
        {
            int j1 = world.GetBlockId(i, j, k);

            if (j1 == net.minecraft.src.Block.GOLDEN_RAIL.ID)
            {
                int k1 = world.GetBlockMetadata(i, j, k);
                int l1 = k1 & 7;
                if (i1 == 1 && (l1 == 0 || l1 == 4 || l1 == 5))
                {
                    return(false);
                }
                if (i1 == 0 && (l1 == 1 || l1 == 2 || l1 == 3))
                {
                    return(false);
                }
                if ((k1 & 8) != 0)
                {
                    if (world.IsBlockIndirectlyGettingPowered(i, j, k) || world.IsBlockIndirectlyGettingPowered
                            (i, j + 1, k))
                    {
                        return(true);
                    }
                    else
                    {
                        return(Func_27032_a(world, i, j, k, k1, flag, l + 1));
                    }
                }
            }
            return(false);
        }
 public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                 k, SharpBukkitLive.SharpBukkit.SharpRandom random)
 {
     if (world.IsBlockIndirectlyGettingPowered(i, j, k) || world.IsBlockIndirectlyGettingPowered
             (i, j + 1, k))
     {
         DispenseItem(world, i, j, k, random);
     }
 }
 public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                            int j, int k, int l)
 {
     if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower())
     {
         bool flag = world.IsBlockIndirectlyGettingPowered(i, j, k) || world.IsBlockIndirectlyGettingPowered
                         (i, j + 1, k);
         if (flag)
         {
             world.ScheduleUpdateTick(i, j, k, ID, TickRate());
         }
     }
 }
Beispiel #4
0
 public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                            int j, int k, int l)
 {
     if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower() && world.IsBlockIndirectlyGettingPowered
             (i, j, k))
     {
         OnBlockDestroyedByPlayer(world, i, j, k, 1);
         world.SetBlockWithNotify(i, j, k, 0);
     }
 }
Beispiel #5
0
 public override void OnBlockAdded(net.minecraft.src.World world, int i, int j, int
                                   k)
 {
     base.OnBlockAdded(world, i, j, k);
     if (world.IsBlockIndirectlyGettingPowered(i, j, k))
     {
         OnBlockDestroyedByPlayer(world, i, j, k, 1);
         world.SetBlockWithNotify(i, j, k, 0);
     }
 }
Beispiel #6
0
        public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                                   int j, int k, int l)
        {
            int i1 = world.GetBlockMetadata(i, j, k);

            if ((i1 & 8) != 0)
            {
                if (world.GetBlockId(i, j - 1, k) != ID)
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                }
                if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower())
                {
                    OnNeighborBlockChange(world, i, j - 1, k, l);
                }
            }
            else
            {
                bool flag = false;
                if (world.GetBlockId(i, j + 1, k) != ID)
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                    flag = true;
                }
                if (!world.IsBlockNormalCube(i, j - 1, k))
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                    flag = true;
                    if (world.GetBlockId(i, j + 1, k) == ID)
                    {
                        world.SetBlockWithNotify(i, j + 1, k, 0);
                    }
                }
                if (flag)
                {
                    if (!world.singleplayerWorld)
                    {
                        DropBlockAsItem(world, i, j, k, i1);
                    }
                }
                else
                {
                    if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower())
                    {
                        bool flag1 = world.IsBlockIndirectlyGettingPowered(i, j, k) || world.IsBlockIndirectlyGettingPowered
                                         (i, j + 1, k);
                        Func_272_a(world, i, j, k, flag1);
                    }
                }
            }
        }
Beispiel #7
0
 private void Func_4038_g(net.minecraft.src.World world, int i, int j, int k, bool
                          flag)
 {
     if (world.singleplayerWorld)
     {
         return;
     }
     else
     {
         (new net.minecraft.src.RailLogic(this, world, i, j, k)).Func_596_a(world.IsBlockIndirectlyGettingPowered
                                                                                (i, j, k), flag);
         return;
     }
 }
Beispiel #8
0
        public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                                   int j, int k, int l)
        {
            if (world.singleplayerWorld)
            {
                return;
            }
            int i1 = world.GetBlockMetadata(i, j, k);
            int j1 = i;
            int k1 = k;

            if ((i1 & 3) == 0)
            {
                k1++;
            }
            if ((i1 & 3) == 1)
            {
                k1--;
            }
            if ((i1 & 3) == 2)
            {
                j1++;
            }
            if ((i1 & 3) == 3)
            {
                j1--;
            }
            if (!world.IsBlockNormalCube(j1, j, k1))
            {
                world.SetBlockWithNotify(i, j, k, 0);
                DropBlockAsItem(world, i, j, k, i1);
            }
            if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower())
            {
                bool flag = world.IsBlockIndirectlyGettingPowered(i, j, k);
                Func_28040_a(world, i, j, k, flag);
            }
        }
Beispiel #9
0
        public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                                   int j, int k, int l)
        {
            if (world.singleplayerWorld)
            {
                return;
            }
            int i1 = world.GetBlockMetadata(i, j, k);
            int j1 = i1;

            if (field_27034_a)
            {
                j1 &= 7;
            }
            bool flag = false;

            if (!world.IsBlockNormalCube(i, j - 1, k))
            {
                flag = true;
            }
            if (j1 == 2 && !world.IsBlockNormalCube(i + 1, j, k))
            {
                flag = true;
            }
            if (j1 == 3 && !world.IsBlockNormalCube(i - 1, j, k))
            {
                flag = true;
            }
            if (j1 == 4 && !world.IsBlockNormalCube(i, j, k - 1))
            {
                flag = true;
            }
            if (j1 == 5 && !world.IsBlockNormalCube(i, j, k + 1))
            {
                flag = true;
            }
            if (flag)
            {
                DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
                world.SetBlockWithNotify(i, j, k, 0);
            }
            else
            {
                if (ID == net.minecraft.src.Block.GOLDEN_RAIL.ID)
                {
                    bool flag1 = world.IsBlockIndirectlyGettingPowered(i, j, k) || world.IsBlockIndirectlyGettingPowered
                                     (i, j + 1, k);
                    flag1 = flag1 || Func_27032_a(world, i, j, k, i1, true, 0) || Func_27032_a(world,
                                                                                               i, j, k, i1, false, 0);
                    bool flag2 = false;
                    if (flag1 && (i1 & 8) == 0)
                    {
                        world.SetBlockMetadataWithNotify(i, j, k, j1 | 8);
                        flag2 = true;
                    }
                    else
                    {
                        if (!flag1 && (i1 & 8) != 0)
                        {
                            world.SetBlockMetadataWithNotify(i, j, k, j1);
                            flag2 = true;
                        }
                    }
                    if (flag2)
                    {
                        world.NotifyBlocksOfNeighborChange(i, j - 1, k, ID);
                        if (j1 == 2 || j1 == 3 || j1 == 4 || j1 == 5)
                        {
                            world.NotifyBlocksOfNeighborChange(i, j + 1, k, ID);
                        }
                    }
                }
                else
                {
                    if (l > 0 && net.minecraft.src.Block.blocksList[l].CanProvidePower() && !field_27034_a &&
                        net.minecraft.src.RailLogic.GetNAdjacentTracks(new net.minecraft.src.RailLogic
                                                                           (this, world, i, j, k)) == 3)
                    {
                        Func_4038_g(world, i, j, k, false);
                    }
                }
            }
        }
        private void Func_21031_a(net.minecraft.src.World world, int i, int j, int k, int
                                  l, int i1, int j1)
        {
            int k1 = world.GetBlockMetadata(i, j, k);
            int l1 = 0;

            wiresProvidePower = false;
            bool flag = world.IsBlockIndirectlyGettingPowered(i, j, k);

            wiresProvidePower = true;
            if (flag)
            {
                l1 = 15;
            }
            else
            {
                for (int i2 = 0; i2 < 4; i2++)
                {
                    int k2 = i;
                    int i3 = k;
                    if (i2 == 0)
                    {
                        k2--;
                    }
                    if (i2 == 1)
                    {
                        k2++;
                    }
                    if (i2 == 2)
                    {
                        i3--;
                    }
                    if (i2 == 3)
                    {
                        i3++;
                    }
                    if (k2 != l || j != i1 || i3 != j1)
                    {
                        l1 = GetMaxCurrentStrength(world, k2, j, i3, l1);
                    }
                    if (world.IsBlockNormalCube(k2, j, i3) && !world.IsBlockNormalCube(i, j + 1, k))
                    {
                        if (k2 != l || j + 1 != i1 || i3 != j1)
                        {
                            l1 = GetMaxCurrentStrength(world, k2, j + 1, i3, l1);
                        }
                        continue;
                    }
                    if (!world.IsBlockNormalCube(k2, j, i3) && (k2 != l || j - 1 != i1 || i3 != j1))
                    {
                        l1 = GetMaxCurrentStrength(world, k2, j - 1, i3, l1);
                    }
                }
                if (l1 > 0)
                {
                    l1--;
                }
                else
                {
                    l1 = 0;
                }
            }
            if (k1 != l1)
            {
                world.editingBlocks = true;
                world.SetBlockMetadataWithNotify(i, j, k, l1);
                world.MarkBlocksDirty(i, j, k, i, j, k);
                world.editingBlocks = false;
                for (int j2 = 0; j2 < 4; j2++)
                {
                    int l2 = i;
                    int j3 = k;
                    int k3 = j - 1;
                    if (j2 == 0)
                    {
                        l2--;
                    }
                    if (j2 == 1)
                    {
                        l2++;
                    }
                    if (j2 == 2)
                    {
                        j3--;
                    }
                    if (j2 == 3)
                    {
                        j3++;
                    }
                    if (world.IsBlockNormalCube(l2, j, j3))
                    {
                        k3 += 2;
                    }
                    int l3 = 0;
                    l3 = GetMaxCurrentStrength(world, l2, j, j3, -1);
                    l1 = world.GetBlockMetadata(i, j, k);
                    if (l1 > 0)
                    {
                        l1--;
                    }
                    if (l3 >= 0 && l3 != l1)
                    {
                        Func_21031_a(world, l2, j, j3, i, j, k);
                    }
                    l3 = GetMaxCurrentStrength(world, l2, k3, j3, -1);
                    l1 = world.GetBlockMetadata(i, j, k);
                    if (l1 > 0)
                    {
                        l1--;
                    }
                    if (l3 >= 0 && l3 != l1)
                    {
                        Func_21031_a(world, l2, k3, j3, i, j, k);
                    }
                }
                if (k1 == 0 || l1 == 0)
                {
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i, j, k));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i - 1, j, k));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i + 1, j, k));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i, j - 1, k));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i, j + 1, k));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i, j, k - 1));
                    field_21032_b.Add(new net.minecraft.src.ChunkPosition(i, j, k + 1));
                }
            }
        }