use of net.runelite.cache.fs.Archive in project runelite by runelite.
the class TrackDumperTest method test.
@Test
public void test() throws IOException {
File dumpDir1 = folder.newFolder(), dumpDir2 = folder.newFolder();
int idx1 = 0, idx2 = 0;
djb2.load();
try (Store store = new Store(StoreLocation.LOCATION)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.TRACK1);
Index index2 = store.getIndex(IndexType.TRACK2);
for (Archive archive : index.getArchives()) {
dumpTrackArchive(dumpDir1, storage, archive);
++idx1;
}
for (Archive archive : index2.getArchives()) {
dumpTrackArchive(dumpDir2, storage, archive);
++idx2;
}
}
logger.info("Dumped {} sound tracks ({} idx1, {} idx2) to {} and {}", idx1 + idx2, idx1, idx2, dumpDir1, dumpDir2);
}
use of net.runelite.cache.fs.Archive in project runelite by runelite.
the class RegionLoader method loadRegionFromArchive.
public Region loadRegionFromArchive(int i) throws IOException {
int x = i >> 8;
int y = i & 0xFF;
Storage storage = store.getStorage();
Archive map = index.findArchiveByName("m" + x + "_" + y);
Archive land = index.findArchiveByName("l" + x + "_" + y);
assert (map == null) == (land == null);
if (map == null || land == null) {
return null;
}
byte[] data = map.decompress(storage.loadArchive(map));
MapDefinition mapDef = new MapLoader().load(x, y, data);
Region region = new Region(i);
region.loadTerrain(mapDef);
int[] keys = keyManager.getKeys(i);
if (keys != null) {
try {
data = land.decompress(storage.loadArchive(land), keys);
LocationsDefinition locDef = new LocationsLoader().load(x, y, data);
region.loadLocations(locDef);
} catch (IOException ex) {
logger.debug("Can't decrypt region " + i, ex);
}
}
return region;
}
use of net.runelite.cache.fs.Archive in project runelite by runelite.
the class DiskStorage method loadIndex.
private void loadIndex(Index index) throws IOException {
logger.trace("Loading index {}", index.getId());
byte[] indexData = readIndex(index.getId());
Container res = Container.decompress(indexData, null);
byte[] data = res.data;
IndexData id = new IndexData();
id.load(data);
index.setProtocol(id.getProtocol());
index.setRevision(id.getRevision());
index.setNamed(id.isNamed());
for (ArchiveData ad : id.getArchives()) {
Archive archive = index.addArchive(ad.getId());
archive.setNameHash(ad.getNameHash());
archive.setCrc(ad.getCrc());
archive.setRevision(ad.getRevision());
archive.setFileData(ad.getFiles());
assert ad.getFiles().length > 0;
}
index.setCrc(res.crc);
index.setCompression(res.compression);
assert res.revision == -1;
}
use of net.runelite.cache.fs.Archive in project runelite by runelite.
the class TitleDumper method extract.
@Test
public void extract() throws IOException {
File base = StoreLocation.LOCATION, outFile = folder.newFolder();
try (Store store = new Store(base)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.BINARY);
Archive archive = index.findArchiveByName("title.jpg");
byte[] contents = archive.decompress(storage.loadArchive(archive));
Files.write(outFile.toPath(), contents);
}
logger.info("Dumped to {}", outFile);
}
use of net.runelite.cache.fs.Archive in project runelite by runelite.
the class UnderlayDumper method extract.
@Test
public void extract() throws IOException {
File base = StoreLocation.LOCATION, outDir = folder.newFolder();
int count = 0;
try (Store store = new Store(base)) {
store.load();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.CONFIGS);
Archive archive = index.getArchive(ConfigType.UNDERLAY.getId());
byte[] archiveData = storage.loadArchive(archive);
ArchiveFiles files = archive.getFiles(archiveData);
for (FSFile file : files.getFiles()) {
UnderlayLoader loader = new UnderlayLoader();
UnderlayDefinition underlay = loader.load(file.getFileId(), file.getContents());
Files.write(gson.toJson(underlay), new File(outDir, file.getFileId() + ".json"), Charset.defaultCharset());
++count;
}
}
logger.info("Dumped {} underlays to {}", count, outDir);
}
Aggregations