actionbinder.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const mojang = require('mojang')
  2. const path = require('path')
  3. const {AssetGuard} = require(path.join(__dirname, 'assets', 'js', 'assetguard.js'))
  4. const ProcessBuilder = require(path.join(__dirname, 'assets', 'js', 'processbuilder.js'))
  5. const {GAME_DIRECTORY, DEFAULT_CONFIG} = require(path.join(__dirname, 'assets', 'js', 'enumerator.js')).enum
  6. document.addEventListener('readystatechange', function(){
  7. if (document.readyState === 'interactive'){
  8. // Bind launch button
  9. document.getElementById('launch_button').addEventListener('click', function(e){
  10. console.log('Launching game..')
  11. testdownloads()
  12. })
  13. // TODO convert this to dropdown menu.
  14. // Bind selected server
  15. document.getElementById('server_selection').innerHTML = '\u2022 ' + AssetGuard.getServerById(GAME_DIRECTORY, DEFAULT_CONFIG.getSelectedServer()).name
  16. }
  17. }, false)
  18. // Keep reference to AssetGuard object temporarily
  19. let tracker;
  20. testdownloads = async function(){
  21. const content = document.getElementById('launch_content')
  22. const details = document.getElementById('launch_details')
  23. const progress = document.getElementById('launch_progress')
  24. const progress_text = document.getElementById('launch_progress_label')
  25. const det_text = document.getElementById('launch_details_text')
  26. det_text.innerHTML = 'Please wait..'
  27. progress.setAttribute('max', '100')
  28. details.style.display = 'flex'
  29. content.style.display = 'none'
  30. console.log(DEFAULT_CONFIG.getJavaExecutable())
  31. tracker = new AssetGuard(GAME_DIRECTORY, DEFAULT_CONFIG.getJavaExecutable())
  32. det_text.innerHTML = 'Loading server information..'
  33. const serv = await tracker.validateDistribution(DEFAULT_CONFIG.getSelectedServer())
  34. progress.setAttribute('value', 20)
  35. progress_text.innerHTML = '20%'
  36. console.log('forge stuff done')
  37. det_text.innerHTML = 'Loading version information..'
  38. const versionData = await tracker.loadVersionData(serv.mc_version)
  39. progress.setAttribute('value', 40)
  40. progress_text.innerHTML = '40%'
  41. det_text.innerHTML = 'Validating asset integrity..'
  42. await tracker.validateAssets(versionData)
  43. progress.setAttribute('value', 60)
  44. progress_text.innerHTML = '60%'
  45. console.log('assets done')
  46. det_text.innerHTML = 'Validating library integrity..'
  47. await tracker.validateLibraries(versionData)
  48. progress.setAttribute('value', 80)
  49. progress_text.innerHTML = '80%'
  50. console.log('libs done')
  51. det_text.innerHTML = 'Validating miscellaneous file integrity..'
  52. await tracker.validateMiscellaneous(versionData)
  53. progress.setAttribute('value', 100)
  54. progress_text.innerHTML = '100%'
  55. console.log('files done')
  56. det_text.innerHTML = 'Downloading files..'
  57. tracker.on('totaldlprogress', function(data){
  58. progress.setAttribute('max', data.total)
  59. progress.setAttribute('value', data.acc)
  60. progress_text.innerHTML = parseInt((data.acc/data.total)*100) + '%'
  61. })
  62. tracker.on('dlcomplete', async function(){
  63. det_text.innerHTML = 'Preparing to launch..'
  64. const forgeData = await tracker.loadForgeData(serv.id)
  65. const authUser = await mojang.auth('EMAIL', 'PASS', DEFAULT_CONFIG.getClientToken(), {
  66. name: 'Minecraft',
  67. version: 1
  68. })
  69. let pb = new ProcessBuilder(GAME_DIRECTORY, serv, versionData, forgeData, authUser)
  70. det_text.innerHTML = 'Launching game..'
  71. let proc;
  72. try{
  73. proc = pb.build()
  74. det_text.innerHTML = 'Done. Enjoy the server!'
  75. const tempListener = function(data){
  76. if(data.indexOf('[Client thread/INFO]: -- System Details --') > -1){
  77. details.style.display = 'none'
  78. content.style.display = 'inline-flex'
  79. proc.stdout.removeListener('data', tempListener)
  80. }
  81. }
  82. proc.stdout.on('data', tempListener)
  83. } catch(err) {
  84. //det_text.innerHTML = 'Error: ' + err.message;
  85. det_text.innerHTML = 'Error: See log for details..';
  86. console.log(err)
  87. setTimeout(function(){
  88. details.style.display = 'none'
  89. content.style.display = 'inline-flex'
  90. }, 5000)
  91. }
  92. // Remove reference to tracker.
  93. tracker = null
  94. })
  95. tracker.processDlQueues()
  96. }