// Path: src/nbt/map/pos/ChunkPosition.java
// public final class ChunkPosition extends Pair {
// 
//   /**
//    * Creates an own chunk position.
//    * 
//    * @param x The x coordinate.
//    * @param z The z coordinate.
//    */
//   public ChunkPosition(final int x, final int z) {
//     super(x, z);
//   }
// 
// }
// 
// Path: src/nbt/map/pos/InChunkPosition.java
// public class InChunkPosition extends Pair {
// 
//   /**
//    * Creates an in-chunk position.
//    * 
//    * @param x The x coordinate.
//    * @param z The z coordinate.
//    */
//   public InChunkPosition(final int x, final int z) {
//     super(x, z);
//   }
// 
// }


import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import nbt.map.pos.ChunkPosition;
import nbt.map.pos.InChunkPosition;

      @Override
      public void run() {
        try {
          synchronized(ChunkPainter.this) {
            ++numberOfThreads;
          }
          while(!isInterrupted()) {
            for(;;) {
              if(hasPendingChunks()) {
                break;
              }
              waitOnDrawer();
            }
            pollChunkAndDraw();
          }
        } catch(final InterruptedException e) {
          interrupt();
        } finally {
          synchronized(ChunkPainter.this) {
            --numberOfThreads;
          }
        }
      }

    };
    t.setDaemon(true);
    t.start();
  }

// Path: src/nbt/map/pos/ChunkPosition.java
// public final class ChunkPosition extends Pair {
// 
//   /**
//    * Creates an own chunk position.
//    * 
//    * @param x The x coordinate.
//    * @param z The z coordinate.
//    */
//   public ChunkPosition(final int x, final int z) {
//     super(x, z);
//   }
// 
// }
// 
// Path: src/nbt/map/pos/InChunkPosition.java
// public class InChunkPosition extends Pair {
// 
//   /**
//    * Creates an in-chunk position.
//    * 
//    * @param x The x coordinate.
//    * @param z The z coordinate.
//    */
//   public InChunkPosition(final int x, final int z) {
//     super(x, z);
//   }
// 
// }


// Path: src/nbt/map/ChunkPainter.java
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import nbt.map.pos.ChunkPosition;
import nbt.map.pos.InChunkPosition;


      @Override
      public void run() {
        try {
          synchronized(ChunkPainter.this) {
            ++numberOfThreads;
          }
          while(!isInterrupted()) {
            for(;;) {
              if(hasPendingChunks()) {
                break;
              }
              waitOnDrawer();
            }
            pollChunkAndDraw();
          }
        } catch(final InterruptedException e) {
          interrupt();
        } finally {
          synchronized(ChunkPainter.this) {
            --numberOfThreads;
          }
        }
      }

    };
    t.setDaemon(true);
    t.start();
  }

  private ChunkPosition pos;