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