@Override public void fill(ValueProvider provider) { for (int z = 0; z < nbZ; z++) { int offsetZ = z * nbXY; for (int y = 0; y < nbY; y++) { int offsetY = offsetZ + y * nbX; for (int x = 0; x < nbX; x++) { int index = offsetY + x; byte oldValue = tileTypes[index]; byte value = provider.getValue(x, y, z); if (oldValue != value) { tileTypes[index] = value; fireChange(x, y, z, oldValue, value); } } } } }