예제 #1
0
        public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                                   int j, int k, int l)
        {
            if (!CanBlockStay(world, i, j, k))
            {
                DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
                world.SetBlockWithNotify(i, j, k, 0);
                return;
            }
            int  i1   = world.GetBlockMetadata(i, j, k);
            bool flag = Func_22012_g(world, i, j, k, i1);
            int  j1   = (i1 & 0xc) >> 2;

            if (field_22015_c && !flag)
            {
                world.ScheduleUpdateTick(i, j, k, ID, field_22013_b[j1] * 2);
            }
            else
            {
                if (!field_22015_c && flag)
                {
                    world.ScheduleUpdateTick(i, j, k, ID, field_22013_b[j1] * 2);
                }
            }
        }
예제 #2
0
        public virtual void Func_272_a(net.minecraft.src.World world, int i, int j, int k
                                       , bool flag)
        {
            int l = world.GetBlockMetadata(i, j, k);

            if ((l & 8) != 0)
            {
                if (world.GetBlockId(i, j - 1, k) == ID)
                {
                    Func_272_a(world, i, j - 1, k, flag);
                }
                return;
            }
            bool flag1 = (world.GetBlockMetadata(i, j, k) & 4) > 0;

            if (flag1 == flag)
            {
                return;
            }
            if (world.GetBlockId(i, j + 1, k) == ID)
            {
                world.SetBlockMetadataWithNotify(i, j + 1, k, (l ^ 4) + 8);
            }
            world.SetBlockMetadataWithNotify(i, j, k, l ^ 4);
            world.MarkBlocksDirty(i, j - 1, k, i, j, k);
            world.SendSoundEffectToAllPlayersWithin64(null, 1003, i, j, k, 0);
        }
예제 #3
0
 public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                            int j, int k, int l)
 {
     if (Func_322_g(world, i, j, k))
     {
         int  i1   = world.GetBlockMetadata(i, j, k) & 7;
         bool flag = false;
         if (!world.IsBlockNormalCube(i - 1, j, k) && i1 == 1)
         {
             flag = true;
         }
         if (!world.IsBlockNormalCube(i + 1, j, k) && i1 == 2)
         {
             flag = true;
         }
         if (!world.IsBlockNormalCube(i, j, k - 1) && i1 == 3)
         {
             flag = true;
         }
         if (!world.IsBlockNormalCube(i, j, k + 1) && i1 == 4)
         {
             flag = true;
         }
         if (flag)
         {
             DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
             world.SetBlockWithNotify(i, j, k, 0);
         }
     }
 }
예제 #4
0
        public override void OnBlockRemoval(net.minecraft.src.World world, int i, int j,
                                            int k)
        {
            base.OnBlockRemoval(world, i, j, k);
            int l = world.GetBlockMetadata(i, j, k);

            if (l > 5 || l < 0)
            {
                return;                             // CRAFTBUKKIT - fixed a piston AIOOBE issue.
            }
            int j1 = net.minecraft.src.PistonBlockTextures.field_31052_a[Func_31045_b(l)];

            i += net.minecraft.src.PistonBlockTextures.field_31051_b[j1];
            j += net.minecraft.src.PistonBlockTextures.field_31054_c[j1];
            k += net.minecraft.src.PistonBlockTextures.field_31053_d[j1];
            int k1 = world.GetBlockId(i, j, k);

            if (k1 == net.minecraft.src.Block.PISTON.ID || k1 == net.minecraft.src.Block
                .PISTON_STICKY.ID)
            {
                int i1 = world.GetBlockMetadata(i, j, k);
                if (net.minecraft.src.BlockPistonBase.IsExtended(i1))
                {
                    net.minecraft.src.Block.blocksList[k1].DropBlockAsItem(world, i, j, k, i1);
                    world.SetBlockWithNotify(i, j, k, 0);
                }
            }
        }
예제 #5
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);
                            }
                        }
                    }
                }
            }
        }
