public AtomicPaletteBlockStore(
     int shift,
     boolean storeState,
     int dirtySize,
     int[] palette,
     int blockArrayWidth,
     int[] variableWidthBlockArray) {
   this(shift, storeState, dirtySize);
   store.set(palette, blockArrayWidth, variableWidthBlockArray);
 }
 @Override
 public int getAndSetBlock(int x, int y, int z, short id, short data) {
   int oldState = BlockFullState.getPacked(id, data);
   int newState = 0;
   try {
     return newState = store.set(getIndex(x, y, z), oldState);
   } finally {
     markDirty(x, y, z, oldState, newState);
   }
 }
 public AtomicPaletteBlockStore(
     int shift, boolean storeState, int dirtySize, short[] blocks, short[] data) {
   this(shift, storeState, dirtySize);
   if (blocks != null) {
     int[] initial = new int[Math.min(blocks.length, this.length)];
     for (int i = 0; i < blocks.length; i++) {
       short d = data != null ? data[i] : 0;
       initial[i] = BlockFullState.getPacked(blocks[i], d);
     }
     store.set(initial);
   }
 }