Pass in byte[] to all definition loaders, not InputStream

This commit is contained in:
UniquePassive
2017-03-24 19:04:53 +01:00
parent aa02330722
commit 72c82ae298
11 changed files with 46 additions and 40 deletions

View File

@@ -68,7 +68,7 @@ public class ItemDumper
for (net.runelite.cache.fs.File f : archive.getFiles())
{
ItemDefinition def = loader.load(f.getFileId(), new InputStream(f.getContents()));
ItemDefinition def = loader.load(f.getFileId(), f.getContents());
items.add(def);
}
}

View File

@@ -452,7 +452,7 @@ public class MapImageDumper
byte[] contents = file.getContents();
SpriteLoader loader = new SpriteLoader();
SpriteDefinition[] sprites = loader.load(a.getArchiveId(), new InputStream(contents));
SpriteDefinition[] sprites = loader.load(a.getArchiveId(), contents);
for (SpriteDefinition sprite : sprites)
{

View File

@@ -68,7 +68,7 @@ public class NpcDumper
for (net.runelite.cache.fs.File f : archive.getFiles())
{
NpcDefinition npc = loader.load(f.getFileId(), new InputStream(f.getContents()));
NpcDefinition npc = loader.load(f.getFileId(), f.getContents());
npcs.add(npc);
}
}

View File