예제 #6
0
        public static void UpdateFurnaceBlockState(bool flag, net.minecraft.src.World world
                                                   , int i, int j, int k)
        {
            int l = world.GetBlockMetadata(i, j, k);

            net.minecraft.src.TileEntity tileentity = world.GetBlockTileEntity(i, j, k);
            if (tileentity == null)
            {
                return;                                 // CRAFTBUKKIT
            }
            field_28034_c = true;
            if (flag)
            {
                world.SetBlockWithNotify(i, j, k, net.minecraft.src.Block.BURNING_FURNACE.ID
                                         );
            }
            else
            {
                world.SetBlockWithNotify(i, j, k, net.minecraft.src.Block.FURNACE.ID);
            }
            field_28034_c = false;
            world.SetBlockMetadataWithNotify(i, j, k, l);
            tileentity.Validate();
            world.SetBlockTileEntity(i, j, k, tileentity);
        }
예제 #7
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);
        }
예제 #8
0
        public static net.minecraft.src.ChunkCoordinates Func_22021_g(net.minecraft.src.World
                                                                      world, int i, int j, int k, int l)
        {
            int i1 = world.GetBlockMetadata(i, j, k);
            int j1 = Func_22019_c(i1);

            for (int k1 = 0; k1 <= 1; k1++)
            {
                int l1 = i - field_22023_a[j1][0] * k1 - 1;
                int i2 = k - field_22023_a[j1][1] * k1 - 1;
                int j2 = l1 + 2;
                int k2 = i2 + 2;
                for (int l2 = l1; l2 <= j2; l2++)
                {
                    for (int i3 = i2; i3 <= k2; i3++)
                    {
                        if (!world.IsBlockNormalCube(l2, j - 1, i3) || !world.IsAirBlock(l2, j, i3) || !world
                            .IsAirBlock(l2, j + 1, i3))
                        {
                            continue;
                        }
                        if (l > 0)
                        {
                            l--;
                        }
                        else
                        {
                            return(new net.minecraft.src.ChunkCoordinates(l2, j, i3));
                        }
                    }
                }
            }
            return(null);
        }
예제 #9
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);
                            }
                        }
                    }
                }
            }
        }
예제 #10
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);
            int j1 = Func_22019_c(i1);

            if (Func_22020_d(i1))
            {
                if (world.GetBlockId(i - field_22023_a[j1][0], j, k - field_22023_a[j1][1]) != ID)
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                }
            }
            else
            {
                if (world.GetBlockId(i + field_22023_a[j1][0], j, k + field_22023_a[j1][1]) != ID)
                {
                    world.SetBlockWithNotify(i, j, k, 0);
                    if (!world.singleplayerWorld)
                    {
                        DropBlockAsItem(world, i, j, k, i1);
                    }
                }
            }
        }
예제 #11
0
 public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                 k, SharpBukkitLive.SharpBukkit.SharpRandom random)
 {
     if (random.Next(5) == 0)
     {
         if (IsWaterNearby(world, i, j, k) || world.CanLightningStrikeAt(i, j + 1, k))
         {
             world.SetBlockMetadataWithNotify(i, j, k, 7);
         }
         else
         {
             int l = world.GetBlockMetadata(i, j, k);
             if (l > 0)
             {
                 world.SetBlockMetadataWithNotify(i, j, k, l - 1);
             }
             else
             {
                 if (!IsCropsNearby(world, i, j, k))
                 {
                     world.SetBlockWithNotify(i, j, k, net.minecraft.src.Block.DIRT.ID);
                 }
             }
         }
     }
 }
예제 #12
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);
            bool flag = false;

            if (i1 == 2 && world.IsBlockNormalCube(i, j, k + 1))
            {
                flag = true;
            }
            if (i1 == 3 && world.IsBlockNormalCube(i, j, k - 1))
            {
                flag = true;
            }
            if (i1 == 4 && world.IsBlockNormalCube(i + 1, j, k))
            {
                flag = true;
            }
            if (i1 == 5 && world.IsBlockNormalCube(i - 1, j, k))
            {
                flag = true;
            }
            if (!flag)
            {
                DropBlockAsItem(world, i, j, k, i1);
                world.SetBlockWithNotify(i, j, k, 0);
            }
            base.OnNeighborBlockChange(world, i, j, k, l);
        }
