cache: rewrite map image dumper with logic from client
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -27,9 +27,10 @@ package net.runelite.cache;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import net.runelite.cache.definitions.ObjectDefinition;
|
import net.runelite.cache.definitions.ObjectDefinition;
|
||||||
import net.runelite.cache.definitions.exporters.ObjectExporter;
|
import net.runelite.cache.definitions.exporters.ObjectExporter;
|
||||||
import net.runelite.cache.definitions.loaders.ObjectLoader;
|
import net.runelite.cache.definitions.loaders.ObjectLoader;
|
||||||
@@ -44,7 +45,7 @@ import net.runelite.cache.util.Namer;
|
|||||||
public class ObjectManager
|
public class ObjectManager
|
||||||
{
|
{
|
||||||
private final Store store;
|
private final Store store;
|
||||||
private final List<ObjectDefinition> objects = new ArrayList<>();
|
private final Map<Integer, ObjectDefinition> objects = new HashMap<>();
|
||||||
private final Namer namer = new Namer();
|
private final Namer namer = new Namer();
|
||||||
|
|
||||||
public ObjectManager(Store store)
|
public ObjectManager(Store store)
|
||||||
@@ -66,20 +67,25 @@ public class ObjectManager
|
|||||||
for (FSFile f : files.getFiles())
|
for (FSFile f : files.getFiles())
|
||||||
{
|
{
|
||||||
ObjectDefinition def = loader.load(f.getFileId(), f.getContents());
|
ObjectDefinition def = loader.load(f.getFileId(), f.getContents());
|
||||||
objects.add(def);
|
objects.put(f.getFileId(), def);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ObjectDefinition> getObjects()
|
public Collection<ObjectDefinition> getObjects()
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableList(objects);
|
return Collections.unmodifiableCollection(objects.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public ObjectDefinition getObject(int id)
|
||||||
|
{
|
||||||
|
return objects.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dump(File out) throws IOException
|
public void dump(File out) throws IOException
|
||||||
{
|
{
|
||||||
out.mkdirs();
|
out.mkdirs();
|
||||||
|
|
||||||
for (ObjectDefinition def : objects)
|
for (ObjectDefinition def : objects.values())
|
||||||
{
|
{
|
||||||
ObjectExporter exporter = new ObjectExporter(def);
|
ObjectExporter exporter = new ObjectExporter(def);
|
||||||
|
|
||||||
@@ -100,7 +106,7 @@ public class ObjectManager
|
|||||||
fw.println("");
|
fw.println("");
|
||||||
fw.println("public final class ObjectID");
|
fw.println("public final class ObjectID");
|
||||||
fw.println("{");
|
fw.println("{");
|
||||||
for (ObjectDefinition def : objects)
|
for (ObjectDefinition def : objects.values())
|
||||||
{
|
{
|
||||||
String name;
|
String name;
|
||||||
if (def.getName().equalsIgnoreCase("NULL"))
|
if (def.getName().equalsIgnoreCase("NULL"))
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import net.runelite.cache.definitions.TextureDefinition;
|
|||||||
import net.runelite.cache.definitions.providers.SpriteProvider;
|
import net.runelite.cache.definitions.providers.SpriteProvider;
|
||||||
import net.runelite.cache.definitions.providers.TextureProvider;
|
import net.runelite.cache.definitions.providers.TextureProvider;
|
||||||
|
|
||||||
class RSTextureProvider
|
public class RSTextureProvider
|
||||||
{
|
{
|
||||||
private final SpriteProvider spriteProvider;
|
private final SpriteProvider spriteProvider;
|
||||||
TextureDefinition[] textures;
|
TextureDefinition[] textures;
|
||||||
|
|||||||
@@ -25,8 +25,9 @@
|
|||||||
package net.runelite.cache.region;
|
package net.runelite.cache.region;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import net.runelite.cache.IndexType;
|
import net.runelite.cache.IndexType;
|
||||||
import net.runelite.cache.definitions.LocationsDefinition;
|
import net.runelite.cache.definitions.LocationsDefinition;
|
||||||
import net.runelite.cache.definitions.MapDefinition;
|
import net.runelite.cache.definitions.MapDefinition;
|
||||||
@@ -50,7 +51,7 @@ public class RegionLoader
|
|||||||
private final Index index;
|
private final Index index;
|
||||||
private final XteaKeyManager keyManager;
|
private final XteaKeyManager keyManager;
|
||||||
|
|
||||||
private final List<Region> regions = new ArrayList<>();
|
private final Map<Integer, Region> regions = new HashMap<>();
|
||||||
private Region lowestX = null, lowestY = null;
|
private Region lowestX = null, lowestY = null;
|
||||||
private Region highestX = null, highestY = null;
|
private Region highestX = null, highestY = null;
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ public class RegionLoader
|
|||||||
Region region = this.loadRegionFromArchive(i);
|
Region region = this.loadRegionFromArchive(i);
|
||||||
if (region != null)
|
if (region != null)
|
||||||
{
|
{
|
||||||
regions.add(region);
|
regions.put(i, region);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,7 +118,7 @@ public class RegionLoader
|
|||||||
|
|
||||||
public void calculateBounds()
|
public void calculateBounds()
|
||||||
{
|
{
|
||||||
for (Region region : regions)
|
for (Region region : regions.values())
|
||||||
{
|
{
|
||||||
if (lowestX == null || region.getBaseX() < lowestX.getBaseX())
|
if (lowestX == null || region.getBaseX() < lowestX.getBaseX())
|
||||||
{
|
{
|
||||||
@@ -141,9 +142,16 @@ public class RegionLoader
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Region> getRegions()
|
public Collection<Region> getRegions()
|
||||||
{
|
{
|
||||||
return regions;
|
return regions.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Region findRegionForWorldCoordinates(int x, int y)
|
||||||
|
{
|
||||||
|
x >>>= 6;
|
||||||
|
y >>>= 6;
|
||||||
|
return regions.get((x << 8) | y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Region getLowestX()
|
public Region getLowestX()
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import java.io.IOException;
|
|||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import net.runelite.cache.fs.Store;
|
import net.runelite.cache.fs.Store;
|
||||||
import net.runelite.cache.region.Region;
|
import net.runelite.cache.region.Region;
|
||||||
|
import net.runelite.cache.region.RegionLoader;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -46,7 +47,7 @@ public class MapImageDumperTest
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void extract() throws IOException
|
public void dumpMap() throws IOException
|
||||||
{
|
{
|
||||||
File base = StoreLocation.LOCATION,
|
File base = StoreLocation.LOCATION,
|
||||||
outDir = folder.newFolder();
|
outDir = folder.newFolder();
|
||||||
@@ -69,4 +70,31 @@ public class MapImageDumperTest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void dumpRegions() throws Exception
|
||||||
|
{
|
||||||
|
File base = StoreLocation.LOCATION,
|
||||||
|
outDir = folder.newFolder();
|
||||||
|
|
||||||
|
try (Store store = new Store(base))
|
||||||
|
{
|
||||||
|
store.load();
|
||||||
|
|
||||||
|
RegionLoader regionLoader = new RegionLoader(store);
|
||||||
|
regionLoader.loadRegions();
|
||||||
|
|
||||||
|
MapImageDumper dumper = new MapImageDumper(store);
|
||||||
|
dumper.load();
|
||||||
|
|
||||||
|
int z = 0;
|
||||||
|
for (Region region : regionLoader.getRegions())
|
||||||
|
{
|
||||||
|
File imageFile = new File(outDir, "img-" + z + "-" + region.getRegionID() + ".png");
|
||||||
|
BufferedImage image = dumper.drawRegion(region, z);
|
||||||
|
ImageIO.write(image, "png", imageFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user