Add more properties to servermeta.json
This file will have to be regenerated for existing servers.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user