@@ -34,19 +34,20 @@ public class ItemLoader
{
private static final Logger logger = LoggerFactory.getLogger(ItemLoader.class);
public ItemDefinition load(int id, InputStream stream)
public ItemDefinition load(int id, byte[] b)
{
ItemDefinition def = new ItemDefinition(id);
InputStream is = new InputStream(b);
while (true)
{
int opcode = stream.readUnsignedByte();
int opcode = is.readUnsignedByte();
if (opcode == 0)
{
break;
}
this.decodeValues(opcode, def, stream);
this.decodeValues(opcode, def, is);
}
return def;

View File

@@ -5,18 +5,18 @@ import net.runelite.cache.io.InputStream;
public class ModelLoader
{
public ModelDefinition load(int modelId, byte[] var1)
public ModelDefinition load(int modelId, byte[] b)
{
ModelDefinition def = new ModelDefinition();
def.id = modelId;
if (var1[var1.length - 1] == -1 && var1[var1.length - 2] == -1)
if (b[b.length - 1] == -1 && b[b.length - 2] == -1)
{
this.load1(def, var1);
this.load1(def, b);
}
else
{
this.load2(def, var1);
this.load2(def, b);
}
def.computeNormals();

View File

@@ -33,19 +33,20 @@ public class NpcLoader
{
private static final Logger logger = LoggerFactory.getLogger(NpcLoader.class);
public NpcDefinition load(int id, InputStream stream)
public NpcDefinition load(int id, byte[] b)
{
NpcDefinition def = new NpcDefinition(id);
InputStream is = new InputStream(b);
while (true)
{
int opcode = stream.readUnsignedByte();
int opcode = is.readUnsignedByte();
if (opcode == 0)
{
break;
}
this.decodeValues(opcode, def, stream);
this.decodeValues(opcode, def, is);
}
return def;

View File

@@ -33,19 +33,20 @@ public class SequenceLoader
{
private static final Logger logger = LoggerFactory.getLogger(SequenceLoader.class);
public SequenceDefinition load(int id, InputStream stream)
public SequenceDefinition load(int id, byte[] b)
{
SequenceDefinition def = new SequenceDefinition(id);
InputStream is = new InputStream(b);
while (true)
{
int opcode = stream.readUnsignedByte();
int opcode = is.readUnsignedByte();
if (opcode == 0)
{
break;
}
this.decodeValues(opcode, def, stream);
this.decodeValues(opcode, def, is);
}
return def;

View File

@@ -33,20 +33,21 @@ public class SpotAnimLoader
{
private static final Logger logger = LoggerFactory.getLogger(SpotAnimLoader.class);
public SpotAnimDefinition load(int id, InputStream stream)
public SpotAnimDefinition load(int id, byte[] b)
{
SpotAnimDefinition def = new SpotAnimDefinition();
InputStream is = new InputStream(b);
def.id = id;
while (true)
{
int opcode = stream.readUnsignedByte();
int opcode = is.readUnsignedByte();
if (opcode == 0)
{
break;
}
this.decodeValues(opcode, def, stream);
this.decodeValues(opcode, def, is);
}
return def;

View File

@@ -33,22 +33,24 @@ public class SpriteLoader
public static final int FLAG_VERTICAL = 0b01;
public static final int FLAG_ALPHA = 0b10;
public SpriteDefinition[] load(int id, InputStream stream)
public SpriteDefinition[] load(int id, byte[] b)
{
stream.setOffset(stream.getLength() - 2);
int spriteCount = stream.readUnsignedShort();
InputStream is = new InputStream(b);
is.setOffset(is.getLength() - 2);
int spriteCount = is.readUnsignedShort();
SpriteDefinition[] sprites = new SpriteDefinition[spriteCount];
// 2 for size
// 5 for width, height, palette length
// + 8 bytes per sprite for offset x/y, width, and height
stream.setOffset(stream.getLength() - 7 - spriteCount * 8);
is.setOffset(is.getLength() - 7 - spriteCount * 8);
// max width and height
int width = stream.readUnsignedShort();
int height = stream.readUnsignedShort();
int paletteLength = stream.readUnsignedByte() + 1;
int width = is.readUnsignedShort();
int height = is.readUnsignedShort();
int paletteLength = is.readUnsignedByte() + 1;
for (int i = 0; i < spriteCount; ++i)
{
@@ -61,31 +63,31 @@ public class SpriteLoader
for (int i = 0; i < spriteCount; ++i)
{
sprites[i].setOffsetX(stream.readUnsignedShort());
sprites[i].setOffsetX(is.readUnsignedShort());
}
for (int i = 0; i < spriteCount; ++i)
{
sprites[i].setOffsetY(stream.readUnsignedShort());
sprites[i].setOffsetY(is.readUnsignedShort());
}
for (int i = 0; i < spriteCount; ++i)
{
sprites[i].setWidth(stream.readUnsignedShort());
sprites[i].setWidth(is.readUnsignedShort());
}
for (int i = 0; i < spriteCount; ++i)
{
sprites[i].setHeight(stream.readUnsignedShort());
sprites[i].setHeight(is.readUnsignedShort());
}
// same as above + 3 bytes for each palette entry, except for the first one (which is transparent)
stream.setOffset(stream.getLength() - 7 - spriteCount * 8 - (paletteLength - 1) * 3);
is.setOffset(is.getLength() - 7 - spriteCount * 8 - (paletteLength - 1) * 3);
int[] palette = new int[paletteLength];
for (int i = 1; i < paletteLength; ++i)
{
palette[i] = stream.read24BitInt();
palette[i] = is.read24BitInt();
if (palette[i] == 0)
{
@@ -93,7 +95,7 @@ public class SpriteLoader
}
}
stream.setOffset(0);
is.setOffset(0);
for (int i = 0; i < spriteCount; ++i)
{
@@ -104,14 +106,14 @@ public class SpriteLoader
byte[] pixelPaletteIndicies = new byte[dimension];
byte[] pixelAlphas = new byte[dimension];
int flags = stream.readUnsignedByte();
int flags = is.readUnsignedByte();
if ((flags & FLAG_VERTICAL) == 0)
{
// read horizontally
for (int j = 0; j < dimension; ++j)
{
pixelPaletteIndicies[j] = stream.readByte();
pixelPaletteIndicies[j] = is.readByte();
}
}
else
@@ -121,7 +123,7 @@ public class SpriteLoader
{
for (int k = 0; k < spriteHeight; ++k)
{
pixelPaletteIndicies[spriteWidth * k + j] = stream.readByte();
pixelPaletteIndicies[spriteWidth * k + j] = is.readByte();
}
}
}
@@ -134,7 +136,7 @@ public class SpriteLoader
// read horizontally
for (int j = 0; j < dimension; ++j)
{
pixelAlphas[j] = stream.readByte();
pixelAlphas[j] = is.readByte();
}
}
else
@@ -144,7 +146,7 @@ public class SpriteLoader
{
for (int k = 0; k < spriteHeight; ++k)
{
pixelAlphas[spriteWidth * k + j] = stream.readByte();
pixelAlphas[spriteWidth * k + j] = is.readByte();
}
}
}

View File

@@ -69,7 +69,7 @@ public class SequenceDumper
for (File file : archive.getFiles())
{
SequenceLoader loader = new SequenceLoader();
SequenceDefinition seq = loader.load(file.getFileId(), new InputStream(file.getContents()));
SequenceDefinition seq = loader.load(file.getFileId(), file.getContents());
Files.write(gson.toJson(seq), new java.io.File(outDir, file.getFileId() + ".json"), Charset.defaultCharset());
++count;

View File

@@ -74,7 +74,7 @@ public class SpriteDumperTest
byte[] contents = file.getContents();
SpriteLoader loader = new SpriteLoader();
SpriteDefinition[] sprites = loader.load(a.getArchiveId(), new InputStream(contents));
SpriteDefinition[] sprites = loader.load(a.getArchiveId(), contents);
for (SpriteDefinition def : sprites)
{