public static S21PacketChunkData.Extracted func_179756_a(
      Chunk p_179756_0_, boolean p_179756_1_, boolean p_179756_2_, int p_179756_3_) {
    ExtendedBlockStorage[] aextendedblockstorage = p_179756_0_.getBlockStorageArray();
    S21PacketChunkData.Extracted s21packetchunkdata$extracted = new S21PacketChunkData.Extracted();
    List<ExtendedBlockStorage> list = Lists.<ExtendedBlockStorage>newArrayList();

    for (int i = 0; i < aextendedblockstorage.length; ++i) {
      ExtendedBlockStorage extendedblockstorage = aextendedblockstorage[i];

      if (extendedblockstorage != null
          && (!p_179756_1_ || !extendedblockstorage.isEmpty())
          && (p_179756_3_ & 1 << i) != 0) {
        s21packetchunkdata$extracted.dataSize |= 1 << i;
        list.add(extendedblockstorage);
      }
    }

    s21packetchunkdata$extracted.data =
        new byte
            [func_180737_a(
                Integer.bitCount(s21packetchunkdata$extracted.dataSize), p_179756_2_, p_179756_1_)];
    int j = 0;

    for (ExtendedBlockStorage extendedblockstorage1 : list) {
      char[] achar = extendedblockstorage1.getData();

      for (char c0 : achar) {
        s21packetchunkdata$extracted.data[j++] = (byte) (c0 & 255);
        s21packetchunkdata$extracted.data[j++] = (byte) (c0 >> 8 & 255);
      }
    }

    for (ExtendedBlockStorage extendedblockstorage2 : list) {
      j =
          func_179757_a(
              extendedblockstorage2.getBlocklightArray().getData(),
              s21packetchunkdata$extracted.data,
              j);
    }

    if (p_179756_2_) {
      for (ExtendedBlockStorage extendedblockstorage3 : list) {
        j =
            func_179757_a(
                extendedblockstorage3.getSkylightArray().getData(),
                s21packetchunkdata$extracted.data,
                j);
      }
    }

    if (p_179756_1_) {
      func_179757_a(p_179756_0_.getBiomeArray(), s21packetchunkdata$extracted.data, j);
    }

    return s21packetchunkdata$extracted;
  }