actionbinder.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 ConfigManager = require(path.join(__dirname, 'assets', 'js', 'configmanager.js'))
  6. const DiscordWrapper = require(path.join(__dirname, 'assets', 'js', 'discordwrapper.js'))
  7. document.addEventListener('readystatechange', function(){
  8. if (document.readyState === 'interactive'){
  9. // Bind launch button
  10. document.getElementById('launch_button').addEventListener('click', function(e){
  11. console.log('Launching game..')
  12. testdownloads()
  13. })
  14. // TODO convert this to dropdown menu.
  15. // Bind selected server
  16. document.getElementById('server_selection').innerHTML = '\u2022 ' + AssetGuard.getServerById(ConfigManager.getGameDirectory(), ConfigManager.getSelectedServer()).name
  17. }
  18. }, false)
  19. // Keep reference to AssetGuard object temporarily
  20. let tracker;
  21. testdownloads = async function(){
  22. const content = document.getElementById('launch_content')
  23. const details = document.getElementById('launch_details')
  24. const progress = document.getElementById('launch_progress')
  25. const progress_text = document.getElementById('launch_progress_label')
  26. const det_text = document.getElementById('launch_details_text')
  27. det_text.innerHTML = 'Please wait..'
  28. progress.setAttribute('max', '100')
  29. details.style.display = 'flex'
  30. content.style.display = 'none'
  31. tracker = new AssetGuard(ConfigManager.getGameDirectory(), ConfigManager.getJavaExecutable())
  32. det_text.innerHTML = 'Loading server information..'
  33. const serv = await tracker.validateDistribution(ConfigManager.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', ConfigManager.getClientToken(), {
  66. name: 'Minecraft',
  67. version: 1
  68. })
  69. let pb = new ProcessBuilder(ConfigManager.getGameDirectory(), 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. // Init Discord Hook (Untested)
  84. const distro = AssetGuard.retrieveDistributionDataSync(ConfigManager.getGameDirectory)
  85. if(distro.discord != null && serv.discord != null){
  86. DiscordWrapper.initRPC(distro.discord, serv.discord)
  87. proc.on('close', (code, signal) => {
  88. DiscordWrapper.shutdownRPC()
  89. })
  90. }
  91. } catch(err) {
  92. //det_text.innerHTML = 'Error: ' + err.message;
  93. det_text.innerHTML = 'Error: See log for details..';
  94. console.log(err)
  95. setTimeout(function(){
  96. details.style.display = 'none'
  97. content.style.display = 'inline-flex'
  98. }, 5000)
  99. }
  100. // Remove reference to tracker.
  101. tracker = null
  102. })
  103. tracker.processDlQueues()
  104. }