Add nether snapshot support

This commit is contained in:
James Robinson 2011-07-07 19:10:36 +01:00
parent 858f8d3c36
commit 73a86468fe
3 changed files with 30 additions and 62 deletions

View File

@ -44,11 +44,14 @@ public class FileMcRegionChunkStore extends McRegionChunkStore {
@Override
protected InputStream getInputStream(String name) throws IOException,
DataException {
String file = "region" + File.separator + name;
String fileName = "region" + File.separator + name;
File file = new File(path, fileName);
if (!file.exists()) {
file = new File(path, "DIM-1" + File.separator + fileName);
}
try {
return new FileInputStream(new File(path, file));
return new FileInputStream(file);
} catch (FileNotFoundException e) {
throw new MissingChunkException();
}
@ -56,7 +59,8 @@ public class FileMcRegionChunkStore extends McRegionChunkStore {
@Override
public boolean isValid() {
return new File(path, "region").isDirectory();
return new File(path, "region").isDirectory() ||
new File(path, "DIM-1" + File.separator + "region").isDirectory();
}
}

View File

@ -90,52 +90,34 @@ public class TrueZipMcRegionChunkStore extends McRegionChunkStore {
@SuppressWarnings("unchecked")
protected InputStream getInputStream(String name)
throws IOException, DataException {
String file = "region/" + name;
// Detect subfolder for the world's files
if (folder != null) {
if (!folder.equals("")) {
file = folder + "/" + file;
name = folder + "/" + name;
}
} else {
ZipEntry testEntry = zip.getEntry("level.dat");
// So, the data is not in the root directory
if (testEntry == null) {
// Let's try a world/ sub-directory
testEntry = getEntry("world/level.dat");
Pattern pattern = Pattern.compile(".*[\\\\/]level\\.dat$");
// So not there either...
if (testEntry == null) {
Pattern pattern = Pattern.compile(".*\\.mcr$");
for (Enumeration<? extends ZipEntry> e = zip.entries();
e.hasMoreElements(); ) {
ZipEntry testEntry = (ZipEntry)e.nextElement();
testEntry = e.nextElement();
// Whoo, found level.dat!
if (pattern.matcher(testEntry.getName()).matches()) {
folder = testEntry.getName().replaceAll("level\\.dat$", "");
folder = folder.substring(0, folder.length() - 1);
file = folder + file;
folder = testEntry.getName().substring(0, testEntry.getName().lastIndexOf("/"));
name = folder + "/" + name;
break;
}
}
} else {
file = "world/" + file;
}
}
}
ZipEntry entry = getEntry(file);
ZipEntry entry = getEntry(name);
if (entry == null) {
throw new MissingChunkException();
}
try {
return zip.getInputStream(entry);
} catch (ZipException e) {
throw new IOException("Failed to read " + file + " in ZIP");
throw new IOException("Failed to read " + name + " in ZIP");
}
}

View File

@ -87,52 +87,34 @@ public class ZippedMcRegionChunkStore extends McRegionChunkStore {
@Override
protected InputStream getInputStream(String name)
throws IOException, DataException {
String file = "region/" + name;
// Detect subfolder for the world's files
if (folder != null) {
if (!folder.equals("")) {
file = folder + "/" + file;
name = folder + "/" + name;
}
} else {
ZipEntry testEntry = zip.getEntry("level.dat");
// So, the data is not in the root directory
if (testEntry == null) {
// Let's try a world/ sub-directory
testEntry = getEntry("world/level.dat");
Pattern pattern = Pattern.compile(".*[\\\\/]level\\.dat$");
// So not there either...
if (testEntry == null) {
Pattern pattern = Pattern.compile(".*\\.mcr$");
for (Enumeration<? extends ZipEntry> e = zip.entries();
e.hasMoreElements(); ) {
ZipEntry testEntry = (ZipEntry)e.nextElement();
testEntry = (ZipEntry)e.nextElement();
// Whoo, found level.dat!
if (pattern.matcher(testEntry.getName()).matches()) {
folder = testEntry.getName().replaceAll("level\\.dat$", "");
folder = folder.substring(0, folder.length() - 1);
file = folder + file;
folder = testEntry.getName().substring(0, testEntry.getName().lastIndexOf("/"));
name = folder + "/" + name;
break;
}
}
} else {
file = "world/" + file;
}
}
}
ZipEntry entry = getEntry(file);
ZipEntry entry = getEntry(name);
if (entry == null) {
throw new MissingChunkException();
}
try {
return zip.getInputStream(entry);
} catch (ZipException e) {
throw new IOException("Failed to read " + file + " in ZIP");
throw new IOException("Failed to read " + name + " in ZIP");
}
}