diff --git a/src/main/java/net/runelite/cache/fs/Archive.java b/src/main/java/net/runelite/cache/fs/Archive.java index 61ce08be90..444ffde67f 100644 --- a/src/main/java/net/runelite/cache/fs/Archive.java +++ b/src/main/java/net/runelite/cache/fs/Archive.java @@ -2,6 +2,7 @@ package net.runelite.cache.fs; import java.util.ArrayList; import java.util.List; +import net.runelite.cache.fs.io.InputStream; public class Archive { @@ -18,6 +19,49 @@ public class Archive this.index = index; this.archiveId = id; } + + public void load(InputStream stream, int numberOfFiles, int protocol) + { + int archive = 0; + + for (int i = 0; i < numberOfFiles; ++i) + { + int fileId = archive += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort(); + + File file = new File(this, fileId); + this.files.add(file); + //archive1.getValidFileIds()[index21] = fileId; + } + + //archive1.setFiles(new FileReference[index2 + 1]); + +// for (int i = 0; i < archive1.getValidFileIds().length; ++i) { +// archive1.getFiles()[archive1.getValidFileIds()[ki]] = new FileReference(); +// } + +// if (this.named) +// { +// for (index = 0; index < validArchivesCount; ++index) +// { +// ArchiveReference var14 = this.archives[this.validArchiveIds[index]]; +// +// for (index2 = 0; index2 < var14.getValidFileIds().length; ++index2) +// { +// var14.getFiles()[var14.getValidFileIds()[index2]].setNameHash(stream.readInt()); +// } +// } +// } + } + + public void loadNames(InputStream stream, int numberOfFiles) + { + for (int i = 0; i < numberOfFiles; ++i) + { + File file = this.files.get(i); + int name = stream.readInt(); + file.setNameHash(name); + } + } public int getNameHash() { diff --git a/src/main/java/net/runelite/cache/fs/File.java b/src/main/java/net/runelite/cache/fs/File.java index 4f45d9e414..2f0c50bb98 100644 --- a/src/main/java/net/runelite/cache/fs/File.java +++ b/src/main/java/net/runelite/cache/fs/File.java @@ -5,4 +5,30 @@ public class File private Archive archive; private int fileId; private int nameHash; + + public File(Archive archive, int fileId) + { + this.archive = archive; + this.fileId = fileId; + } + + public Archive getArchive() + { + return archive; + } + + public int getFileId() + { + return fileId; + } + + public int getNameHash() + { + return nameHash; + } + + public void setNameHash(int nameHash) + { + this.nameHash = nameHash; + } } diff --git a/src/main/java/net/runelite/cache/fs/Index.java b/src/main/java/net/runelite/cache/fs/Index.java index ca2ff830f1..c2b3604ff2 100644 --- a/src/main/java/net/runelite/cache/fs/Index.java +++ b/src/main/java/net/runelite/cache/fs/Index.java @@ -19,11 +19,14 @@ public class Index private byte[] whirlpool; private List archives = new ArrayList<>(); - public Index(IndexFile index, int id) throws IOException + public Index(IndexFile index, int id) { this.index = index; this.id = id; - + } + + public void load() throws IOException + { // read data from index255 Store store = index.getStore(); DataFile dataFile = store.getData(); @@ -89,8 +92,7 @@ public class Index int protocol = stream.readUnsignedByte(); if (protocol >= 5 && protocol <= 7) { if (protocol >= 6) { - not the right rev - this.revision = stream.readInt(); + int revision = stream.readInt(); // what is this and why is it different from checkRevision? } int hash = stream.readUnsignedByte(); @@ -98,7 +100,7 @@ public class Index this.usesWhirpool = (2 & hash) != 0; int validArchivesCount = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort(); // this.validArchiveIds = new int[validArchivesCount]; -// int lastArchiveId = 0; + int lastArchiveId = 0; // int biggestArchiveId = 0; int index; @@ -168,32 +170,40 @@ public class Index for (index = 0; index < validArchivesCount; ++index) { archive = 0; index2 = 0; - ArchiveReference archive1 = this.archives[this.validArchiveIds[index]]; + + Archive a = this.archives.get(index); + a.load(stream, numberOfFiles[index], protocol); + //ArchiveReference archive1 = this.archives[this.validArchiveIds[index]]; - int index21; - for (index21 = 0; index21 < archive1.getValidFileIds().length; ++index21) { - int fileId = archive += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort(); - if (fileId > index2) { - index2 = fileId; - } - - archive1.getValidFileIds()[index21] = fileId; - } - - archive1.setFiles(new FileReference[index2 + 1]); - - for (index21 = 0; index21 < archive1.getValidFileIds().length; ++index21) { - archive1.getFiles()[archive1.getValidFileIds()[index21]] = new FileReference(); - } +// int index21; +// for (index21 = 0; index21 < archive1.getValidFileIds().length; ++index21) { +// int fileId = archive += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort(); +// if (fileId > index2) { +// index2 = fileId; +// } +// +// archive1.getValidFileIds()[index21] = fileId; +// } +// +// archive1.setFiles(new FileReference[index2 + 1]); +// +// for (index21 = 0; index21 < archive1.getValidFileIds().length; ++index21) { +// archive1.getFiles()[archive1.getValidFileIds()[index21]] = new FileReference(); +// } } - if (this.named) { - for (index = 0; index < validArchivesCount; ++index) { - ArchiveReference var14 = this.archives[this.validArchiveIds[index]]; + if (this.named) + { + for (index = 0; index < validArchivesCount; ++index) + { + Archive a = this.archives.get(index); + a.loadNames(stream, numberOfFiles[index]); + //ArchiveReference var14 = this.archives[this.validArchiveIds[index]]; - for (index2 = 0; index2 < var14.getValidFileIds().length; ++index2) { - var14.getFiles()[var14.getValidFileIds()[index2]].setNameHash(stream.readInt()); - } +// for (index2 = 0; index2 < var14.getValidFileIds().length; ++index2) +// { +// var14.getFiles()[var14.getValidFileIds()[index2]].setNameHash(stream.readInt()); +// } } } }