public Chunk getOrCreateChunk(int x, int z) {
    random.setSeed((long) x * 341873128712L + (long) z * 132897987541L);
    byte[] types = generator.generate(world.getWorld(), random, x, z);

    Chunk chunk = new Chunk(world, types, x, z);

    chunk.initLighting();

    return chunk;
  }
  public ChunkMap djChunkMap(Chunk chunk, boolean flag, int paramInt) {
    int i = 0;
    ChunkSection[] arrayOfChunkSection = chunk.i();
    int j = 0;
    ChunkMap localChunkMap = new ChunkMap();
    byte[] arrayOfByte1 = buildBuffer;

    if (flag) {
      chunk.seenByPlayer = true;
    }
    int k;
    for (k = 0; k < arrayOfChunkSection.length; ++k)
      if ((arrayOfChunkSection[k] != null)
          && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
          && ((paramInt & 1 << k) != 0)) {
        localChunkMap.b |= 1 << k;
        if (arrayOfChunkSection[k].getExtendedIdArray() != null) {
          localChunkMap.c |= 1 << k;
          ++j;
        }
      }
    byte[] byteObject;
    NibbleArray nibObject;
    for (k = 0; k < arrayOfChunkSection.length; ++k) {
      if ((arrayOfChunkSection[k] != null)
          && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
          && ((paramInt & 1 << k) != 0)) {
        byteObject = replaceCoveredBlocks(chunk, arrayOfChunkSection[k]);
        System.arraycopy(byteObject, 0, arrayOfByte1, i, byteObject.length);
        i += byteObject.length;
      }
    }
    for (k = 0; k < arrayOfChunkSection.length; ++k) {
      if ((arrayOfChunkSection[k] != null)
          && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
          && ((paramInt & 1 << k) != 0)) {
        nibObject = arrayOfChunkSection[k].getDataArray();
        System.arraycopy(nibObject.a, 0, arrayOfByte1, i, nibObject.a.length);
        i += nibObject.a.length;
      }
    }
    for (k = 0; k < arrayOfChunkSection.length; ++k) {
      if ((arrayOfChunkSection[k] != null)
          && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
          && ((paramInt & 1 << k) != 0)) {
        nibObject = arrayOfChunkSection[k].getEmittedLightArray();
        System.arraycopy(nibObject.a, 0, arrayOfByte1, i, nibObject.a.length);
        i += nibObject.a.length;
      }
    }
    if (!(chunk.world.worldProvider.g)) {
      for (k = 0; k < arrayOfChunkSection.length; ++k) {
        if ((arrayOfChunkSection[k] != null)
            && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
            && ((paramInt & 1 << k) != 0)) {
          nibObject = arrayOfChunkSection[k].getSkyLightArray();
          System.arraycopy(nibObject.a, 0, arrayOfByte1, i, nibObject.a.length);
          i += nibObject.a.length;
        }
      }
    }

    if (j > 0) {
      for (k = 0; k < arrayOfChunkSection.length; ++k) {
        if ((arrayOfChunkSection[k] != null)
            && (((!(flag)) || (!(arrayOfChunkSection[k].isEmpty()))))
            && (arrayOfChunkSection[k].getExtendedIdArray() != null)
            && ((paramInt & 1 << k) != 0)) {
          nibObject = arrayOfChunkSection[k].getExtendedIdArray();
          System.arraycopy(nibObject.a, 0, arrayOfByte1, i, nibObject.a.length);
          i += nibObject.a.length;
        }
      }
    }

    if (flag) {
      byte[] arrayOfByte2 = chunk.m();
      System.arraycopy(arrayOfByte2, 0, arrayOfByte1, i, arrayOfByte2.length);
      i += arrayOfByte2.length;
    }

    localChunkMap.a = new byte[i];
    System.arraycopy(arrayOfByte1, 0, localChunkMap.a, 0, i);

    return ((ChunkMap) localChunkMap);
  }