mirror of
https://github.com/dscalzi/HeliosLauncher.git
synced 2024-12-22 03:32:12 -08:00
Compare commits
8 Commits
b704fff09f
...
840005f7d9
Author | SHA1 | Date | |
---|---|---|---|
|
840005f7d9 | ||
|
258cd0d421 | ||
|
f65eb2f2d6 | ||
|
fb1cb7b415 | ||
|
db3a4998d9 | ||
|
e5b236dd46 | ||
|
b2109168f5 | ||
|
b945b7278c |
@ -3204,6 +3204,7 @@ input:checked + .toggleSwitchSlider:before {
|
|||||||
#server_status_wrapper {
|
#server_status_wrapper {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
width: 75px;
|
width: 75px;
|
||||||
|
text-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Span which displays the player count of the selected server. */
|
/* Span which displays the player count of the selected server. */
|
||||||
@ -3295,6 +3296,7 @@ input:checked + .toggleSwitchSlider:before {
|
|||||||
padding: 0px 3px;
|
padding: 0px 3px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
letter-spacing: 1px;
|
letter-spacing: 1px;
|
||||||
|
text-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wrapper container for mojang service information. */
|
/* Wrapper container for mojang service information. */
|
||||||
|
@ -12,14 +12,23 @@ const ConfigManager = require('./configmanager')
|
|||||||
|
|
||||||
const logger = LoggerUtil.getLogger('ProcessBuilder')
|
const logger = LoggerUtil.getLogger('ProcessBuilder')
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Only forge and fabric are top level mod loaders.
|
||||||
|
*
|
||||||
|
* Forge 1.13+ launch logic is similar to fabrics, for now using usingFabricLoader flag to
|
||||||
|
* change minor details when needed.
|
||||||
|
*
|
||||||
|
* Rewrite of this module may be needed in the future.
|
||||||
|
*/
|
||||||
class ProcessBuilder {
|
class ProcessBuilder {
|
||||||
|
|
||||||
constructor(distroServer, versionData, forgeData, authUser, launcherVersion){
|
constructor(distroServer, vanillaManifest, modManifest, authUser, launcherVersion){
|
||||||
this.gameDir = path.join(ConfigManager.getInstanceDirectory(), distroServer.rawServer.id)
|
this.gameDir = path.join(ConfigManager.getInstanceDirectory(), distroServer.rawServer.id)
|
||||||
this.commonDir = ConfigManager.getCommonDirectory()
|
this.commonDir = ConfigManager.getCommonDirectory()
|
||||||
this.server = distroServer
|
this.server = distroServer
|
||||||
this.versionData = versionData
|
this.vanillaManifest = vanillaManifest
|
||||||
this.forgeData = forgeData
|
this.modManifest = modManifest
|
||||||
this.authUser = authUser
|
this.authUser = authUser
|
||||||
this.launcherVersion = launcherVersion
|
this.launcherVersion = launcherVersion
|
||||||
this.forgeModListFile = path.join(this.gameDir, 'forgeMods.list') // 1.13+
|
this.forgeModListFile = path.join(this.gameDir, 'forgeMods.list') // 1.13+
|
||||||
@ -28,6 +37,7 @@ class ProcessBuilder {
|
|||||||
this.libPath = path.join(this.commonDir, 'libraries')
|
this.libPath = path.join(this.commonDir, 'libraries')
|
||||||
|
|
||||||
this.usingLiteLoader = false
|
this.usingLiteLoader = false
|
||||||
|
this.usingFabricLoader = false
|
||||||
this.llPath = null
|
this.llPath = null
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,9 +50,12 @@ class ProcessBuilder {
|
|||||||
process.throwDeprecation = true
|
process.throwDeprecation = true
|
||||||
this.setupLiteLoader()
|
this.setupLiteLoader()
|
||||||
logger.info('Using liteloader:', this.usingLiteLoader)
|
logger.info('Using liteloader:', this.usingLiteLoader)
|
||||||
|
this.usingFabricLoader = this.server.modules.some(mdl => mdl.rawModule.type === Type.Fabric)
|
||||||
|
logger.info('Using fabric loader:', this.usingFabricLoader)
|
||||||
const modObj = this.resolveModConfiguration(ConfigManager.getModConfiguration(this.server.rawServer.id).mods, this.server.modules)
|
const modObj = this.resolveModConfiguration(ConfigManager.getModConfiguration(this.server.rawServer.id).mods, this.server.modules)
|
||||||
|
|
||||||
// Mod list below 1.13
|
// Mod list below 1.13
|
||||||
|
// Fabric only supports 1.14+
|
||||||
if(!mcVersionAtLeast('1.13', this.server.rawServer.minecraftVersion)){
|
if(!mcVersionAtLeast('1.13', this.server.rawServer.minecraftVersion)){
|
||||||
this.constructJSONModList('forge', modObj.fMods, true)
|
this.constructJSONModList('forge', modObj.fMods, true)
|
||||||
if(this.usingLiteLoader){
|
if(this.usingLiteLoader){
|
||||||
@ -166,7 +179,7 @@ class ProcessBuilder {
|
|||||||
|
|
||||||
for(let mdl of mdls){
|
for(let mdl of mdls){
|
||||||
const type = mdl.rawModule.type
|
const type = mdl.rawModule.type
|
||||||
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
|
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
|
||||||
const o = !mdl.getRequired().value
|
const o = !mdl.getRequired().value
|
||||||
const e = ProcessBuilder.isModEnabled(modCfg[mdl.getVersionlessMavenIdentifier()], mdl.getRequired())
|
const e = ProcessBuilder.isModEnabled(modCfg[mdl.getVersionlessMavenIdentifier()], mdl.getRequired())
|
||||||
if(!o || (o && e)){
|
if(!o || (o && e)){
|
||||||
@ -178,7 +191,7 @@ class ProcessBuilder {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(type === Type.ForgeMod){
|
if(type === Type.ForgeMod || type === Type.FabricMod){
|
||||||
fMods.push(mdl)
|
fMods.push(mdl)
|
||||||
} else {
|
} else {
|
||||||
lMods.push(mdl)
|
lMods.push(mdl)
|
||||||
@ -194,7 +207,7 @@ class ProcessBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_lteMinorVersion(version) {
|
_lteMinorVersion(version) {
|
||||||
return Number(this.forgeData.id.split('-')[0].split('.')[1]) <= Number(version)
|
return Number(this.modManifest.id.split('-')[0].split('.')[1]) <= Number(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,7 +219,7 @@ class ProcessBuilder {
|
|||||||
if(this._lteMinorVersion(9)) {
|
if(this._lteMinorVersion(9)) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const ver = this.forgeData.id.split('-')[2]
|
const ver = this.modManifest.id.split('-')[2]
|
||||||
const pts = ver.split('.')
|
const pts = ver.split('.')
|
||||||
const min = [14, 23, 3, 2655]
|
const min = [14, 23, 3, 2655]
|
||||||
for(let i=0; i<pts.length; i++){
|
for(let i=0; i<pts.length; i++){
|
||||||
@ -282,18 +295,21 @@ class ProcessBuilder {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct the mod argument list for forge 1.13
|
* Construct the mod argument list for forge 1.13 and Fabric
|
||||||
*
|
*
|
||||||
* @param {Array.<Object>} mods An array of mods to add to the mod list.
|
* @param {Array.<Object>} mods An array of mods to add to the mod list.
|
||||||
*/
|
*/
|
||||||
constructModList(mods) {
|
constructModList(mods) {
|
||||||
const writeBuffer = mods.map(mod => {
|
const writeBuffer = mods.map(mod => {
|
||||||
return mod.getExtensionlessMavenIdentifier()
|
return this.usingFabricLoader ? mod.getPath() : mod.getExtensionlessMavenIdentifier()
|
||||||
}).join('\n')
|
}).join('\n')
|
||||||
|
|
||||||
if(writeBuffer) {
|
if(writeBuffer) {
|
||||||
fs.writeFileSync(this.forgeModListFile, writeBuffer, 'UTF-8')
|
fs.writeFileSync(this.forgeModListFile, writeBuffer, 'UTF-8')
|
||||||
return [
|
return this.usingFabricLoader ? [
|
||||||
|
'--fabric.addMods',
|
||||||
|
`@${this.forgeModListFile}`
|
||||||
|
] : [
|
||||||
'--fml.mavenRoots',
|
'--fml.mavenRoots',
|
||||||
path.join('..', '..', 'common', 'modstore'),
|
path.join('..', '..', 'common', 'modstore'),
|
||||||
'--fml.modLists',
|
'--fml.modLists',
|
||||||
@ -361,7 +377,7 @@ class ProcessBuilder {
|
|||||||
args.push('-Djava.library.path=' + tempNativePath)
|
args.push('-Djava.library.path=' + tempNativePath)
|
||||||
|
|
||||||
// Main Java Class
|
// Main Java Class
|
||||||
args.push(this.forgeData.mainClass)
|
args.push(this.modManifest.mainClass)
|
||||||
|
|
||||||
// Forge Arguments
|
// Forge Arguments
|
||||||
args = args.concat(this._resolveForgeArgs())
|
args = args.concat(this._resolveForgeArgs())
|
||||||
@ -384,17 +400,17 @@ class ProcessBuilder {
|
|||||||
const argDiscovery = /\${*(.*)}/
|
const argDiscovery = /\${*(.*)}/
|
||||||
|
|
||||||
// JVM Arguments First
|
// JVM Arguments First
|
||||||
let args = this.versionData.arguments.jvm
|
let args = this.vanillaManifest.arguments.jvm
|
||||||
|
|
||||||
// Debug securejarhandler
|
// Debug securejarhandler
|
||||||
// args.push('-Dbsl.debug=true')
|
// args.push('-Dbsl.debug=true')
|
||||||
|
|
||||||
if(this.forgeData.arguments.jvm != null) {
|
if(this.modManifest.arguments.jvm != null) {
|
||||||
for(const argStr of this.forgeData.arguments.jvm) {
|
for(const argStr of this.modManifest.arguments.jvm) {
|
||||||
args.push(argStr
|
args.push(argStr
|
||||||
.replaceAll('${library_directory}', this.libPath)
|
.replaceAll('${library_directory}', this.libPath)
|
||||||
.replaceAll('${classpath_separator}', ProcessBuilder.getClasspathSeparator())
|
.replaceAll('${classpath_separator}', ProcessBuilder.getClasspathSeparator())
|
||||||
.replaceAll('${version_name}', this.forgeData.id)
|
.replaceAll('${version_name}', this.modManifest.id)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -411,10 +427,10 @@ class ProcessBuilder {
|
|||||||
args = args.concat(ConfigManager.getJVMOptions(this.server.rawServer.id))
|
args = args.concat(ConfigManager.getJVMOptions(this.server.rawServer.id))
|
||||||
|
|
||||||
// Main Java Class
|
// Main Java Class
|
||||||
args.push(this.forgeData.mainClass)
|
args.push(this.modManifest.mainClass)
|
||||||
|
|
||||||
// Vanilla Arguments
|
// Vanilla Arguments
|
||||||
args = args.concat(this.versionData.arguments.game)
|
args = args.concat(this.vanillaManifest.arguments.game)
|
||||||
|
|
||||||
for(let i=0; i<args.length; i++){
|
for(let i=0; i<args.length; i++){
|
||||||
if(typeof args[i] === 'object' && args[i].rules != null){
|
if(typeof args[i] === 'object' && args[i].rules != null){
|
||||||
@ -471,7 +487,7 @@ class ProcessBuilder {
|
|||||||
val = this.authUser.displayName.trim()
|
val = this.authUser.displayName.trim()
|
||||||
break
|
break
|
||||||
case 'version_name':
|
case 'version_name':
|
||||||
//val = versionData.id
|
//val = vanillaManifest.id
|
||||||
val = this.server.rawServer.id
|
val = this.server.rawServer.id
|
||||||
break
|
break
|
||||||
case 'game_directory':
|
case 'game_directory':
|
||||||
@ -481,7 +497,7 @@ class ProcessBuilder {
|
|||||||
val = path.join(this.commonDir, 'assets')
|
val = path.join(this.commonDir, 'assets')
|
||||||
break
|
break
|
||||||
case 'assets_index_name':
|
case 'assets_index_name':
|
||||||
val = this.versionData.assets
|
val = this.vanillaManifest.assets
|
||||||
break
|
break
|
||||||
case 'auth_uuid':
|
case 'auth_uuid':
|
||||||
val = this.authUser.uuid.trim()
|
val = this.authUser.uuid.trim()
|
||||||
@ -493,7 +509,7 @@ class ProcessBuilder {
|
|||||||
val = this.authUser.type === 'microsoft' ? 'msa' : 'mojang'
|
val = this.authUser.type === 'microsoft' ? 'msa' : 'mojang'
|
||||||
break
|
break
|
||||||
case 'version_type':
|
case 'version_type':
|
||||||
val = this.versionData.type
|
val = this.vanillaManifest.type
|
||||||
break
|
break
|
||||||
case 'resolution_width':
|
case 'resolution_width':
|
||||||
val = ConfigManager.getGameWidth()
|
val = ConfigManager.getGameWidth()
|
||||||
@ -522,25 +538,11 @@ class ProcessBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Autoconnect
|
// Autoconnect
|
||||||
let isAutoconnectBroken
|
this._processAutoConnectArg(args)
|
||||||
try {
|
|
||||||
isAutoconnectBroken = ProcessBuilder.isAutoconnectBroken(this.forgeData.id.split('-')[2])
|
|
||||||
} catch(err) {
|
|
||||||
logger.error(err)
|
|
||||||
logger.error('Forge version format changed.. assuming autoconnect works.')
|
|
||||||
logger.debug('Forge version:', this.forgeData.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isAutoconnectBroken) {
|
|
||||||
logger.error('Server autoconnect disabled on Forge 1.15.2 for builds earlier than 31.2.15 due to OpenGL Stack Overflow issue.')
|
|
||||||
logger.error('Please upgrade your Forge version to at least 31.2.15!')
|
|
||||||
} else {
|
|
||||||
this._processAutoConnectArg(args)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Forge Specific Arguments
|
// Forge Specific Arguments
|
||||||
args = args.concat(this.forgeData.arguments.game)
|
args = args.concat(this.modManifest.arguments.game)
|
||||||
|
|
||||||
// Filter null values
|
// Filter null values
|
||||||
args = args.filter(arg => {
|
args = args.filter(arg => {
|
||||||
@ -556,7 +558,7 @@ class ProcessBuilder {
|
|||||||
* @returns {Array.<string>} An array containing the arguments required by forge.
|
* @returns {Array.<string>} An array containing the arguments required by forge.
|
||||||
*/
|
*/
|
||||||
_resolveForgeArgs(){
|
_resolveForgeArgs(){
|
||||||
const mcArgs = this.forgeData.minecraftArguments.split(' ')
|
const mcArgs = this.modManifest.minecraftArguments.split(' ')
|
||||||
const argDiscovery = /\${*(.*)}/
|
const argDiscovery = /\${*(.*)}/
|
||||||
|
|
||||||
// Replace the declared variables with their proper values.
|
// Replace the declared variables with their proper values.
|
||||||
@ -569,7 +571,7 @@ class ProcessBuilder {
|
|||||||
val = this.authUser.displayName.trim()
|
val = this.authUser.displayName.trim()
|
||||||
break
|
break
|
||||||
case 'version_name':
|
case 'version_name':
|
||||||
//val = versionData.id
|
//val = vanillaManifest.id
|
||||||
val = this.server.rawServer.id
|
val = this.server.rawServer.id
|
||||||
break
|
break
|
||||||
case 'game_directory':
|
case 'game_directory':
|
||||||
@ -579,7 +581,7 @@ class ProcessBuilder {
|
|||||||
val = path.join(this.commonDir, 'assets')
|
val = path.join(this.commonDir, 'assets')
|
||||||
break
|
break
|
||||||
case 'assets_index_name':
|
case 'assets_index_name':
|
||||||
val = this.versionData.assets
|
val = this.vanillaManifest.assets
|
||||||
break
|
break
|
||||||
case 'auth_uuid':
|
case 'auth_uuid':
|
||||||
val = this.authUser.uuid.trim()
|
val = this.authUser.uuid.trim()
|
||||||
@ -594,7 +596,7 @@ class ProcessBuilder {
|
|||||||
val = '{}'
|
val = '{}'
|
||||||
break
|
break
|
||||||
case 'version_type':
|
case 'version_type':
|
||||||
val = this.versionData.type
|
val = this.vanillaManifest.type
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if(val != null){
|
if(val != null){
|
||||||
@ -669,10 +671,10 @@ class ProcessBuilder {
|
|||||||
classpathArg(mods, tempNativePath){
|
classpathArg(mods, tempNativePath){
|
||||||
let cpArgs = []
|
let cpArgs = []
|
||||||
|
|
||||||
if(!mcVersionAtLeast('1.17', this.server.rawServer.minecraftVersion)) {
|
if(!mcVersionAtLeast('1.17', this.server.rawServer.minecraftVersion) || this.usingFabricLoader) {
|
||||||
// Add the version.jar to the classpath.
|
// Add the version.jar to the classpath.
|
||||||
// Must not be added to the classpath for Forge 1.17+.
|
// Must not be added to the classpath for Forge 1.17+.
|
||||||
const version = this.versionData.id
|
const version = this.vanillaManifest.id
|
||||||
cpArgs.push(path.join(this.commonDir, 'versions', version, version + '.jar'))
|
cpArgs.push(path.join(this.commonDir, 'versions', version, version + '.jar'))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -711,7 +713,7 @@ class ProcessBuilder {
|
|||||||
const nativesRegex = /.+:natives-([^-]+)(?:-(.+))?/
|
const nativesRegex = /.+:natives-([^-]+)(?:-(.+))?/
|
||||||
const libs = {}
|
const libs = {}
|
||||||
|
|
||||||
const libArr = this.versionData.libraries
|
const libArr = this.vanillaManifest.libraries
|
||||||
fs.ensureDirSync(tempNativePath)
|
fs.ensureDirSync(tempNativePath)
|
||||||
for(let i=0; i<libArr.length; i++){
|
for(let i=0; i<libArr.length; i++){
|
||||||
const lib = libArr[i]
|
const lib = libArr[i]
|
||||||
@ -830,10 +832,10 @@ class ProcessBuilder {
|
|||||||
const mdls = this.server.modules
|
const mdls = this.server.modules
|
||||||
let libs = {}
|
let libs = {}
|
||||||
|
|
||||||
// Locate Forge/Libraries
|
// Locate Forge/Fabric/Libraries
|
||||||
for(let mdl of mdls){
|
for(let mdl of mdls){
|
||||||
const type = mdl.rawModule.type
|
const type = mdl.rawModule.type
|
||||||
if(type === Type.ForgeHosted || type === Type.Library){
|
if(type === Type.ForgeHosted || type === Type.Fabric || type === Type.Library){
|
||||||
libs[mdl.getVersionlessMavenIdentifier()] = mdl.getPath()
|
libs[mdl.getVersionlessMavenIdentifier()] = mdl.getPath()
|
||||||
if(mdl.subModules.length > 0){
|
if(mdl.subModules.length > 0){
|
||||||
const res = this._resolveModuleLibraries(mdl)
|
const res = this._resolveModuleLibraries(mdl)
|
||||||
@ -887,24 +889,6 @@ class ProcessBuilder {
|
|||||||
return libs
|
return libs
|
||||||
}
|
}
|
||||||
|
|
||||||
static isAutoconnectBroken(forgeVersion) {
|
|
||||||
|
|
||||||
const minWorking = [31, 2, 15]
|
|
||||||
const verSplit = forgeVersion.split('.').map(v => Number(v))
|
|
||||||
|
|
||||||
if(verSplit[0] === 31) {
|
|
||||||
for(let i=0; i<minWorking.length; i++) {
|
|
||||||
if(verSplit[i] > minWorking[i]) {
|
|
||||||
return false
|
|
||||||
} else if(verSplit[i] < minWorking[i]) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ProcessBuilder
|
module.exports = ProcessBuilder
|
@ -442,7 +442,7 @@ let hasRPC = false
|
|||||||
// Joined server regex
|
// Joined server regex
|
||||||
// Change this if your server uses something different.
|
// Change this if your server uses something different.
|
||||||
const GAME_JOINED_REGEX = /\[.+\]: Sound engine started/
|
const GAME_JOINED_REGEX = /\[.+\]: Sound engine started/
|
||||||
const GAME_LAUNCH_REGEX = /^\[.+\]: (?:MinecraftForge .+ Initialized|ModLauncher .+ starting: .+)$/
|
const GAME_LAUNCH_REGEX = /^\[.+\]: (?:MinecraftForge .+ Initialized|ModLauncher .+ starting: .+|Loading Minecraft .+ with Fabric Loader .+)$/
|
||||||
const MIN_LINGER = 5000
|
const MIN_LINGER = 5000
|
||||||
|
|
||||||
async function dlAsync(login = true) {
|
async function dlAsync(login = true) {
|
||||||
@ -548,13 +548,13 @@ async function dlAsync(login = true) {
|
|||||||
serv.rawServer.id
|
serv.rawServer.id
|
||||||
)
|
)
|
||||||
|
|
||||||
const forgeData = await distributionIndexProcessor.loadForgeVersionJson(serv)
|
const modLoaderData = await distributionIndexProcessor.loadModLoaderVersionJson(serv)
|
||||||
const versionData = await mojangIndexProcessor.getVersionJson()
|
const versionData = await mojangIndexProcessor.getVersionJson()
|
||||||
|
|
||||||
if(login) {
|
if(login) {
|
||||||
const authUser = ConfigManager.getSelectedAccount()
|
const authUser = ConfigManager.getSelectedAccount()
|
||||||
loggerLaunchSuite.info(`Sending selected account (${authUser.displayName}) to ProcessBuilder.`)
|
loggerLaunchSuite.info(`Sending selected account (${authUser.displayName}) to ProcessBuilder.`)
|
||||||
let pb = new ProcessBuilder(serv, versionData, forgeData, authUser, remote.app.getVersion())
|
let pb = new ProcessBuilder(serv, versionData, modLoaderData, authUser, remote.app.getVersion())
|
||||||
setLaunchDetails(Lang.queryJS('landing.dlAsync.launchingGame'))
|
setLaunchDetails(Lang.queryJS('landing.dlAsync.launchingGame'))
|
||||||
|
|
||||||
// const SERVER_JOINED_REGEX = /\[.+\]: \[CHAT\] [a-zA-Z0-9_]{1,16} joined the game/
|
// const SERVER_JOINED_REGEX = /\[.+\]: \[CHAT\] [a-zA-Z0-9_]{1,16} joined the game/
|
||||||
|
@ -736,7 +736,7 @@ function parseModulesForUI(mdls, submodules, servConf){
|
|||||||
|
|
||||||
for(const mdl of mdls){
|
for(const mdl of mdls){
|
||||||
|
|
||||||
if(mdl.rawModule.type === Type.ForgeMod || mdl.rawModule.type === Type.LiteMod || mdl.rawModule.type === Type.LiteLoader){
|
if(mdl.rawModule.type === Type.ForgeMod || mdl.rawModule.type === Type.LiteMod || mdl.rawModule.type === Type.LiteLoader || mdl.rawModule.type === Type.FabricMod){
|
||||||
|
|
||||||
if(mdl.getRequired().value){
|
if(mdl.getRequired().value){
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ function syncModConfigurations(data){
|
|||||||
for(let mdl of mdls){
|
for(let mdl of mdls){
|
||||||
const type = mdl.rawModule.type
|
const type = mdl.rawModule.type
|
||||||
|
|
||||||
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
|
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
|
||||||
if(!mdl.getRequired().value){
|
if(!mdl.getRequired().value){
|
||||||
const mdlID = mdl.getVersionlessMavenIdentifier()
|
const mdlID = mdl.getVersionlessMavenIdentifier()
|
||||||
if(modsOld[mdlID] == null){
|
if(modsOld[mdlID] == null){
|
||||||
@ -198,7 +198,7 @@ function syncModConfigurations(data){
|
|||||||
|
|
||||||
for(let mdl of mdls){
|
for(let mdl of mdls){
|
||||||
const type = mdl.rawModule.type
|
const type = mdl.rawModule.type
|
||||||
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
|
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
|
||||||
if(!mdl.getRequired().value){
|
if(!mdl.getRequired().value){
|
||||||
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
|
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
|
||||||
} else {
|
} else {
|
||||||
@ -253,7 +253,7 @@ function scanOptionalSubModules(mdls, origin){
|
|||||||
for(let mdl of mdls){
|
for(let mdl of mdls){
|
||||||
const type = mdl.rawModule.type
|
const type = mdl.rawModule.type
|
||||||
// Optional types.
|
// Optional types.
|
||||||
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
|
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
|
||||||
// It is optional.
|
// It is optional.
|
||||||
if(!mdl.getRequired().value){
|
if(!mdl.getRequired().value){
|
||||||
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
|
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
|
||||||
|
266
app/assets/lang/ja_JP.toml
Normal file
266
app/assets/lang/ja_JP.toml
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
[ejs.landing]
|
||||||
|
updateAvailableTooltip = "アップデートが利用可能です"
|
||||||
|
usernamePlaceholder = "ユーザー名"
|
||||||
|
usernameEditButton = "編集"
|
||||||
|
settingsTooltip = "設定"
|
||||||
|
mojangStatus = "MOJANG ステータス"
|
||||||
|
mojangStatusTooltipTitle = "サービス"
|
||||||
|
mojangStatusNETitle = "非必須"
|
||||||
|
newsButton = "ニュース"
|
||||||
|
launchButton = "プレイ"
|
||||||
|
launchButtonPlaceholder = "• サーバーが選択されていません"
|
||||||
|
launchDetails = "お待ちください..."
|
||||||
|
newsErrorLoadSpan = "ニュースを確認中..."
|
||||||
|
newsErrorFailedSpan = "ニュースの読み込みに失敗しました"
|
||||||
|
newsErrorRetryButton = "再試行"
|
||||||
|
newsErrorNoneSpan = "ニュースなし"
|
||||||
|
|
||||||
|
[ejs.login]
|
||||||
|
loginCancelText = "キャンセル"
|
||||||
|
loginSubheader = "MINECRAFT ログイン"
|
||||||
|
loginEmailError = "* 無効な値です"
|
||||||
|
loginEmailPlaceholder = "メールアドレスまたはユーザー名"
|
||||||
|
loginPasswordError = "* 必須項目です"
|
||||||
|
loginPasswordPlaceholder = "パスワード"
|
||||||
|
loginForgotPasswordText = "パスワードを忘れた場合"
|
||||||
|
loginRememberMeText = "記憶する"
|
||||||
|
loginButtonText = "ログイン"
|
||||||
|
loginNeedAccountText = "アカウントが必要ですか?"
|
||||||
|
loginPasswordDisclaimer1 = "あなたのパスワードは直接Mojangに送信され、保存されません。"
|
||||||
|
loginPasswordDisclaimer2 = "{appName}はMojang ABと提携していません。"
|
||||||
|
|
||||||
|
[ejs.loginOptions]
|
||||||
|
loginOptionsTitle = "ログインオプション"
|
||||||
|
loginWithMicrosoft = "Microsoftアカウントでログイン"
|
||||||
|
loginWithMojang = "Mojangアカウントでログイン"
|
||||||
|
cancelButton = "キャンセル"
|
||||||
|
|
||||||
|
[ejs.overlay]
|
||||||
|
serverSelectHeader = "利用可能なサーバー"
|
||||||
|
serverSelectConfirm = "選択"
|
||||||
|
serverSelectCancel = "キャンセル"
|
||||||
|
accountSelectHeader = "アカウントを選択"
|
||||||
|
accountSelectConfirm = "選択"
|
||||||
|
accountSelectCancel = "キャンセル"
|
||||||
|
|
||||||
|
[ejs.settings]
|
||||||
|
navHeaderText = "設定"
|
||||||
|
navAccount = "アカウント"
|
||||||
|
navMods = "Mod"
|
||||||
|
navLauncher = "ランチャー"
|
||||||
|
navUpdates = "アップデート"
|
||||||
|
navDone = "完了"
|
||||||
|
tabAccountHeaderText = "アカウント設定"
|
||||||
|
tabAccountHeaderDesc = "新しいアカウントを追加、又は使用するアカウントを管理します"
|
||||||
|
addMicrosoftAccount = "+ Microsoft アカウントを追加"
|
||||||
|
addMojangAccount = "+ Mojang アカウントを追加"
|
||||||
|
minecraftTabHeaderText = "Minecraft 設定"
|
||||||
|
minecraftTabHeaderDesc = "ゲーム起動に関連するオプション"
|
||||||
|
gameResolutionTitle = "ゲーム解像度"
|
||||||
|
launchFullscreenTitle = "フルスクリーンで起動"
|
||||||
|
autoConnectTitle = "起動時にサーバーに自動的に接続する"
|
||||||
|
launchDetachedTitle = "ランチャーとゲームを分離する"
|
||||||
|
launchDetachedDesc = "オフにするとランチャーを閉じた際にゲームも終了します。"
|
||||||
|
tabModsHeaderText = "Mod 設定"
|
||||||
|
tabModsHeaderDesc = "ModをON/OFFしたり、追加したりできます"
|
||||||
|
switchServerButton = "切り替え"
|
||||||
|
requiredMods = "必須 Mod"
|
||||||
|
optionalMods = "オプション Mod"
|
||||||
|
dropinMods = "ドロップ・イン Mod"
|
||||||
|
addMods = "+ Mod を追加"
|
||||||
|
dropinRefreshNote = "(F5を押してリロードしてください)"
|
||||||
|
shaderpacks = "シェーダーパック"
|
||||||
|
shaderpackDesc = "シェーダーパックを追加・管理できます。<br>シェーダーを快適に動作させるにはハイスペックなマシンが必要です。"
|
||||||
|
selectShaderpack = "シェーダーパックを選択"
|
||||||
|
tabJavaHeaderText = "Java 設定"
|
||||||
|
tabJavaHeaderDesc = "Java の詳細設定"
|
||||||
|
memoryTitle = "メモリ"
|
||||||
|
maxRAM = "最大メモリ"
|
||||||
|
minRAM = "最小メモリ"
|
||||||
|
memoryDesc = "推奨する最小メモリは 3 GBです。最小値と最大値を同じ値に設定すると、ラグが減少する場合があります。"
|
||||||
|
memoryTotalTitle = "合計"
|
||||||
|
memoryAvailableTitle = "利用可能"
|
||||||
|
javaExecutableTitle = "Java 実行ファイル"
|
||||||
|
javaExecSelDialogTitle = "Java 実行ファイルの選択"
|
||||||
|
javaExecSelButtonText = "ファイルを選択"
|
||||||
|
javaExecDesc = "実行可能なJavaファイルかゲーム起動前に検証されます。"
|
||||||
|
javaPathDesc = "パスは <strong>{pathSuffix}</strong> で終わる必要があります。"
|
||||||
|
jvmOptsTitle = "Java起動時引数"
|
||||||
|
jvmOptsDesc = "実行時にJVMに提供されるオプション。<em>-Xms</em> および <em>-Xmx</em> は含めないでください。"
|
||||||
|
launcherTabHeaderText = "ランチャー設定"
|
||||||
|
launcherTabHeaderDesc = "ランチャー本体に関連するオプション"
|
||||||
|
allowPrereleaseTitle = "プレリリースのアップデートを許可"
|
||||||
|
allowPrereleaseDesc = "プレリリースには十分にテストされていない新機能が含まれる場合があります。<br>プレリリースバージョンを使用している場合、常に有効になります。"
|
||||||
|
dataDirectoryTitle = "データディレクトリ"
|
||||||
|
selectDataDirectory = "データディレクトリを選択"
|
||||||
|
chooseFolder = "フォルダを選択"
|
||||||
|
dataDirectoryDesc = "このランチャーのすべてのゲームデータとJavaランタイムが保存されます。<br>スクリーンショットとワールドデータは、対応するModパックのフォルダに保存されます。"
|
||||||
|
aboutTabHeaderDesc = "現在のバージョンの情報とリリースノートを表示します"
|
||||||
|
stableRelease = "安定版リリース"
|
||||||
|
versionText = "バージョン "
|
||||||
|
sourceGithub = "ソース(GitHub)"
|
||||||
|
support = "サポート"
|
||||||
|
devToolsConsole = "DevTools コンソール"
|
||||||
|
releaseNotes = "リリースノート"
|
||||||
|
changelog = "変更履歴"
|
||||||
|
noReleaseNotes = "リリースノートはありません"
|
||||||
|
viewReleaseNotes = "GitHub でリリースノートを表示"
|
||||||
|
launcherUpdatesHeaderText = "ランチャーアップデート"
|
||||||
|
launcherUpdatesHeaderDesc = "ランチャーのアップデートを確認します<br>アップデートがある場合をここからインストールが可能です"
|
||||||
|
checkForUpdates = "アップデートを確認"
|
||||||
|
whatsNew = "新機能"
|
||||||
|
updateReleaseNotes = "アップデートのリリースノート"
|
||||||
|
|
||||||
|
[ejs.waiting]
|
||||||
|
waitingText = "Microsoft の応答を待っています..."
|
||||||
|
|
||||||
|
[ejs.welcome]
|
||||||
|
continueButton = "次へ"
|
||||||
|
|
||||||
|
|
||||||
|
[js.login]
|
||||||
|
login = "ログイン"
|
||||||
|
loggingIn = "ログイン中"
|
||||||
|
success = "成功"
|
||||||
|
tryAgain = "再試行"
|
||||||
|
|
||||||
|
[js.login.error]
|
||||||
|
invalidValue = "* 無効な値"
|
||||||
|
requiredValue = "* 必須項目"
|
||||||
|
|
||||||
|
[js.login.error.unknown]
|
||||||
|
title = "ログイン中に不明なエラーが発生"
|
||||||
|
desc = "不明なエラーが発生しました。詳細はコンソールをご覧ください。"
|
||||||
|
|
||||||
|
[js.landing.launch]
|
||||||
|
pleaseWait = "お待ちください..."
|
||||||
|
failureTitle = "起動中のエラー"
|
||||||
|
failureText = "詳細はコンソール(CTRL + Shift + i)をご覧ください。"
|
||||||
|
okay = "OK"
|
||||||
|
|
||||||
|
[js.landing.selectedAccount]
|
||||||
|
noAccountSelected = "アカウントが選択されていません"
|
||||||
|
|
||||||
|
[js.landing.selectedServer]
|
||||||
|
noSelection = "サーバーが選択されていません"
|
||||||
|
loading = "読み込み中..."
|
||||||
|
|
||||||
|
[js.landing.serverStatus]
|
||||||
|
server = "サーバー"
|
||||||
|
offline = "オフライン"
|
||||||
|
players = "プレイヤー"
|
||||||
|
|
||||||
|
[js.landing.systemScan]
|
||||||
|
checking = "システム情報を確認中..."
|
||||||
|
noCompatibleJava = "互換性のある<br>Javaインストールが見つかりません"
|
||||||
|
installJavaMessage = "Minecraftを起動するには、Java {major} の64ビットインストールが必要です。Javaをインストールしますか?"
|
||||||
|
installJava = "Javaをインストール"
|
||||||
|
installJavaManually = "手動でインストール"
|
||||||
|
javaDownloadPrepare = "Javaのダウンロードを準備中.."
|
||||||
|
javaDownloadFailureTitle = "Javaのダウンロード中にエラーが発生しました"
|
||||||
|
javaDownloadFailureText = "詳細はコンソール(CTRL + Shift + i)をご覧ください。"
|
||||||
|
javaRequired = "起動にはJava {major}が必要です"
|
||||||
|
javaRequiredMessage = '起動には有効なx64バージョンのJava {major} インストールが必要です。<br><br>手動でのインストール方法については、<a href="https://github.com/dscalzi/HeliosLauncher/wiki/Java-Management#manually-installing-a-valid-version-of-java">Java Management Guide</a>をご覧ください。'
|
||||||
|
javaRequiredDismiss = "OK"
|
||||||
|
javaRequiredCancel = "戻る"
|
||||||
|
|
||||||
|
[js.landing.downloadJava]
|
||||||
|
findJdkFailure = "OpenJDKのディストリビューションが見つかりませんでした。"
|
||||||
|
javaDownloadCorruptedError = "ダウンロードしたJDKのハッシュが不正です。ファイルが壊れている可能性があります。"
|
||||||
|
extractingJava = "Javaを展開中"
|
||||||
|
javaInstalled = "Javaがインストールされました!"
|
||||||
|
|
||||||
|
[js.landing.dlAsync]
|
||||||
|
loadingServerInfo = "サーバー情報を読み込み中.."
|
||||||
|
fatalError = "致命的なエラー"
|
||||||
|
unableToLoadDistributionIndex = "ディストリビューションインデックスを読み込めませんでした。詳細はコンソール(CTRL + Shift + i)をご覧ください。"
|
||||||
|
pleaseWait = "お待ちください.."
|
||||||
|
errorDuringLaunchTitle = "起動中のエラー"
|
||||||
|
seeConsoleForDetails = "詳細はコンソール(CTRL + Shift + i)をご覧ください。"
|
||||||
|
validatingFileIntegrity = "ファイル整合性を検証中.."
|
||||||
|
errorDuringFileVerificationTitle = "ファイル検証中のエラー"
|
||||||
|
downloadingFiles = "ファイルをダウンロード中.."
|
||||||
|
errorDuringFileDownloadTitle = "ファイルダウンロード中のエラー"
|
||||||
|
preparingToLaunch = "起動の準備中.."
|
||||||
|
launchingGame = "ゲームを起動中.."
|
||||||
|
launchWrapperNotDownloaded = "重要なファイルであるLaunchWrapperのダウンロードに失敗しました。そのため、ゲームを起動できません。<br><br>この問題を解決するには、一時的にウイルス対策ソフトを無効にしてゲームを再起動してみてください。<br><br>時間がある場合は、<a href=\"https://github.com/dscalzi/HeliosLauncher/issues\">問題を報告</a>して、使用しているウイルス対策ソフトを教えていただければ幸いです。ウィルス対策ソフトの会社に連絡を取って問題を解決できるよう努力します。"
|
||||||
|
doneEnjoyServer = "完了。よいマイクラ生活を!"
|
||||||
|
checkConsoleForDetails = "詳細はコンソール(CTRL + Shift + i)をご確認ください。"
|
||||||
|
|
||||||
|
[js.landing.news]
|
||||||
|
checking = "ニュースをチェック中"
|
||||||
|
|
||||||
|
[js.settings.fileSelectors]
|
||||||
|
executables = "実行ファイル"
|
||||||
|
allFiles = "すべてのファイル"
|
||||||
|
|
||||||
|
[js.settings.mstfLogin]
|
||||||
|
errorTitle = "エラー発生"
|
||||||
|
errorMessage = "Microsoftの認証に失敗しました。もう一度試してみてください。"
|
||||||
|
|
||||||
|
[js.settings.mstfLogout]
|
||||||
|
errorTitle = "エラー発生"
|
||||||
|
errorMessage = "Microsoftのログアウトに失敗しました。もう一度試してみてください。"
|
||||||
|
|
||||||
|
[js.settings.authAccountSelect]
|
||||||
|
selectButton = "アカウントを選択"
|
||||||
|
selectedButton = "選択中のアカウント ✔"
|
||||||
|
|
||||||
|
[js.settings.authAccountLogout]
|
||||||
|
lastAccountWarningTitle = "注意<br>これはログインしている最後のアカウントです"
|
||||||
|
lastAccountWarningMessage = "ランチャーを使うためには、最低1個のアカウントにログインしている必要があります。ログアウトしたら、もう一度ログインしないといけなくなります。<br><br>本当にログアウトしますか?"
|
||||||
|
confirmButton = "はい"
|
||||||
|
cancelButton = "キャンセル"
|
||||||
|
|
||||||
|
[js.settings.authAccountPopulate]
|
||||||
|
username = "ユーザー名"
|
||||||
|
selectAccount = "アカウントを選択"
|
||||||
|
selectedAccount = "選択したアカウント ✓"
|
||||||
|
logout = "ログアウト"
|
||||||
|
|
||||||
|
[js.settings.dropinMods]
|
||||||
|
removeButton = "削除"
|
||||||
|
deleteFailedTitle = "ドロップ・イン Mod {fullName} の削除に失敗しました"
|
||||||
|
deleteFailedMessage = "ファイルが使用中でないことを確認して、再試行してみてください。"
|
||||||
|
failedToggleTitle = "1つまたは複数のドロップ・インModの切り替えに失敗しました"
|
||||||
|
okButton = "OK"
|
||||||
|
|
||||||
|
[js.settings.serverListing]
|
||||||
|
mainServer = "メインサーバー"
|
||||||
|
|
||||||
|
[js.settings.java]
|
||||||
|
selectedJava = "選択済み: Java {version} ({vendor})"
|
||||||
|
invalidSelection = "無効な選択"
|
||||||
|
requiresJava = "64ビット版Java {major} が必要です。"
|
||||||
|
availableOptions = "Java {major} (HotSpot VM) の利用可能なオプション"
|
||||||
|
|
||||||
|
[js.settings.about]
|
||||||
|
preReleaseTitle = "プレリリース"
|
||||||
|
stableReleaseTitle = "安定版リリース"
|
||||||
|
releaseNotesFailed = "リリースノートの読み込みに失敗しました。"
|
||||||
|
|
||||||
|
[js.settings.updates]
|
||||||
|
newReleaseTitle = "新しいバージョンが利用可能です"
|
||||||
|
newPreReleaseTitle = "新しいプレリリースが利用可能です"
|
||||||
|
downloadingButton = "ダウンロード中.."
|
||||||
|
downloadButton = 'GitHubからダウンロード<span style="font-size: 10px;color: gray;text-shadow: none !important;">ランチャーを閉じてdmgを実行してアップデートします。</span>'
|
||||||
|
latestVersionTitle = "最新バージョンをご利用中です"
|
||||||
|
checkForUpdatesButton = "アップデートを確認"
|
||||||
|
checkingForUpdatesButton = "アップデートを確認中..."
|
||||||
|
|
||||||
|
[js.uibinder.startup]
|
||||||
|
fatalErrorTitle = "致命的なエラー: ディストリビューションインデックスの読み込みに失敗"
|
||||||
|
fatalErrorMessage = "サーバーへの接続に失敗したためディストリビューションインデックスをダウンロードできませんでした。ローカルのキャッシュもありません。<br><br>ディストリビューションインデックスは、最新のサーバー情報を提供する重要なファイルです。このファイルなしではランチャーを起動できません。インターネットに接続されていることを確認して、アプリケーションを再起動してください。"
|
||||||
|
closeButton = "閉じる"
|
||||||
|
|
||||||
|
[js.uibinder.validateAccount]
|
||||||
|
failedMessageTitle = "ログインの更新に失敗"
|
||||||
|
failedMessage = "<strong>{account}</strong> のログインの更新に失敗しました。別のアカウントを選択するか、もう一度ログインしてください。"
|
||||||
|
failedMessageSelectAnotherAccount = "<strong>{account}</strong> のログインの更新に失敗しました。もう一度ログインしてください。"
|
||||||
|
loginButton = "ログイン"
|
||||||
|
selectAnotherAccountButton = "別のアカウントを選択"
|
||||||
|
|
||||||
|
[js.uicore.autoUpdate]
|
||||||
|
checkingForUpdateButton = "アップデートをチェック中..."
|
||||||
|
installNowButton = "今すぐインストール"
|
||||||
|
checkForUpdatesButton = "アップデートを確認"
|
@ -360,10 +360,12 @@ The resolved/provided paths are appended to a base path depending on the module'
|
|||||||
| Type | Path |
|
| Type | Path |
|
||||||
| ---- | ---- |
|
| ---- | ---- |
|
||||||
| `ForgeHosted` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
| `ForgeHosted` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
||||||
|
| `Fabric` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
||||||
| `LiteLoader` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
| `LiteLoader` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
||||||
| `Library` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
| `Library` | ({`commonDirectory`}/libraries/{`path` OR resolved}) |
|
||||||
| `ForgeMod` | ({`commonDirectory`}/modstore/{`path` OR resolved}) |
|
| `ForgeMod` | ({`commonDirectory`}/modstore/{`path` OR resolved}) |
|
||||||
| `LiteMod` | ({`commonDirectory`}/modstore/{`path` OR resolved}) |
|
| `LiteMod` | ({`commonDirectory`}/modstore/{`path` OR resolved}) |
|
||||||
|
| `FabricMod` | ({`commonDirectory`}/mods/fabric/{`path` OR resolved}) |
|
||||||
| `File` | ({`instanceDirectory`}/{`Server.id`}/{`path` OR resolved}) |
|
| `File` | ({`instanceDirectory`}/{`Server.id`}/{`path` OR resolved}) |
|
||||||
|
|
||||||
The `commonDirectory` and `instanceDirectory` values are stored in the launcher's config.json.
|
The `commonDirectory` and `instanceDirectory` values are stored in the launcher's config.json.
|
||||||
@ -408,7 +410,7 @@ If the module is enabled by default. Has no effect unless `Required.value` is fa
|
|||||||
|
|
||||||
### ForgeHosted
|
### ForgeHosted
|
||||||
|
|
||||||
The module type `ForgeHosted` represents forge itself. Currently, the launcher only supports forge servers, as vanilla servers can be connected to via the mojang launcher. The `Hosted` part is key, this means that the forge module must declare its required libraries as submodules.
|
The module type `ForgeHosted` represents forge itself. Currently, the launcher only supports modded servers, as vanilla servers can be connected to via the mojang launcher. The `Hosted` part is key, this means that the forge module must declare its required libraries as submodules.
|
||||||
|
|
||||||
Ex.
|
Ex.
|
||||||
|
|
||||||
@ -443,6 +445,40 @@ There were plans to add a `Forge` type, in which the required libraries would be
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Fabric
|
||||||
|
|
||||||
|
The module type `Fabric` represents the fabric mod loader. Currently, the launcher only supports modded servers, as vanilla servers can be connected to via the mojang launcher.
|
||||||
|
|
||||||
|
Ex.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "net.fabricmc:fabric-loader:0.15.0",
|
||||||
|
"name": "Fabric (fabric-loader)",
|
||||||
|
"type": "Fabric",
|
||||||
|
"artifact": {
|
||||||
|
"size": 1196222,
|
||||||
|
"MD5": "a43d5a142246801343b6cedef1c102c4",
|
||||||
|
"url": "http://localhost:8080/repo/lib/net/fabricmc/fabric-loader/0.15.0/fabric-loader-0.15.0.jar"
|
||||||
|
},
|
||||||
|
"subModules": [
|
||||||
|
{
|
||||||
|
"id": "1.20.1-fabric-0.15.0",
|
||||||
|
"name": "Fabric (version.json)",
|
||||||
|
"type": "VersionManifest",
|
||||||
|
"artifact": {
|
||||||
|
"size": 2847,
|
||||||
|
"MD5": "69a2bd43452325ba1bc882fa0904e054",
|
||||||
|
"url": "http://localhost:8080/repo/versions/1.20.1-fabric-0.15.0/1.20.1-fabric-0.15.0.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Fabric works similarly to Forge 1.13+.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### LiteLoader
|
### LiteLoader
|
||||||
|
|
||||||
The module type `LiteLoader` represents liteloader. It is handled as a library and added to the classpath at runtime. Special launch conditions are executed when liteloader is present and enabled. This module can be optional and toggled similarly to `ForgeMod` and `Litemod` modules.
|
The module type `LiteLoader` represents liteloader. It is handled as a library and added to the classpath at runtime. Special launch conditions are executed when liteloader is present and enabled. This module can be optional and toggled similarly to `ForgeMod` and `Litemod` modules.
|
||||||
|
66
package-lock.json
generated
66
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "helioslauncher",
|
"name": "helioslauncher",
|
||||||
"version": "2.0.6",
|
"version": "2.1.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "helioslauncher",
|
"name": "helioslauncher",
|
||||||
"version": "2.0.6",
|
"version": "2.1.0",
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/remote": "^2.1.0",
|
"@electron/remote": "^2.1.0",
|
||||||
@ -18,17 +18,17 @@
|
|||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.1.1",
|
||||||
"github-syntax-dark": "^0.5.0",
|
"github-syntax-dark": "^0.5.0",
|
||||||
"got": "^11.8.5",
|
"got": "^11.8.5",
|
||||||
"helios-core": "~2.0.6",
|
"helios-core": "~2.1.0",
|
||||||
"helios-distribution-types": "^1.2.0",
|
"helios-distribution-types": "^1.3.0",
|
||||||
"jquery": "^3.7.1",
|
"jquery": "^3.7.1",
|
||||||
"lodash.merge": "^4.6.2",
|
"lodash.merge": "^4.6.2",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.5.4",
|
||||||
"toml": "^3.0.0"
|
"toml": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^27.1.2",
|
"electron": "^27.1.3",
|
||||||
"electron-builder": "^24.9.1",
|
"electron-builder": "^24.9.1",
|
||||||
"eslint": "^8.54.0"
|
"eslint": "^8.55.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "18.x.x"
|
"node": "18.x.x"
|
||||||
@ -338,9 +338,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/eslintrc": {
|
"node_modules/@eslint/eslintrc": {
|
||||||
"version": "2.1.3",
|
"version": "2.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
|
||||||
"integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
|
"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^6.12.4",
|
"ajv": "^6.12.4",
|
||||||
@ -383,9 +383,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint/js": {
|
"node_modules/@eslint/js": {
|
||||||
"version": "8.54.0",
|
"version": "8.55.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
|
||||||
"integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
|
"integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||||
@ -613,9 +613,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "18.18.13",
|
"version": "18.19.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.2.tgz",
|
||||||
"integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==",
|
"integrity": "sha512-6wzfBdbWpe8QykUkXBjtmO3zITA0A3FIjoy+in0Y2K4KrCiRhNYJIdwAPDffZ3G6GnaKaSLSEa9ZuORLfEoiwg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~5.26.4"
|
"undici-types": "~5.26.4"
|
||||||
}
|
}
|
||||||
@ -1546,9 +1546,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron": {
|
"node_modules/electron": {
|
||||||
"version": "27.1.2",
|
"version": "27.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/electron/-/electron-27.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/electron/-/electron-27.1.3.tgz",
|
||||||
"integrity": "sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA==",
|
"integrity": "sha512-7eD8VMhhlL5J531OOawn00eMthUkX1e3qN5Nqd7eMK8bg5HxQBrn8bdPlvUEnCano9KhrVwaDnGeuzWoDOGpjQ==",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/get": "^2.0.0",
|
"@electron/get": "^2.0.0",
|
||||||
@ -1720,15 +1720,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint": {
|
"node_modules/eslint": {
|
||||||
"version": "8.54.0",
|
"version": "8.55.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
|
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
|
||||||
"integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
|
"integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.2.0",
|
"@eslint-community/eslint-utils": "^4.2.0",
|
||||||
"@eslint-community/regexpp": "^4.6.1",
|
"@eslint-community/regexpp": "^4.6.1",
|
||||||
"@eslint/eslintrc": "^2.1.3",
|
"@eslint/eslintrc": "^2.1.4",
|
||||||
"@eslint/js": "8.54.0",
|
"@eslint/js": "8.55.0",
|
||||||
"@humanwhocodes/config-array": "^0.11.13",
|
"@humanwhocodes/config-array": "^0.11.13",
|
||||||
"@humanwhocodes/module-importer": "^1.0.1",
|
"@humanwhocodes/module-importer": "^1.0.1",
|
||||||
"@nodelib/fs.walk": "^1.2.8",
|
"@nodelib/fs.walk": "^1.2.8",
|
||||||
@ -2032,9 +2032,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fs-extra": {
|
"node_modules/fs-extra": {
|
||||||
"version": "11.1.1",
|
"version": "11.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
|
||||||
"integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
|
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"graceful-fs": "^4.2.0",
|
"graceful-fs": "^4.2.0",
|
||||||
"jsonfile": "^6.0.1",
|
"jsonfile": "^6.0.1",
|
||||||
@ -2331,12 +2331,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/helios-core": {
|
"node_modules/helios-core": {
|
||||||
"version": "2.0.6",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/helios-core/-/helios-core-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/helios-core/-/helios-core-2.1.0.tgz",
|
||||||
"integrity": "sha512-QxUP6BZ0HDCmJjKNi2262vM2Sh222Gl8Ro4/qAxBWkmCxkpyD2Car9hSk5VZV4vcECTr7xg3SS55FuT4HdMF3g==",
|
"integrity": "sha512-3RvGMJ0RDzgdZF3e0o2VtBz/NCeucDVIopz9p3GA9tjy2cl7ll8HVHSXiLG5YE1JiINU5Akacv5L6MT1g6xZuA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fastq": "^1.15.0",
|
"fastq": "^1.15.0",
|
||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.2.0",
|
||||||
"got": "^11.8.6",
|
"got": "^11.8.6",
|
||||||
"luxon": "^3.4.4",
|
"luxon": "^3.4.4",
|
||||||
"node-stream-zip": "^1.15.0",
|
"node-stream-zip": "^1.15.0",
|
||||||
@ -2348,9 +2348,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/helios-distribution-types": {
|
"node_modules/helios-distribution-types": {
|
||||||
"version": "1.2.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/helios-distribution-types/-/helios-distribution-types-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/helios-distribution-types/-/helios-distribution-types-1.3.0.tgz",
|
||||||
"integrity": "sha512-C8mRJGK0zAc7rRnA06Sj0LYwVqhY445UYNTmXU876AmfBirRR2F+A3LsD3osdgTxRMzrgkxBXvYZ0QbYW6j+6Q=="
|
"integrity": "sha512-MP66JRHvmuE9yDoZoKeFDh3stsHger0w/cRcJAlV7UYw5ztR3m/uLbWdbfFV68B1Yc0+hDIiuFsuJT/Ve9xuiw=="
|
||||||
},
|
},
|
||||||
"node_modules/hosted-git-info": {
|
"node_modules/hosted-git-info": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
|
10
package.json
10
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "helioslauncher",
|
"name": "helioslauncher",
|
||||||
"version": "2.0.6",
|
"version": "2.1.0",
|
||||||
"productName": "Helios Launcher",
|
"productName": "Helios Launcher",
|
||||||
"description": "Modded Minecraft Launcher",
|
"description": "Modded Minecraft Launcher",
|
||||||
"author": "Daniel Scalzi (https://github.com/dscalzi/)",
|
"author": "Daniel Scalzi (https://github.com/dscalzi/)",
|
||||||
@ -32,17 +32,17 @@
|
|||||||
"fs-extra": "^11.1.1",
|
"fs-extra": "^11.1.1",
|
||||||
"github-syntax-dark": "^0.5.0",
|
"github-syntax-dark": "^0.5.0",
|
||||||
"got": "^11.8.5",
|
"got": "^11.8.5",
|
||||||
"helios-core": "~2.0.6",
|
"helios-core": "~2.1.0",
|
||||||
"helios-distribution-types": "^1.2.0",
|
"helios-distribution-types": "^1.3.0",
|
||||||
"jquery": "^3.7.1",
|
"jquery": "^3.7.1",
|
||||||
"lodash.merge": "^4.6.2",
|
"lodash.merge": "^4.6.2",
|
||||||
"semver": "^7.5.4",
|
"semver": "^7.5.4",
|
||||||
"toml": "^3.0.0"
|
"toml": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"electron": "^27.1.2",
|
"electron": "^27.1.3",
|
||||||
"electron-builder": "^24.9.1",
|
"electron-builder": "^24.9.1",
|
||||||
"eslint": "^8.54.0"
|
"eslint": "^8.55.0"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
Loading…
Reference in New Issue
Block a user