Search in sources :

Example 16 with Archive

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);
}
Also used : Storage(net.runelite.cache.fs.Storage) Archive(net.runelite.cache.fs.Archive) Store(net.runelite.cache.fs.Store) Index(net.runelite.cache.fs.Index) File(java.io.File) Test(org.junit.Test)

Example 17 with Archive

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;
}
Also used : Storage(net.runelite.cache.fs.Storage) Archive(net.runelite.cache.fs.Archive) MapLoader(net.runelite.cache.definitions.loaders.MapLoader) IOException(java.io.IOException) LocationsLoader(net.runelite.cache.definitions.loaders.LocationsLoader) LocationsDefinition(net.runelite.cache.definitions.LocationsDefinition) MapDefinition(net.runelite.cache.definitions.MapDefinition)

Example 18 with Archive

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;
}
Also used : Container(net.runelite.cache.fs.Container) Archive(net.runelite.cache.fs.Archive) IndexData(net.runelite.cache.index.IndexData) ArchiveData(net.runelite.cache.index.ArchiveData)

Example 19 with Archive

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);
}
Also used : Storage(net.runelite.cache.fs.Storage) Archive(net.runelite.cache.fs.Archive) Store(net.runelite.cache.fs.Store) Index(net.runelite.cache.fs.Index) File(java.io.File) Test(org.junit.Test)

Example 20 with Archive

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);
}
Also used : Storage(net.runelite.cache.fs.Storage) Archive(net.runelite.cache.fs.Archive) ArchiveFiles(net.runelite.cache.fs.ArchiveFiles) Store(net.runelite.cache.fs.Store) UnderlayDefinition(net.runelite.cache.definitions.UnderlayDefinition) Index(net.runelite.cache.fs.Index) File(java.io.File) FSFile(net.runelite.cache.fs.FSFile) UnderlayLoader(net.runelite.cache.definitions.loaders.UnderlayLoader) FSFile(net.runelite.cache.fs.FSFile) Test(org.junit.Test)

Aggregations

Archive (net.runelite.cache.fs.Archive)41 Index (net.runelite.cache.fs.Index)38 Storage (net.runelite.cache.fs.Storage)34 Store (net.runelite.cache.fs.Store)21 File (java.io.File)19 Test (org.junit.Test)19 ArchiveFiles (net.runelite.cache.fs.ArchiveFiles)18 FSFile (net.runelite.cache.fs.FSFile)18 IOException (java.io.IOException)6 FileData (net.runelite.cache.index.FileData)4 Container (net.runelite.cache.fs.Container)3 BufferedImage (java.awt.image.BufferedImage)2 CacheClient (net.runelite.cache.client.CacheClient)2 FramemapDefinition (net.runelite.cache.definitions.FramemapDefinition)2 InterfaceDefinition (net.runelite.cache.definitions.InterfaceDefinition)2 InventoryDefinition (net.runelite.cache.definitions.InventoryDefinition)2 ItemDefinition (net.runelite.cache.definitions.ItemDefinition)2 LocationsDefinition (net.runelite.cache.definitions.LocationsDefinition)2 MapDefinition (net.runelite.cache.definitions.MapDefinition)2 OverlayDefinition (net.runelite.cache.definitions.OverlayDefinition)2