blob: 737a7e247fdc3f48e180d8a95f27abd7674a95ea [file] [log] [blame] [raw]
package togos.minecraft.maprend;
import java.io.File;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionMap
{
static class Region {
public int rx, rz;
public String regionFile;
}
public List regions = new ArrayList();
public int minX=Integer.MAX_VALUE, minZ=Integer.MAX_VALUE, maxX=Integer.MIN_VALUE, maxZ=Integer.MIN_VALUE;
public Region[] xzMap() {
int width = maxX-minX+1;
int depth = maxZ-minZ+1;
Region[] m = new Region[width*depth];
for( Iterator i=regions.iterator(); i.hasNext(); ) {
Region r = (Region)i.next();
m[ (r.rx-minX) + (r.rz-minZ)*width ] = r;
}
return m;
}
public void addRegion( Region r ) {
regions.add(r);
if( r.rx < minX ) minX = r.rx;
if( r.rz < minZ ) minZ = r.rz;
if( r.rx > maxX ) maxX = r.rx;
if( r.rz > maxZ ) maxZ = r.rz;
}
static final Pattern rfpat = Pattern.compile("^r\\.(-?\\d+)\\.(-?\\d+)\\.mcr$");
public static RegionMap load( File dir ) {
RegionMap rm = new RegionMap();
File[] files = dir.listFiles();
for( int i=0; i<files.length; ++i ) {
Matcher m = rfpat.matcher(files[i].getName());
if( m.matches() ) {
Region r = new Region();
r.rx = Integer.parseInt(m.group(1));
r.rz = Integer.parseInt(m.group(2));
r.regionFile = files[i].getPath();
rm.addRegion( r );
}
}
return rm;
}
protected static String pad( String x, int width ) {
if( x.length() > width ) return x.substring( x.length()-width );
while( x.length() < width ) x = " "+x;
return x;
}
protected static String fmt( int i ) {
return pad( String.valueOf(i), 4 );
}
public static void dump( RegionMap rm, PrintStream ps ) {
Region[] xzMap = rm.xzMap();
int width = rm.maxX-rm.minX+1;
ps.println("Region");
if( rm.minX == Integer.MAX_VALUE ) {
ps.println("No files found!");
return;
}
ps.println("X: "+rm.minX+" to "+rm.maxX+", Z: "+rm.minZ+" to "+rm.maxZ);
ps.print(" ");
for( int x=rm.minX; x<=rm.maxX; ++x ) {
ps.print( fmt(x) );
}
ps.println();
ps.println();
for( int z=rm.minZ; z<=rm.maxZ; ++z ) {
ps.print( fmt(z) );
ps.print( " " );
for( int i=0; i<1; ++i ) {
if( i > 0 ) ps.print(" ");
for( int x=rm.minX; x<=rm.maxX; ++x ) {
if( xzMap[(x-rm.minX)+(z-rm.minZ)*width] != null ) {
ps.print("[RG]");
} else {
ps.print(" ");
}
}
ps.println();
}
}
}
public static void main( String[] args ) {
String regionDir = args[0];
dump( load(new File(regionDir)), System.out );
}
}