Files
Bubberstation/tools/mapmerge/Source/MapPatcher.java
T
2014-12-12 18:32:34 -06:00

305 lines
12 KiB
Java

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Arrays;
public class MapPatcher
{
static boolean silent = false;
public static void main(String[] paramArrayOfString)
{
String str1 = "usage: [me] -diff [old_map] [new_map] [diff_file]";
String str2 = "usage: [me] -patch [old_map] [diff_file] [new_map]";
String str3 = "usage: [me] -pack [unpacked] [packed.dmm]";
String str4 = "usage: [me] -unpack [packed.dmm] [unpacked]";
String str5 = "usage: [me] -clean [oldmap.dmm] [newmap.dmm] [cleaned.dmm]";
String str6 = "usage: [me] -merge [original] [local] [remote] [output]";
for (int i = 0; i < paramArrayOfString.length; i++)
if (paramArrayOfString[i].equalsIgnoreCase("-silent"))
{
silent = true;
for (; i < paramArrayOfString.length - 1; i++)
paramArrayOfString[i] = paramArrayOfString[(i + 1)];
paramArrayOfString = (String[])Arrays.copyOf(paramArrayOfString, paramArrayOfString.length - 1);
break;
}
Object localObject;
int i2;
int i3;
int i5;
if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-merge")))
{
if (paramArrayOfString.length < 5)
{
System.out.println(str6);
try { System.in.read(); } catch (Exception localException1) {
}return;
}
Map localMap1 = new Map(new File(paramArrayOfString[1]));
localObject = new Map(new File(paramArrayOfString[2]));
Map localMap8 = new Map(new File(paramArrayOfString[3]));
Map localMap9 = new Map();
if ((localMap1.minx != ((Map)localObject).minx) || (localMap1.minx != localMap8.minx) || (localMap1.maxx != ((Map)localObject).maxx) || (localMap1.maxx != localMap8.maxx) || (localMap1.miny != ((Map)localObject).miny) || (localMap1.miny != localMap8.miny) || (localMap1.maxy != ((Map)localObject).maxy) || (localMap1.maxy != localMap8.maxy) || (localMap1.minz != ((Map)localObject).minz) || (localMap1.minz != localMap8.minz) || (localMap1.maxz != ((Map)localObject).maxz) || (localMap1.maxz != localMap8.maxz))
{
Systemoutprintln("Map sizes differ");
System.exit(1);
}
try
{
for (int n = localMap1.minz; n <= localMap1.maxz; n++)
for (i2 = localMap1.miny; i2 <= localMap1.maxy; i2++)
for (i3 = localMap1.minx; i3 <= localMap1.maxx; i3++)
{
boolean bool1 = localMap1.contentAt(i3, i2, n).equals(((Map)localObject).contentAt(i3, i2, n));
boolean bool2 = localMap1.contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n));
i5 = ((Map)localObject).contentAt(i3, i2, n).equals(localMap8.contentAt(i3, i2, n));
if ((!bool1) && (!bool2))
{
if (i5 == 0)
{
Systemoutprintln(i3 + "," + i2 + "," + n + " local and remote don't match original and differ");
System.exit(1);
}
else {
localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n));
}
} else if (!bool1)
localMap9.setAt(i3, i2, n, ((Map)localObject).contentAt(i3, i2, n));
else if (!bool2)
localMap9.setAt(i3, i2, n, localMap8.contentAt(i3, i2, n));
else
localMap9.setAt(i3, i2, n, localMap1.contentAt(i3, i2, n));
}
Systemoutprintln("Saving");
localMap9.saveReferencing(new File(paramArrayOfString[4]), localMap1);
Systemoutprintln("Done");
}
catch (Exception localException12)
{
localException12.printStackTrace();
}
}
else
{
int m;
int i1;
if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-diff")))
{
if (paramArrayOfString.length < 4)
{
System.out.println(str1);
try { System.in.read(); } catch (Exception localException2) {
}return;
}
Map localMap2 = new Map(new File(paramArrayOfString[1]));
localObject = new Map(new File(paramArrayOfString[2]));
int j = Math.max(localMap2.minx, ((Map)localObject).minx);
m = Math.min(localMap2.maxx, ((Map)localObject).maxx);
i1 = Math.max(localMap2.miny, ((Map)localObject).miny);
i2 = Math.min(localMap2.maxy, ((Map)localObject).maxy);
i3 = Math.max(localMap2.minz, ((Map)localObject).minz);
int i4 = Math.min(localMap2.maxz, ((Map)localObject).maxz);
Systemoutprintln("Comparing: x(" + j + "-" + m + ") y(" + i1 + "-" + i2 + ") z(" + i3 + "-" + i4 + ")");
try
{
FileWriter localFileWriter2 = new FileWriter(paramArrayOfString[3]);
i5 = 0;
for (int i6 = i3; i6 <= i4; i6++)
{
Systemoutprintln("Z-level " + i6);
for (int i7 = i1; i7 <= i2; i7++)
for (int i8 = j; i8 <= m; i8++)
if (!localMap2.contentAt(i8, i7, i6).equals(((Map)localObject).contentAt(i8, i7, i6)))
{
localFileWriter2.write("(" + i8 + "," + (1 + ((Map)localObject).maxy - i7) + "," + i6 + ")=" + ((Map)localObject).contentAt(i8, i7, i6) + "\n");
i5++;
}
}
localFileWriter2.flush();
localFileWriter2.close();
if (i5 == 0)
Systemoutprintln("Files do match");
else
Systemoutprintln("Writed out " + i5 + " differences");
}
catch (Exception localException13)
{
localException13.printStackTrace();
}
Systemoutprintln("Done");
}
else
{
String str7;
String str8;
if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-patch")))
{
if (paramArrayOfString.length < 4)
{
System.out.println(str2);
try { System.in.read(); } catch (Exception localException3) {
}return;
}
Map localMap3 = new Map(new File(paramArrayOfString[1]));
try
{
localObject = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[2])));
while ((str7 = ((BufferedReader)localObject).readLine()) != null)
{
str7 = str7.trim();
if (str7.length() != 0)
{
m = str7.indexOf(",", 1);
i1 = Integer.parseInt(str7.substring(1, m));
str7 = str7.substring(m);
m = str7.indexOf(",", 1);
i2 = Integer.parseInt(str7.substring(1, m));
str7 = str7.substring(m);
m = str7.indexOf(")", 1);
i3 = Integer.parseInt(str7.substring(1, m));
str8 = str7.substring(str7.indexOf("=") + 1);
localMap3.setAt(i1, 1 + localMap3.maxy - i2, i3, str8);
}
}
localMap3.save(new File(paramArrayOfString[3]));
}
catch (Exception localException8)
{
localException8.printStackTrace();
}
Systemoutprintln("Done");
}
else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-pack")))
{
if (paramArrayOfString.length < 3)
{
System.out.println(str3);
try { System.in.read(); } catch (Exception localException4) {
}return;
}
Map localMap4 = new Map();
try {
BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(paramArrayOfString[1])));
Systemoutprintln("Loading");
while ((str7 = localBufferedReader.readLine()) != null)
{
str7 = str7.trim();
if (str7.length() != 0)
{
m = str7.indexOf(",", 1);
i1 = Integer.parseInt(str7.substring(1, m));
str7 = str7.substring(m);
m = str7.indexOf(",", 1);
i2 = Integer.parseInt(str7.substring(1, m));
str7 = str7.substring(m);
m = str7.indexOf(")", 1);
i3 = Integer.parseInt(str7.substring(1, m));
str8 = str7.substring(str7.indexOf("=") + 1);
localMap4.setAt(i1, i2, i3, str8);
}
}
Systemoutprintln("Flipping");
localMap4.mirrorY();
Systemoutprintln("Saving, bounds: x{" + localMap4.minx + " - " + localMap4.maxx + "}, y{" + localMap4.miny + " - " + localMap4.maxy + "}, z{" + localMap4.minz + " - " + localMap4.maxz + "}");
localMap4.save(new File(paramArrayOfString[2]));
Systemoutprintln("Done");
}
catch (Exception localException9)
{
localException9.printStackTrace();
}
}
else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-unpack")))
{
if (paramArrayOfString.length < 3)
{
System.out.println(str4);
try { System.in.read(); } catch (Exception localException5) {
}return;
}
Systemoutprintln("Loading");
Map localMap5 = new Map(new File(paramArrayOfString[1]));
try {
FileWriter localFileWriter1 = new FileWriter(paramArrayOfString[2]);
Systemoutprintln("Saving");
for (int k = localMap5.minz; k <= localMap5.maxz; k++)
{
Systemoutprintln("Z-level " + k);
for (m = localMap5.miny; m <= localMap5.maxy; m++)
for (i1 = localMap5.minx; i1 <= localMap5.maxx; i1++)
localFileWriter1.write("(" + i1 + "," + (1 + localMap5.maxy - m) + "," + k + ")=" + localMap5.contentAt(i1, m, k) + "\n");
localFileWriter1.write("\n");
}
localFileWriter1.flush();
localFileWriter1.close();
Systemoutprintln("Done");
}
catch (Exception localException10)
{
localException10.printStackTrace();
}
}
else if ((paramArrayOfString.length > 0) && (paramArrayOfString[0].equalsIgnoreCase("-clean")))
{
if (paramArrayOfString.length < 4)
{
System.out.println(str5);
try { System.in.read(); } catch (Exception localException6) {
}return;
}
Map localMap6 = new Map(new File(paramArrayOfString[1]), true);
Map localMap7 = new Map(new File(paramArrayOfString[2]));
try
{
localMap7.saveReferencing(new File(paramArrayOfString[3]), localMap6);
Systemoutprintln("Done");
}
catch (Exception localException11)
{
localException11.printStackTrace();
}
}
else
{
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
System.out.println(str6);
try {
System.in.read(); } catch (Exception localException7) { }
}
}
}
}
public static void Systemoutprintln(String paramString) { if (!silent)
System.out.println(paramString); }
public static void Systemoutprint(String paramString)
{
if (!silent)
System.out.print(paramString);
}
}