예제 #13
0
        public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                        k, SharpBukkitLive.SharpBukkit.SharpRandom random)
        {
            int  l    = world.GetBlockMetadata(i, j, k);
            bool flag = Func_22012_g(world, i, j, k, l);

            if (field_22015_c && !flag)
            {
                world.SetBlockAndMetadataWithNotify(i, j, k, net.minecraft.src.Block.DIODE_OFF
                                                    .ID, l);
            }
            else
            {
                if (!field_22015_c)
                {
                    world.SetBlockAndMetadataWithNotify(i, j, k, net.minecraft.src.Block.DIODE_ON
                                                        .ID, l);
                    if (!flag)
                    {
                        int i1 = (l & 0xc) >> 2;
                        world.ScheduleUpdateTick(i, j, k, net.minecraft.src.Block.DIODE_ON.
                                                 ID, field_22013_b[i1] * 2);
                    }
                }
            }
        }
예제 #14
0
 private static bool CanPushBlock(int i, net.minecraft.src.World world, int j, int
                                  k, int l, bool flag)
 {
     if (i == net.minecraft.src.Block.OBSIDIAN.ID)
     {
         return(false);
     }
     if (i == net.minecraft.src.Block.PISTON.ID || i == net.minecraft.src.Block
         .PISTON_STICKY.ID)
     {
         if (IsExtended(world.GetBlockMetadata(j, k, l)))
         {
             return(false);
         }
     }
     else
     {
         if (net.minecraft.src.Block.blocksList[i].GetHardness() == -1F)
         {
             return(false);
         }
         if (net.minecraft.src.Block.blocksList[i].GetMobilityFlag() == 2)
         {
             return(false);
         }
         if (!flag && net.minecraft.src.Block.blocksList[i].GetMobilityFlag() == 1)
         {
             return(false);
         }
     }
     net.minecraft.src.TileEntity tileentity = world.GetBlockTileEntity(j, k, l);
     return(tileentity == null);
 }
예제 #15
0
        public override bool IsIndirectlyPoweringTo(net.minecraft.src.World world, int i,
                                                    int j, int k, int l)
        {
            int i1 = world.GetBlockMetadata(i, j, k);

            if ((i1 & 8) == 0)
            {
                return(false);
            }
            int j1 = i1 & 7;

            if (j1 == 6 && l == 1)
            {
                return(true);
            }
            if (j1 == 5 && l == 1)
            {
                return(true);
            }
            if (j1 == 4 && l == 2)
            {
                return(true);
            }
            if (j1 == 3 && l == 3)
            {
                return(true);
            }
            if (j1 == 2 && l == 4)
            {
                return(true);
            }
            return(j1 == 1 && l == 5);
        }
예제 #16
0
        public override bool BlockActivated(net.minecraft.src.World world, int i, int j,
                                            int k, net.minecraft.src.EntityPlayer entityplayer)
        {
            if (blockMaterial == net.minecraft.src.Material.iron)
            {
                return(true);
            }
            int l = world.GetBlockMetadata(i, j, k);

            if ((l & 8) != 0)
            {
                if (world.GetBlockId(i, j - 1, k) == ID)
                {
                    BlockActivated(world, i, j - 1, k, entityplayer);
                }
                return(true);
            }
            if (world.GetBlockId(i, j + 1, k) == ID)
            {
                world.SetBlockMetadataWithNotify(i, j + 1, k, (l ^ 4) + 8);
            }
            world.SetBlockMetadataWithNotify(i, j, k, l ^ 4);
            world.MarkBlocksDirty(i, j - 1, k, i, j, k);
            world.SendSoundEffectToAllPlayersWithin64(entityplayer, 1003, i, j, k, 0);
            return(true);
        }
