Forge and its submodules are now included in the generated distribution.
This commit is contained in:
28
src/index.ts
28
src/index.ts
@@ -6,6 +6,7 @@ import { URL } from 'url'
|
|||||||
import { inspect } from 'util'
|
import { inspect } from 'util'
|
||||||
import yargs from 'yargs'
|
import yargs from 'yargs'
|
||||||
import { DistributionStructure } from './model/struct/model/distribution.struct'
|
import { DistributionStructure } from './model/struct/model/distribution.struct'
|
||||||
|
import { ServerStructure } from './model/struct/model/server.struct'
|
||||||
import { ResolverRegistry } from './resolver/ResolverRegistry'
|
import { ResolverRegistry } from './resolver/ResolverRegistry'
|
||||||
|
|
||||||
dotenv.config()
|
dotenv.config()
|
||||||
@@ -124,14 +125,14 @@ const generateServerCommand: yargs.CommandModule = {
|
|||||||
type: 'string'
|
type: 'string'
|
||||||
})
|
})
|
||||||
.option('forge', {
|
.option('forge', {
|
||||||
describe: 'Include Forge.',
|
describe: 'Forge version.',
|
||||||
type: 'boolean',
|
type: 'string',
|
||||||
default: true
|
default: null
|
||||||
})
|
})
|
||||||
.option('liteloader', {
|
.option('liteloader', {
|
||||||
describe: 'Include liteloader.',
|
describe: 'LiteLoader version.',
|
||||||
type: 'boolean',
|
type: 'string',
|
||||||
default: false
|
default: null
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
handler: (argv) => {
|
handler: (argv) => {
|
||||||
@@ -139,8 +140,19 @@ const generateServerCommand: yargs.CommandModule = {
|
|||||||
|
|
||||||
console.debug(`Root set to ${argv.root}`)
|
console.debug(`Root set to ${argv.root}`)
|
||||||
console.debug(`Generating server ${argv.id} for Minecraft ${argv.version}.`,
|
console.debug(`Generating server ${argv.id} for Minecraft ${argv.version}.`,
|
||||||
`\n\t├ Include forge: ${argv.forge}`,
|
`\n\t├ Forge version: ${argv.forge}`,
|
||||||
`\n\t└ Include liteloader: ${argv.liteloader}`)
|
`\n\t└ LiteLoader version: ${argv.liteloader}`)
|
||||||
|
|
||||||
|
const serverStruct = new ServerStructure(argv.root as string, getBaseURL())
|
||||||
|
serverStruct.createServer(
|
||||||
|
argv.id as string,
|
||||||
|
argv.version as string,
|
||||||
|
{
|
||||||
|
forgeVersion: argv.forge as string,
|
||||||
|
liteloaderVersion: argv.liteloader as string
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
src/model/nebula/servermeta.ts
Normal file
5
src/model/nebula/servermeta.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export interface ServerMeta {
|
||||||
|
|
||||||
|
forgeVersion: string
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
import { lstat, readdir } from 'fs-extra'
|
import { lstat, mkdirs, pathExists, readdir, readFile, writeFile } from 'fs-extra'
|
||||||
import { join, resolve as resolvePath } from 'path'
|
import { dirname, join, resolve as resolvePath } from 'path'
|
||||||
import { resolve as resolveUrl } from 'url'
|
import { resolve as resolveUrl } from 'url'
|
||||||
|
import { ResolverRegistry } from '../../../resolver/ResolverRegistry'
|
||||||
|
import { ServerMeta } from '../../nebula/servermeta'
|
||||||
import { Server } from '../../spec/server'
|
import { Server } from '../../spec/server'
|
||||||
import { BaseModelStructure } from './basemodel.struct'
|
import { BaseModelStructure } from './basemodel.struct'
|
||||||
import { MiscFileStructure } from './module/file.struct'
|
import { MiscFileStructure } from './module/file.struct'
|
||||||
@@ -25,6 +27,44 @@ export class ServerStructure extends BaseModelStructure<Server> {
|
|||||||
return this.resolvedModels
|
return this.resolvedModels
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async createServer(
|
||||||
|
id: string,
|
||||||
|
minecraftVersion: string,
|
||||||
|
options: {
|
||||||
|
forgeVersion?: string
|
||||||
|
liteloaderVersion?: string
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
const effectiveId = `${id}-${minecraftVersion}`
|
||||||
|
const absoluteServerRoot = resolvePath(this.containerDirectory, effectiveId)
|
||||||
|
const relativeServerRoot = join(this.relativeRoot, effectiveId)
|
||||||
|
|
||||||
|
if (await pathExists(absoluteServerRoot)) {
|
||||||
|
console.error('Server already exists! Aborting.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
await mkdirs(absoluteServerRoot)
|
||||||
|
|
||||||
|
if (options.forgeVersion != null) {
|
||||||
|
const fms = new ForgeModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
|
await fms.init()
|
||||||
|
const serverMeta: ServerMeta = {
|
||||||
|
forgeVersion: options.forgeVersion
|
||||||
|
}
|
||||||
|
await writeFile(resolvePath(absoluteServerRoot, 'servermeta.json'), JSON.stringify(serverMeta, null, 2))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.liteloaderVersion != null) {
|
||||||
|
const lms = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
|
await lms.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
const mfs = new MiscFileStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
|
await mfs.init()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private async _doSeverRetrieval(): Promise<Server[]> {
|
private async _doSeverRetrieval(): Promise<Server[]> {
|
||||||
|
|
||||||
const accumulator: Server[] = []
|
const accumulator: Server[] = []
|
||||||
@@ -57,6 +97,25 @@ export class ServerStructure extends BaseModelStructure<Server> {
|
|||||||
iconUrl = '<FILL IN MANUALLY>'
|
iconUrl = '<FILL IN MANUALLY>'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read server meta
|
||||||
|
const serverMeta: ServerMeta = JSON.parse(await readFile(resolvePath(absoluteServerRoot, 'servermeta.json'), 'utf-8'))
|
||||||
|
|
||||||
|
const forgeResolver = ResolverRegistry.getForgeResolver(
|
||||||
|
match[2],
|
||||||
|
serverMeta.forgeVersion,
|
||||||
|
dirname(this.absoluteRoot),
|
||||||
|
'',
|
||||||
|
this.baseUrl
|
||||||
|
)
|
||||||
|
|
||||||
|
if (forgeResolver == null) {
|
||||||
|
console.error(`No forge resolver found for Minecraft ${match[2]}, aborting.`)
|
||||||
|
throw new Error(`No forge resolver found for Minecraft ${match[2]}!`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resolve forge
|
||||||
|
const forgeItselfModule = await forgeResolver.getModule()
|
||||||
|
|
||||||
const forgeModStruct = new ForgeModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
const forgeModStruct = new ForgeModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
|
||||||
const forgeModModules = await forgeModStruct.getSpecModel()
|
const forgeModModules = await forgeModStruct.getSpecModel()
|
||||||
|
|
||||||
@@ -67,6 +126,7 @@ export class ServerStructure extends BaseModelStructure<Server> {
|
|||||||
const fileModules = await fileStruct.getSpecModel()
|
const fileModules = await fileStruct.getSpecModel()
|
||||||
|
|
||||||
const modules = [
|
const modules = [
|
||||||
|
forgeItselfModule,
|
||||||
...forgeModModules,
|
...forgeModModules,
|
||||||
...liteModModules,
|
...liteModModules,
|
||||||
...fileModules
|
...fileModules
|
||||||
|
|||||||
Reference in New Issue
Block a user