Unexisting blocks colliding and existing block not colliding

Hey, so I’m creating a bad copy of minecraft that I won’t release and I’m having problems with collisions, for some reasons I sometimes with unexisting blocks and I don’t collide with existing blocks, anyone that can help me with it?

Movement code (and collision code too)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
	public bool isGrounded;
	public bool isSprinting;

	public Transform camera;
	public World world;

	public float walkSpeed = 3f;
	public float sprintSpeed = 6f;
	public float jumpForce = 5f;
	public float gravity = -9.8f;

	public float playerWidth = 0.15f;
	public float playerHeight = 1.8f;

	private float horizontal;
	private float vertical;
	private float mouseHorizontal;
	private float mouseVertical;
	private float verticalMomentum;
	private bool jumpRequest;
	private Vector3 velocity;

	private void FixedUpdate()
	{
		CalculateVelocity();
		if (jumpRequest)
			Jump();

		transform.Rotate(Vector3.up * mouseHorizontal);
		camera.Rotate(Vector3.right * -mouseVertical);
		transform.Translate(velocity, Space.World);
	}

	private void Update()
	{
		GetPlayerInputs();
	}

	void Jump()
	{
		verticalMomentum = jumpForce;
		isGrounded = false;
		jumpRequest = false;
	}

	private void CalculateVelocity()
	{
		if (verticalMomentum > gravity)
			verticalMomentum += Time.fixedDeltaTime * gravity;

		if (isSprinting)
			velocity = ((transform.forward * vertical) + (transform.right * horizontal)) * Time.fixedDeltaTime * sprintSpeed;
		else
			velocity = ((transform.forward * vertical) + (transform.right * horizontal)) * Time.fixedDeltaTime * walkSpeed;

		velocity += Vector3.up * verticalMomentum * Time.fixedDeltaTime;

		if ((velocity.z > 0 && front) || (velocity.z < 0 && back))
			velocity.z = 0;
		if ((velocity.x > 0 && right) || (velocity.x < 0 && left))
			velocity.x = 0;

		if (velocity.y < 0)
			velocity.y = checkDownSpeed(velocity.y);
		else if (velocity.y > 0)
			velocity.y = checkUpSpeed(velocity.y);
	}

	private void GetPlayerInputs()
	{
		horizontal = Input.GetAxis("Horizontal");
		vertical = Input.GetAxis("Vertical");
		mouseHorizontal = Input.GetAxis("MouseX");
		mouseVertical = Input.GetAxis("MouseY");

		if (Input.GetButtonDown("Sprint"))
			isSprinting = true;
		if (Input.GetButtonUp("Sprint"))
			isSprinting = false;

		if (isGrounded && Input.GetButtonDown("Jump"))
			jumpRequest = true;
	}

	private float checkDownSpeed(float downSpeed)
	{
		if
		(
			(world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y + downSpeed, transform.position.z - playerWidth) && (!left && !back)) ||
			(world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y + downSpeed, transform.position.z - playerWidth) && (!right && !back)) ||
			(world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y + downSpeed, transform.position.z + playerWidth) && (!right && !front)) ||
			(world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y + downSpeed, transform.position.z + playerWidth) && (!left && !front))
		)
		{
			isGrounded = true;
			return 0;
		}
		else
		{
			isGrounded = false;
			return downSpeed;
		}
	}

	private float checkUpSpeed(float upSpeed)
	{
		if
		(
			(world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y + playerHeight + upSpeed, transform.position.z - playerWidth) && (!left && !back)) ||
			(world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y + playerHeight + upSpeed, transform.position.z - playerWidth) && (!right && !back)) ||
			(world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y + playerHeight + upSpeed, transform.position.z + playerWidth) && (!right && !front)) ||
			(world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y + playerHeight + upSpeed, transform.position.z + playerWidth) && (!left && !front))
		)
		{
			verticalMomentum = 0;
			return 0;
		}
		else
		{
			return upSpeed;
		}
	}

	public bool front
	{
		get
		{
			if
			(
				world.CheckForVoxel(transform.position.x, transform.position.y, transform.position.z + playerWidth) ||
				world.CheckForVoxel(transform.position.x, transform.position.y + 1f, transform.position.z + playerWidth)
			)
				return true;
			else
				return false;
		}
	}

	public bool back
	{
		get
		{
			if
			(
				world.CheckForVoxel(transform.position.x, transform.position.y, transform.position.z - playerWidth) ||
				world.CheckForVoxel(transform.position.x, transform.position.y + 1f, transform.position.z - playerWidth)
			)
				return true;
			else
				return false;
		}
	}

	public bool left
	{
		get
		{
			if
			(
				world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y, transform.position.z) ||
				world.CheckForVoxel(transform.position.x - playerWidth, transform.position.y + 1f, transform.position.z)
			)
				return true;
			else
				return false;
		}
	}

	public bool right
	{
		get
		{
			if
			(
				world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y, transform.position.z) ||
				world.CheckForVoxel(transform.position.x + playerWidth, transform.position.y + 1f, transform.position.z)
			)
				return true;
			else
				return false;
		}
	}
}

Up! (Still didn’t fix it…)