Add more properties to servermeta.json

This file will have to be regenerated for existing servers.
This commit is contained in:
Daniel Scalzi
2020-06-04 20:25:50 -04:00
parent 151ad481ad
commit 97ffb9c44b
2 changed files with 111 additions and 50 deletions

View File

@@ -1,5 +1,63 @@
import { Server } from 'helios-distribution-types'
export interface ServerMetaOptions {
forgeVersion?: string
liteloaderVersion?: string
}
export function getDefaultServerMeta(id: string, version: string, options?: ServerMetaOptions): ServerMeta {
const servMeta: ServerMeta = {
meta: {
version: '1.0.0',
name: `${id} (Minecraft ${version})`,
description: `${id} Running Minecraft ${version}`,
address: 'localhost:25565',
discord: {
shortId: '<FILL IN OR REMOVE DISCORD OBJECT>',
largeImageText: '<FILL IN OR REMOVE DISCORD OBJECT>',
largeImageKey: '<FILL IN OR REMOVE DISCORD OBJECT>'
},
mainServer: false,
autoconnect: false
}
}
if(options?.forgeVersion) {
servMeta.meta.description = `${servMeta.meta.description} (Forge v${options.forgeVersion})`
servMeta.forge = {
version: options.forgeVersion
}
}
if(options?.liteloaderVersion) {
servMeta.meta.description = `${servMeta.meta.description} (Liteloader v${options.liteloaderVersion})`
servMeta.liteloader = {
version: options.liteloaderVersion
}
}
return servMeta
}
export interface ServerMeta {
forgeVersion: string
meta: {
version: Server['version']
name: Server['name']
description: Server['description']
address: Server['address']
discord?: Server['discord']
mainServer: Server['mainServer']
autoconnect: Server['autoconnect']
}
forge?: {
version: string
}
liteloader?: {
version: string
}
}

View File

@@ -1,9 +1,9 @@
import { lstat, mkdirs, pathExists, readdir, readFile, writeFile } from 'fs-extra'
import { Server } from 'helios-distribution-types'
import { Server, Module } from 'helios-distribution-types'
import { dirname, join, resolve as resolvePath } from 'path'
import { resolve as resolveUrl } from 'url'
import { VersionSegmentedRegistry } from '../../../util/VersionSegmentedRegistry'
import { ServerMeta } from '../../nebula/servermeta'
import { ServerMeta, getDefaultServerMeta, ServerMetaOptions } from '../../nebula/servermeta'
import { BaseModelStructure } from './basemodel.struct'
import { MiscFileStructure } from './module/file.struct'
import { LiteModStructure } from './module/litemod.struct'
@@ -50,6 +50,8 @@ export class ServerStructure extends BaseModelStructure<Server> {
await mkdirs(absoluteServerRoot)
const serverMetaOpts: ServerMetaOptions = {}
if (options.forgeVersion != null) {
const fms = VersionSegmentedRegistry.getForgeModStruct(
minecraftVersion,
@@ -59,17 +61,18 @@ export class ServerStructure extends BaseModelStructure<Server> {
this.baseUrl
)
await fms.init()
const serverMeta: ServerMeta = {
forgeVersion: options.forgeVersion
}
await writeFile(resolvePath(absoluteServerRoot, 'servermeta.json'), JSON.stringify(serverMeta, null, 2))
serverMetaOpts.forgeVersion = options.forgeVersion
}
if (options.liteloaderVersion != null) {
const lms = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
await lms.init()
serverMetaOpts.liteloaderVersion = options.liteloaderVersion
}
const serverMeta: ServerMeta = getDefaultServerMeta(id, minecraftVersion.toString(), serverMetaOpts)
await writeFile(resolvePath(absoluteServerRoot, 'servermeta.json'), JSON.stringify(serverMeta, null, 2))
const libS = new LibraryStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
await libS.init()
@@ -94,7 +97,7 @@ export class ServerStructure extends BaseModelStructure<Server> {
continue
}
let iconUrl
let iconUrl: string = null!
// Resolve server icon
const subFiles = await readdir(absoluteServerRoot)
@@ -107,65 +110,65 @@ export class ServerStructure extends BaseModelStructure<Server> {
if (!iconUrl) {
ServerStructure.logger.warn(`No icon file found for server ${file}.`)
iconUrl = '<FILL IN MANUALLY>'
}
// Read server meta
const serverMeta: ServerMeta = JSON.parse(await readFile(resolvePath(absoluteServerRoot, 'servermeta.json'), 'utf-8'))
const minecraftVersion = new MinecraftVersion(match[2])
const forgeResolver = VersionSegmentedRegistry.getForgeResolver(
minecraftVersion,
serverMeta.forgeVersion,
dirname(this.containerDirectory),
'',
this.baseUrl
)
const modules: Module[] = []
// Resolve forge
const forgeItselfModule = await forgeResolver.getModule()
if(serverMeta.forge) {
const forgeResolver = VersionSegmentedRegistry.getForgeResolver(
minecraftVersion,
serverMeta.forge.version,
dirname(this.containerDirectory),
'',
this.baseUrl
)
const forgeModStruct = VersionSegmentedRegistry.getForgeModStruct(
minecraftVersion,
serverMeta.forgeVersion,
absoluteServerRoot,
relativeServerRoot,
this.baseUrl
)
const forgeModModules = await forgeModStruct.getSpecModel()
// Resolve forge
const forgeItselfModule = await forgeResolver.getModule()
modules.push(forgeItselfModule)
const liteModStruct = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
const liteModModules = await liteModStruct.getSpecModel()
const forgeModStruct = VersionSegmentedRegistry.getForgeModStruct(
minecraftVersion,
serverMeta.forge.version,
absoluteServerRoot,
relativeServerRoot,
this.baseUrl
)
const forgeModModules = await forgeModStruct.getSpecModel()
modules.push(...forgeModModules)
}
if(serverMeta.liteloader) {
const liteModStruct = new LiteModStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
const liteModModules = await liteModStruct.getSpecModel()
modules.push(...liteModModules)
}
const libraryStruct = new LibraryStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
const libraryModules = await libraryStruct.getSpecModel()
modules.push(...libraryModules)
const fileStruct = new MiscFileStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
const fileModules = await fileStruct.getSpecModel()
const libraryStruct = new LibraryStructure(absoluteServerRoot, relativeServerRoot, this.baseUrl)
const libraryModules = await libraryStruct.getSpecModel()
const modules = [
forgeItselfModule,
...libraryModules,
...forgeModModules,
...liteModModules,
...fileModules
]
modules.push(...fileModules)
accumulator.push({
id: match[1],
name: '<FILL IN MANUALLY>',
description: '<FILL IN MANUALLY>',
name: serverMeta.meta.name,
description: serverMeta.meta.description,
icon: iconUrl,
version: '1.0.0',
address: '<FILL IN MANUALLY>',
version: serverMeta.meta.version,
address: serverMeta.meta.address,
minecraftVersion: match[2],
discord: {
shortId: '<FILL IN MANUALLY OR REMOVE>',
largeImageText: '<FILL IN MANUALLY OR REMOVE>',
largeImageKey: '<FILL IN MANUALLY OR REMOVE>'
},
mainServer: false,
autoconnect: false,
...(serverMeta.meta.discord ? {discord: serverMeta.meta.discord} : {}),
mainServer: serverMeta.meta.mainServer,
autoconnect: serverMeta.meta.autoconnect,
modules
})