actionbinder.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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', 'constants.js'))
  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. }
  14. }, false)
  15. // Keep reference to AssetGuard object temporarily
  16. let tracker;
  17. testdownloads = async function(){
  18. const content = document.getElementById("launch_content")
  19. const details = document.getElementById("launch_details")
  20. const progress = document.getElementById("launch_progress")
  21. const progress_text = document.getElementById("launch_progress_label")
  22. const det_text = document.getElementById("launch_details_text")
  23. det_text.innerHTML = 'Please wait..'
  24. progress.setAttribute('max', '100')
  25. details.style.display = 'flex'
  26. content.style.display = 'none'
  27. tracker = new AssetGuard()
  28. det_text.innerHTML = 'Loading version information..'
  29. const versionData = await tracker.loadVersionData('1.11.2', GAME_DIRECTORY)
  30. progress.setAttribute('value', 20)
  31. progress_text.innerHTML = '20%'
  32. det_text.innerHTML = 'Validating asset integrity..'
  33. await tracker.validateAssets(versionData, GAME_DIRECTORY)
  34. progress.setAttribute('value', 40)
  35. progress_text.innerHTML = '40%'
  36. console.log('assets done')
  37. det_text.innerHTML = 'Validating library integrity..'
  38. await tracker.validateLibraries(versionData, GAME_DIRECTORY)
  39. progress.setAttribute('value', 60)
  40. progress_text.innerHTML = '60%'
  41. console.log('libs done')
  42. det_text.innerHTML = 'Validating miscellaneous file integrity..'
  43. await tracker.validateMiscellaneous(versionData, GAME_DIRECTORY)
  44. progress.setAttribute('value', 80)
  45. progress_text.innerHTML = '80%'
  46. console.log('files done')
  47. det_text.innerHTML = 'Validating server distribution files..'
  48. const serv = await tracker.validateDistribution('WesterosCraft-1.11.2', GAME_DIRECTORY)
  49. progress.setAttribute('value', 100)
  50. progress_text.innerHTML = '100%'
  51. console.log('forge stuff done')
  52. det_text.innerHTML = 'Downloading files..'
  53. tracker.on('totaldlprogress', function(data){
  54. progress.setAttribute('max', data.total)
  55. progress.setAttribute('value', data.acc)
  56. progress_text.innerHTML = parseInt((data.acc/data.total)*100) + '%'
  57. })
  58. tracker.on('dlcomplete', async function(){
  59. det_text.innerHTML = 'Preparing to launch..'
  60. const forgeData = await tracker.loadForgeData('WesterosCraft-1.11.2', GAME_DIRECTORY)
  61. const authUser = await mojang.auth('EMAIL', 'PASS', DEFAULT_CONFIG.getClientToken(), {
  62. name: 'Minecraft',
  63. version: 1
  64. })
  65. let pb = new ProcessBuilder(GAME_DIRECTORY, serv, versionData, forgeData, authUser)
  66. det_text.innerHTML = 'Launching game..'
  67. let proc;
  68. try{
  69. proc = pb.build()
  70. det_text.innerHTML = 'Done. Enjoy the server!'
  71. const tempListener = function(data){
  72. if(data.indexOf('[Client thread/INFO]: -- System Details --') > -1){
  73. details.style.display = 'none'
  74. content.style.display = 'inline-flex'
  75. proc.stdout.removeListener('data', tempListener)
  76. }
  77. }
  78. proc.stdout.on('data', tempListener)
  79. } catch(err) {
  80. //det_text.innerHTML = 'Error: ' + err.message;
  81. det_text.innerHTML = 'Error: See log for details..';
  82. console.log(err)
  83. setTimeout(function(){
  84. details.style.display = 'none'
  85. content.style.display = 'inline-flex'
  86. }, 5000)
  87. }
  88. // Remove reference to tracker.
  89. tracker = null
  90. })
  91. tracker.processDlQueues()
  92. }