Skips the Arrays at 2 dimensional arrays

I build a LED cube and now I have to program it.
Currently, the issue is that when I want to use a 2 dimension array, it just skips the other 3 and always shows me the first one of the array.

That is what shows the Serial Monitor:

0
0
0
0
0
0
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
3
3
0
0
0
0
0
0
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
3
3
0
0
0
0
0
0

Schematic:

Layout:

Cube:

Code:

const int DATA_PIN = 4;
const int CLOCK_PIN = 3;
const int LATCH_PIN = 2;

const int LAYER_1 = 8;
const int LAYER_2 = 9;
const int LAYER_3 = 10;
const int LAYER_4 = 11;

byte bytes[][6] = {
  //blue                //green               //red
  {B00000000, B00000000, B11000000, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00110000, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00001100, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00000011, B00000000, B00000000, B00000000}
};



void setup() {
  // put your setup code here, to run once:
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  
  pinMode(LAYER_1, OUTPUT);
  pinMode(LAYER_2, OUTPUT);
  pinMode(LAYER_3, OUTPUT);
  pinMode(LAYER_4, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  
//  for(int i = 0; i<5;i++)
//  {
  digitalWrite(LAYER_1, HIGH);
  for(int j = 0; j < 4;j++)
  {
    digitalWrite(LATCH_PIN, LOW);
    for (int i = 0; i < 6; i++)
    {
      Serial.println(j);
      digitalWrite(CLOCK_PIN, LOW);
      shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bytes[j][i]);
    }
  digitalWrite(LATCH_PIN, HIGH);
  delay(500);
  digitalWrite(LAYER_1, LOW);
  delay(500);
  }
//  }
}

You only ever told it to print the j. You never tell it to print i. So what you see printed is exactly what I would expect you to see.

Maybe print the entry from bytes there so you can see which entry from the array got picked up. And print i too just for good measure.

EliasMartinelli:
Currently, the issue is that when I want to use a 2 dimension array, it just skips the other 3 and always shows me the first one of the array.

Not sure what you mean by "the first one". Do you mean "LAYER_1" of your cube? That's the only layer you light up. Each layer need 16 bits (two bytes) for each of the three colors, so 6 bytes per layer. You have four layers worth of data and you have four layers but you only ever turn on LAYER_1. To light up a different layer you will have to set the other layer's pin to HIGH. Easiest way is with an array of pin numbers.

const int DATA_PIN = 4;
const int CLOCK_PIN = 3;
const int LATCH_PIN = 2;


const int LAYER_1 = 8;
const int LAYER_2 = 9;
const int LAYER_3 = 10;
const int LAYER_4 = 11;


const byte LayerPins[4] = {LAYER_1, LAYER_2, LAYER_3, LAYER_4};


byte Layers[4][6] =
{
  //blue                //green               //red
  {B00000000, B00000000, B11000000, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00110000, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00001100, B00000000, B00000000, B00000000},
  {B00000000, B00000000, B00000011, B00000000, B00000000, B00000000}
};
void setup()
{
  // put your setup code here, to run once:
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);


  pinMode(LAYER_1, OUTPUT);
  pinMode(LAYER_2, OUTPUT);
  pinMode(LAYER_3, OUTPUT);
  pinMode(LAYER_4, OUTPUT);
  Serial.begin(9600);
}


void loop()
{
  for (byte layer = 0; layer < 4; layer++)
  {
    digitalWrite(LATCH_PIN, LOW);
    // Fill the layer buffer
    for (int i = 0; i < 6; i++)
    {
      digitalWrite(CLOCK_PIN, LOW);  // ???
      shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, Layers[layer][i]);
    }
    // Transfer the layer buffer to the output pins
    digitalWrite(LATCH_PIN, HIGH);


    // Light up the layer
    digitalWrite(LayerPins[layer], HIGH);
    delay(5);  // Increasing the delay will increase both brightness and flicker
    digitalWrite(LayerPins[layer], LOW);
  }
}
      Serial.println(j);

Anonymous printing sucks. Print something before EVERY value, so you have a clue what that value means.

Printing j seems pointless. Printing bytes[ j ][ i ] makes more sense.