ben_mkiv

curseDownload.php

Jun 26th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.69 KB | None | 0 0
  1. #!/usr/bin/php
  2. <?php
  3. echo "\n(i) preparing files\n";
  4.  
  5. if(file_exists($argv[1]))
  6.     $mod = $argv[1];
  7.  
  8. if(!isset($mod)){
  9.     if(!isset($argv[1])) echo 'no file specified';
  10.     else echo "file not found. '".$mod."'";
  11.     exit(0);
  12. }
  13.  
  14. function downloadFile($url, $output, $options = ''){
  15.     system('wget --quiet '.$options.' "'.$url.'" -O "'.$output.'"');
  16. }
  17.  
  18. function readJsonFile($file){
  19.     $fp = fopen($file, "r");
  20.     $jsonData = '';
  21.     while($data=fgets($fp)) $jsonData.=$data;
  22.     fclose($fp);
  23.     return json_decode($jsonData);
  24. }
  25.  
  26. if(!file_exists('/tmp/curseDownloader'))
  27.     mkdir('/tmp/curseDownloader');
  28.  
  29. $modname = basename($mod);
  30.  
  31. copy($mod, '/tmp/curseDownloader/'.$modname);
  32. echo "\n(i) deflating files...";
  33. system('cd /tmp/curseDownloader/ && unzip -f "'.$modname.'" >> /dev/null && rm "'.$modname.'"');
  34. echo " [done]\n";
  35.  
  36. echo "\n(i) loading manifest\n";
  37.  
  38. $manifestFile = '/tmp/curseDownloader/manifest.json';
  39.  
  40. if(!file_exists($manifestFile)){
  41.     echo '(!) manifest not found :(';
  42.     exit(0);
  43. }
  44.  
  45. $manifest = readJsonFile($manifestFile);
  46.  
  47. echo '(i) parsed json file for modpack '.$manifest->version."\n\n";
  48. if(!file_exists('/tmp/curseDownloader/mods'))
  49.     mkdir('/tmp/curseDownloader/mods');
  50. if(!file_exists('/tmp/curseDownloader/manifest'))
  51.     mkdir('/tmp/curseDownloader/manifest');
  52. $i=1;
  53. $cnt = count($manifest->files);
  54.  
  55.  
  56. $skippedFiles = Array();
  57.  
  58. echo '(i) starting mod downloads...'."\n";
  59.  
  60. foreach($manifest->files as $mod){
  61.     $modManifestUrl = 'https://addons-ecs.forgesvc.net/api/v2/addon/'.$mod->projectID.'/file/'.$mod->fileID;
  62.    
  63.     $manifestFile = '/tmp/curseDownloader/manifest/'.$mod->projectID.'.json';
  64.    
  65.     if(!file_exists($manifestFile))
  66.         downloadFile($modManifestUrl, $manifestFile);
  67.    
  68.     $modManifest = readJsonFile($manifestFile);
  69.    
  70.     $file = '/tmp/curseDownloader/mods/'.$modManifest->fileName;
  71.        
  72.     if(file_exists($file) && filesize($file) == $modManifest->fileLength){
  73.         $skippedFiles[] = $modManifest->fileName;
  74.     }
  75.     else {
  76.         if($mod->required == "true")
  77.             echo ' [REQUIRED] ';
  78.        
  79.         echo 'download file ';
  80.         printf('%'.strlen($cnt).'d/'.$cnt, $i);
  81.         echo ' :: '.$modManifest->fileName;
  82.        
  83.         downloadFile($modManifest->downloadUrl, $file, '--continue --content-disposition');
  84.        
  85.         printf(' [%3d%%]'."\n", filesize($file)/$modManifest->fileLength * 100);
  86.     }
  87.    
  88.     $i++;
  89. }
  90.  
  91. if(count($skippedFiles) > 0)
  92.     echo '(i) skipped '.count($skippedFiles).' existing files'."\n";
  93.  
  94. if($manifest->overrides != 'overrides')
  95.     echo var_dump($manifest->overrides);
  96.  
  97. echo "\n".'(!) use minecraft version: '.$manifest->minecraft->version."\n";
  98. foreach($manifest->minecraft->modLoaders as $loader){
  99.     echo ' + modloader '.$loader->id."\n";
  100. }
  101.  
  102. echo "\n".'(i) cleaning up'."\n";
  103.  
  104. exit(1)
  105.  
  106. ?>
Add Comment
Please, Sign In to add comment