From 54da56e7b142fcd5317497bec5344ff5ec0e2e6a Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 1 May 2022 14:53:12 -0400 Subject: [PATCH] map image dumper: add main method Co-authored-by: Explv --- .../net/runelite/cache/MapImageDumper.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/cache/src/main/java/net/runelite/cache/MapImageDumper.java b/cache/src/main/java/net/runelite/cache/MapImageDumper.java index 2c2e904064..83b7d5a426 100644 --- a/cache/src/main/java/net/runelite/cache/MapImageDumper.java +++ b/cache/src/main/java/net/runelite/cache/MapImageDumper.java @@ -27,12 +27,15 @@ package net.runelite.cache; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.imageio.ImageIO; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; @@ -59,6 +62,13 @@ import net.runelite.cache.region.Region; import net.runelite.cache.region.RegionLoader; import net.runelite.cache.util.BigBufferedImage; import net.runelite.cache.util.KeyProvider; +import net.runelite.cache.util.XteaKeyManager; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; @Slf4j @Accessors(chain = true) @@ -129,6 +139,59 @@ public class MapImageDumper this.objectManager = new ObjectManager(store); } + public static void main(String[] args) throws IOException + { + Options options = new Options(); + options.addOption(Option.builder().longOpt("cachedir").hasArg().required().build()); + options.addOption(Option.builder().longOpt("xteapath").hasArg().required().build()); + options.addOption(Option.builder().longOpt("outputdir").hasArg().required().build()); + + CommandLineParser parser = new DefaultParser(); + CommandLine cmd; + try + { + cmd = parser.parse(options, args); + } + catch (ParseException ex) + { + System.err.println("Error parsing command line options: " + ex.getMessage()); + System.exit(-1); + return; + } + + final String cacheDirectory = cmd.getOptionValue("cachedir"); + final String xteaJSONPath = cmd.getOptionValue("xteapath"); + final String outputDirectory = cmd.getOptionValue("outputdir"); + + XteaKeyManager xteaKeyManager = new XteaKeyManager(); + try (FileInputStream fin = new FileInputStream(xteaJSONPath)) + { + xteaKeyManager.loadKeys(fin); + } + + File base = new File(cacheDirectory); + File outDir = new File(outputDirectory); + outDir.mkdirs(); + + try (Store store = new Store(base)) + { + store.load(); + + MapImageDumper dumper = new MapImageDumper(store, xteaKeyManager); + dumper.load(); + + for (int i = 0; i < Region.Z; ++i) + { + BufferedImage image = dumper.drawMap(i); + + File imageFile = new File(outDir, "img-" + i + ".png"); + + ImageIO.write(image, "png", imageFile); + log.info("Wrote image {}", imageFile); + } + } + } + protected double random() { // the client would use a random value here, but we prefer determinism