Collesion Mesh is not in correct spot

I recently added collision to my voxel game, but the collision mesh is floating in the air far away from the visible mesh, I’m not sure what exactly is wrong.

The last foreach loop in start is where I create and Instantiate the collision mesh.

public class World : MonoBehaviour {

    public GameObject worldItem;

    public GameObject collider;

    public Matrix4x4 id = Matrix4x4.identity;

    public Texture texture;

    Chunk chunk;

    public Material material;

    public int ViewDist = 1;

    MainTerrainGenerator terrainGenerator;

    FindChunk chunkHelp;

    private int chunksize = Chunk.chunksize;

    public Dictionary<Vector3Int, Chunk> chunks = new Dictionary<Vector3Int, Chunk>();

    void Awake() {
        terrainGenerator = worldItem.GetComponent<MainTerrainGenerator>();
        chunkHelp = new FindChunk();
        TextureManager.Initialize("Block Textures", texture);
    }

    private void Start() {
        //float[,] biome = terrainGenerator.BiomeMapGen(new Vector3Int(0, 0, 0));
        //biomeNoise.Add(new Vector3Int(0, 0, 0), biome);
        for (int x = 0; x < ViewDist; x++){
            for (int y = 0; y < ViewDist; y++){
                for (int z = 0; z < ViewDist; z++){
                    chunk = new Chunk(new Vector3Int(x * chunksize, y * chunksize, z * chunksize), this, terrainGenerator);

                    chunk.CreateChunkNoise();
                    chunk.GenerateChunkArray();

                    chunks.Add(chunk.pos, chunk);
                }
            }
        }
        foreach(Chunk chunk in chunks.Values){
            chunk.GrassCheck();
        }
        foreach(Chunk chunk in chunks.Values){
            chunk.GetMesh();
            GameObject col = Instantiate(collider, new Vector3(chunk.pos.x, chunk.pos.y, chunk.pos.z), Quaternion.identity);
            MeshCollider coll = col.GetComponent<MeshCollider>();
            coll.sharedMesh = chunk.mesh;
        }
    }

    private void Update() {
        foreach(Chunk chunk in chunks.Values){
            Graphics.DrawMesh(chunk.mesh, id, material, 0); 
        }
    }

    public Blocks GetBlock(Vector3Int pos, int x, int y, int z) {
        Vector3Int newpos = chunkHelp.ChunkToChunk(pos, x, y, z);
        Chunk neochunk;
        chunks.TryGetValue(newpos, out neochunk);

        if (neochunk == null){
            return Blocks.Stone;
        }

        Vector3Int nnpos = chunkHelp.ChunkToBlock(x, y, z);

        return neochunk.blocks[nnpos.x, nnpos.y, nnpos.z];
    }
}

Here’s what it looks like when in play.

It’s hard to tell what’s going on. However it seams you manually use DrawMesh to draw your chunks. However you use a single identity matrix for all of your chunks. That tells us that you actually generated the vertices for each chunk in worldspace coordinates. However the collider objects you instantiate are not placed at the world origin but you move them to their chunk positions. This makes no sense since the vertices are given in worldspace coordinates, so they already contain the chunk offset. So either create the meshes locally for each chunk and draw them with the proper chunk offset, or place all your collider objects at the world origin.