processbuider.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * Work in progress
  3. */
  4. const path = require('path')
  5. const fs = require('fs')
  6. class ProcessBuilder {
  7. constructor(gameDirectory, distroServer, versionData, forgeData, authUser){
  8. this.dir = gameDirectory
  9. this.server = server
  10. this.versionData = versionData
  11. this.forgeData = forgeData
  12. this.authUser = authUser
  13. this.fmlDir = path.join(this.dir, 'versions', this.server.id)
  14. }
  15. static shouldInclude(mdle){
  16. //If the module should be included by default
  17. return mdle.required == null || mdle.required.value == null || mdle.required.value === true || (mdle.required.value === false && mdle.required.def === true)
  18. }
  19. resolveDefaultMods(options = {type: 'forgemod'}){
  20. //Returns array of default forge mods to load.
  21. const mods = []
  22. const mdles = this.server.modules
  23. for(let i=0; i<mdles.length; ++i){
  24. if(mdles[i].type != null && mdles[i].type === options.type){
  25. if(_shouldInclude(mdles[i])){
  26. mods.push(mdles[i])
  27. }
  28. }
  29. }
  30. return mods
  31. }
  32. constructFMLModList(mods, save = false){
  33. //untested - save modlist file
  34. const modList = {}
  35. modList.repositoryRoot = path.join(this.dir, 'modstore')
  36. const ids = []
  37. for(let i=0; i<mods.length; ++i){
  38. ids.push(mods.id)
  39. }
  40. modList.modRef = ids
  41. if(save){
  42. fs.writeFileSync(this.fmlDir, modList, 'UTF-8')
  43. }
  44. }
  45. constructJVMArguments(){
  46. //pending changes
  47. const args = [];
  48. const mcArgs = this.forgeData.minecraftArguments.split(' ')
  49. const argDiscovery = /\${*(.*)}/
  50. for(let i=0; i<mcArgs.length; ++i){
  51. if(argDiscovery.test(mcArgs[i])){
  52. const identifier = mcArgs[i]
  53. let val = null;
  54. switch(identifier){
  55. case 'auth_player_name':
  56. val = authUser.selectedProfile.name
  57. break
  58. case 'version_name':
  59. //val = versionData.id
  60. val = this.server.id
  61. break
  62. case 'game_directory':
  63. val = this.dir
  64. break
  65. case 'assets_root':
  66. val = path.join(this.dir, 'assets')
  67. break
  68. case 'assets_index_name':
  69. val = this.versionData.assets
  70. break
  71. case 'auth_uuid':
  72. val = this.authUser.selectedProfile.id
  73. break
  74. case 'auth_access_token':
  75. val = authUser.accessToken
  76. break
  77. case 'user_type':
  78. val = 'MOJANG'
  79. break
  80. case 'version_type':
  81. val = versionData['type']
  82. break
  83. }
  84. if(val != null){
  85. mcArgs[i] = val;
  86. }
  87. }
  88. }
  89. return args.concat(mcArgs);
  90. }
  91. }
  92. module.exports = ProcessBuilder