Ejemplo n.º 1
0
        /// <summary>
        /// Called to update the entity's position/logic.
        /// </summary>
        public override void OnUpdate()
        {
            if (BlockID == 0)
            {
                SetDead();
                return;
            }

            PrevPosX = PosX;
            PrevPosY = PosY;
            PrevPosZ = PosZ;
            FallTime++;
            MotionY -= 0.039999999105930328F;
            MoveEntity(MotionX, MotionY, MotionZ);
            MotionX *= 0.98000001907348633F;
            MotionY *= 0.98000001907348633F;
            MotionZ *= 0.98000001907348633F;
            int i = MathHelper2.Floor_double(PosX);
            int j = MathHelper2.Floor_double(PosY);
            int k = MathHelper2.Floor_double(PosZ);

            if (FallTime == 1 && WorldObj.GetBlockId(i, j, k) == BlockID)
            {
                WorldObj.SetBlockWithNotify(i, j, k, 0);
            }
            else if (!WorldObj.IsRemote && FallTime == 1)
            {
                SetDead();
            }

            if (OnGround)
            {
                MotionX *= 0.69999998807907104F;
                MotionZ *= 0.69999998807907104F;
                MotionY *= -0.5F;

                if (WorldObj.GetBlockId(i, j, k) != Block.PistonMoving.BlockID)
                {
                    SetDead();

                    if ((!WorldObj.CanBlockBePlacedAt(BlockID, i, j, k, true, 1) || BlockSand.CanFallBelow(WorldObj, i, j - 1, k) || !WorldObj.SetBlockWithNotify(i, j, k, BlockID)) && !WorldObj.IsRemote)
                    {
                        DropItem(BlockID, 1);
                    }
                }
            }
            else if (FallTime > 100 && !WorldObj.IsRemote && (j < 1 || j > 256) || FallTime > 600)
            {
                DropItem(BlockID, 1);
                SetDead();
            }
        }