示例#1
0
  private ObjectDataExtractor(final String odeFolderPath, final String mapPath) throws Exception {
    Log.entry(odeFolderPath, mapPath);
    final MPQArchive map = new MPQArchive(mapPath);

    final File odeFolder = new File(odeFolderPath);
    final File jFile = new File(odeFolder, FILE_NAME_SCRIPT);
    final File wtsFile = new File(odeFolder, FILE_NAME_WTS);
    final File w3uFile = new File(odeFolder, FILE_NAME_W3U);
    final File w3tFile = new File(odeFolder, FILE_NAME_W3T);
    final File w3bFile = new File(odeFolder, FILE_NAME_W3B);

    map.extractFile(FILE_NAME_SCRIPT, jFile);
    map.extractFile(FILE_NAME_WTS, wtsFile);

    Log.info("Loading JASS into memory");
    String scriptContent = readFileToString(jFile.getPath(), StandardCharsets.UTF_8);
    Log.info("Loading WTS from file");
    final WTSFile wts = new WTSFile(wtsFile.getPath());

    final List<Extractor<?, ?>> extractors = new LinkedList<Extractor<?, ?>>();

    // -------------------------------------------------------
    // Unit Data Extractor
    extractors.add(
        new UnitDataExtractor(
            odeFolder, loadW3OFile(W3UFile.class, map, FILE_NAME_W3U, w3uFile, wts)));

    // -------------------------------------------------------
    // Item Data Extractor
    extractors.add(
        new ItemDataExtractor(
            odeFolder, loadW3OFile(W3TFile.class, map, FILE_NAME_W3T, w3tFile, wts)));

    // -------------------------------------------------------
    // Destructable Data Extractor
    extractors.add(
        new DestructableDataExtractor(
            odeFolder, loadW3OFile(W3BFile.class, map, FILE_NAME_W3B, w3bFile, wts)));

    for (final Extractor<?, ?> extractor : extractors) {
      scriptContent = extractor.processScript(scriptContent);
    }

    Log.info("Writing new script file to disk");
    final FileWriter fw = new FileWriter(jFile);
    fw.write(scriptContent);
    fw.close();

    Log.info("Replacing script file in map");
    final MPQFile file = new MPQFile(map, FILE_NAME_SCRIPT, MPQFileOpenScope.MPQ);
    file.removeFromArchive();
    file.close();

    final MPQCompressionFlags compr = new MPQCompressionFlags();
    compr.setCompression(Compression.BZIP2);

    map.addFile(jFile.getAbsolutePath(), FILE_NAME_SCRIPT, MPQFileFlags.fromInteger(0x200), compr);
    map.compactArchive((String) null);
    map.close();

    Log.exit();
  }