Scripts in an Instantiate()'d object cant be accessed

I am instantiating an prefabed gameobject with some scripts in it, but later when I go to access those scripts it is as if they don’t exist.

Am I doing something wrong, or do these scripts not start() until next tick?
(And if so is there a way to wait for that without running a different script?)

GameObject prefabe = (GameObject)Resources.Load("ShipCore");
GameObject NewShip = (GameObject)Instantiate(prefabe, new Vector3(x, y, z), Quaternion.Euler(p, g, r));

ShipVoxelBuilder ShipBuilder = (ShipVoxelBuilder)NewShip.GetComponent("ShipVoxelBuilder");
ShipBuilder.AddBlock(x1, y1, z1, rot, type);

Console Error:

NullReferenceException: Object reference not set to an instance of an object
ShipVoxelBuilder.AddBlock (Int32 x, Int32 y, Int32 z, Int32 r, Int32 t)

ShipVoxelBuilder ShipBuilder = (ShipVoxelBuilder)NewShip.GetComponent(“ShipVoxelBuilder”);

Should be:

ShipVoxelBuilder ShipBuilder = NewShip.GetComponent<ShipVoxelBuilder>();

I took out (ShipVoxelBuilder) because it’s not necessary.

Also make sure your functions or any variables you are trying to access with that reference are set to public.