예제 #17
0
        public RailLogic(net.minecraft.src.BlockRail blockrail, net.minecraft.src.World world
                         , int i, int j, int k)
        {
            // Referenced classes of package net.minecraft.src:
            //            World, Block, BlockRail, ChunkPosition
            //        super();
            minecartTrack   = blockrail;
            connectedTracks = new List <ChunkPosition>();
            worldObj        = world;
            trackX          = i;
            trackY          = j;
            trackZ          = k;
            int l  = world.GetBlockId(i, j, k);
            int i1 = world.GetBlockMetadata(i, j, k);

            if (net.minecraft.src.BlockRail.Func_27033_a((net.minecraft.src.BlockRail)net.minecraft.src.Block
                                                         .blocksList[l]))
            {
                field_27084_f = true;
                i1           &= -9;
            }
            else
            {
                field_27084_f = false;
            }
            Func_27083_a(i1);
        }
예제 #18
0
        public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                                   int j, int k, int l)
        {
            int i1 = Func_31045_b(world.GetBlockMetadata(i, j, k));

            if (l > 5 || l < 0)
            {
                return;                             // CRAFTBUKKIT - fixed a piston AIOOBE issue.
            }
            int j1 = world.GetBlockId(i - net.minecraft.src.PistonBlockTextures.field_31051_b
                                      [i1], j - net.minecraft.src.PistonBlockTextures.field_31054_c[i1], k - net.minecraft.src.PistonBlockTextures
                                      .field_31053_d[i1]);

            if (j1 != net.minecraft.src.Block.PISTON.ID && j1 != net.minecraft.src.Block
                .PISTON_STICKY.ID)
            {
                world.SetBlockWithNotify(i, j, k, 0);
            }
            else
            {
                net.minecraft.src.Block.blocksList[j1].OnNeighborBlockChange(world, i - net.minecraft.src.PistonBlockTextures
                                                                             .field_31051_b[i1], j - net.minecraft.src.PistonBlockTextures.field_31054_c[i1],
                                                                             k - net.minecraft.src.PistonBlockTextures.field_31053_d[i1], l);
            }
        }
예제 #19
0
        public override void OnBlockPlaced(net.minecraft.src.World world, int i, int j, int
                                           k, int l)
        {
            int i1 = world.GetBlockMetadata(i, j, k);

            if (l == 1 && Func_31028_g(world, i, j - 1, k))
            {
                i1 = 5;
            }
            if (l == 2 && world.IsBlockNormalCube(i, j, k + 1))
            {
                i1 = 4;
            }
            if (l == 3 && world.IsBlockNormalCube(i, j, k - 1))
            {
                i1 = 3;
            }
            if (l == 4 && world.IsBlockNormalCube(i + 1, j, k))
            {
                i1 = 2;
            }
            if (l == 5 && world.IsBlockNormalCube(i - 1, j, k))
            {
                i1 = 1;
            }
            world.SetBlockMetadataWithNotify(i, j, k, i1);
        }
예제 #20
0
		public virtual void GrowTree(net.minecraft.src.World world, int i, int j, int k, 
			SharpBukkitLive.SharpBukkit.SharpRandom random)
		{
			int l = world.GetBlockMetadata(i, j, k) & 3;
			world.SetBlock(i, j, k, 0);
			object obj = null;
			if (l == 1) //TODO: Bukkit fix???
			{
				obj = new net.minecraft.src.WorldGenTaiga2();
			}
			else
			{
				if (l == 2)
				{
					obj = new net.minecraft.src.WorldGenForest();
				}
				else
				{
					obj = new net.minecraft.src.WorldGenTrees();
					if (random.Next(10) == 0)
					{
						obj = new net.minecraft.src.WorldGenBigTree();
					}
				}
			}
			if (!((net.minecraft.src.WorldGenerator)(obj)).Generate(world, random, i, j, k))
			{
				world.SetBlockAndMetadata(i, j, k, ID, l);
			}
		}
