I tried to multiply the entitys world by a translation matrix, but when it moved the model, it went through the ground
This happens because setting the world transform (or setting the orientation or position) directly is a form of teleportation. Instead of moving dynamically to the new position, it snaps directly to the state with no respect for collisions or geometry. In the new invalid state, only the springy penetration correction can work. Additional teleportations can easily push an object through the world before correction can recover it.
To avoid this, objects should be moved with impulses and velocities, not teleportation.
I want to know how to make it so that physics will apply on the x and z axis, but NOT the y axis
Set the entity's LocalInertiaTensorInverse to the zero matrix. That gives the character essentially infinite rotational inertia. Nothing except direct developer intervention can cause such objects to rotate.
To restrict certain axes, set the related row in the inertia tensor inverse to zeroes. However, for a character, I would recommend not allowing rotation around any axis. Doing so either allows them to fall over or to spin when they walk along walls. Directional control can be done without modifying the physical orientation of the character at all and considering it a pure game logic concept.
I first want to know how to move the player with physics and in the direction they are pointing
It sounds like you want a character controller. A robust CharacterController and SphereCharacterController are available in the BEPUphysicsDemos in the
main source download. I would strongly recommend using them over creating a new one; they are tricky to get right.
If you don't want full featured FPS motion, making an entity and controlling its velocity with the LinearVelocity property is a good start.