예제 #21
0
        private void UpdatePistonState(net.minecraft.src.World world, int i, int j, int k
                                       )
        {
            int  l    = world.GetBlockMetadata(i, j, k);
            int  i1   = GetOrientation(l);
            bool flag = IsPowered(world, i, j, k, i1);

            if (l == 7)
            {
                return;
            }
            if (flag && !IsExtended(l))
            {
                if (CanExtend(world, i, j, k, i1))                 //TODO: bukkit bool -> int return on CanExtend
                {
                    world.SetBlockMetadata(i, j, k, i1 | 8);
                    world.PlayNoteAt(i, j, k, 0, i1);
                }
            }
            else
            {
                if (!flag && IsExtended(l))
                {
                    world.SetBlockMetadata(i, j, k, i1);
                    world.PlayNoteAt(i, j, k, 1, i1);
                }
            }
        }
예제 #22
0
        private void Func_30004_i(net.minecraft.src.World world, int i, int j, int k)
        {
            int l = world.GetBlockMetadata(i, j, k);

            world.SetBlockAndMetadata(i, j, k, ID + 1, l);
            world.MarkBlocksDirty(i, j, k, i, j, k);
            world.MarkBlockNeedsUpdate(i, j, k);
        }
예제 #23
0
 public override void OnNeighborBlockChange(net.minecraft.src.World world, int i,
                                            int j, int k, int l)
 {
     if (!CanBlockStay(world, i, j, k))
     {
         DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
         world.SetBlockWithNotify(i, j, k, 0);
     }
 }
예제 #24
0
 protected internal void CheckBlockCoordValid(net.minecraft.src.World world, int i
                                              , int j, int k)
 {
     if (!CanBlockStay(world, i, j, k))
     {
         DropBlockAsItem(world, i, j, k, world.GetBlockMetadata(i, j, k));
         world.SetBlockWithNotify(i, j, k, 0);
     }
 }
예제 #25
0
 public Packet53BlockChange(int x, int y, int z, net.minecraft.src.World world)
 {
     isChunkDataPacket = true;
     xPosition         = x;
     yPosition         = y;
     zPosition         = z;
     type     = world.GetBlockId(x, y, z);
     metadata = world.GetBlockMetadata(x, y, z);
 }
예제 #26
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);
     }
 }
예제 #27
0
 public override void UpdateTick(net.minecraft.src.World world, int i, int j, int
                                 k, SharpBukkitLive.SharpBukkit.SharpRandom random)
 {
     base.UpdateTick(world, i, j, k, random);
     if (world.GetBlockMetadata(i, j, k) == 0)
     {
         OnBlockAdded(world, i, j, k);
     }
 }
예제 #28
0
        private void Func_30005_i(net.minecraft.src.World world, int i, int j, int k)
        {
            int l = world.GetBlockMetadata(i, j, k);

            world.editingBlocks = true;
            world.SetBlockAndMetadata(i, j, k, ID - 1, l);
            world.MarkBlocksDirty(i, j, k, i, j, k);
            world.ScheduleUpdateTick(i, j, k, ID - 1, TickRate());
            world.editingBlocks = false;
        }
예제 #29
0
        public override bool BlockActivated(net.minecraft.src.World world, int i, int j,
                                            int k, net.minecraft.src.EntityPlayer entityplayer)
        {
            int l  = world.GetBlockMetadata(i, j, k);
            int i1 = (l & 0xc) >> 2;

            i1 = i1 + 1 << 2 & 0xc;
            world.SetBlockMetadataWithNotify(i, j, k, i1 | l & 3);
            return(true);
        }
예제 #30
0
        public override net.minecraft.src.AxisAlignedBB GetCollisionBoundingBoxFromPool(net.minecraft.src.World
                                                                                        world, int i, int j, int k)
        {
            int   l  = world.GetBlockMetadata(i, j, k);
            float f  = 0.0625F;
            float f1 = (float)(1 + l * 2) / 16F;
            float f2 = 0.5F;

            return(net.minecraft.src.AxisAlignedBB.GetBoundingBoxFromPool((float)i + f1, j, (
                                                                              float)k + f, (float)(i + 1) - f, ((float)j + f2) - f, (float)(k + 1) - f));
        }