Monorepo project #508
| @@ -15,7 +15,6 @@ export type bedrockOptions = manegerOptions & { | ||||
|    * Servidor alternativo ao invés do servidor ofical da Mojang | ||||
|    */ | ||||
|   altServer?: "pocketmine"|"powernukkit"|"cloudbust", | ||||
|   allowBeta?: boolean | ||||
| }; | ||||
|  | ||||
| const pocketmineGithub = await Github.GithubManeger("pmmp", "PocketMine-MP"); | ||||
| @@ -61,7 +60,7 @@ export async function listVersions(options?: Omit<bedrockOptions, keyof manegerO | ||||
|   return (await coreHttp.jsonRequest<{version: string, date: Date, release?: "stable"|"preview", url: {[platform in NodeJS.Platform]?: {[arch in NodeJS.Architecture]?: string}}}[]>("https://sirherobrine23.github.io/BedrockFetch/all.json")).body; | ||||
| } | ||||
|  | ||||
| export async function installServer(options: bedrockOptions & {version?: string}): Promise<{id: string, version: string, mcpeVersion?: string, releaseDate: Date}> { | ||||
| export async function installServer(options: bedrockOptions & {version?: string, allowBeta?: boolean}): Promise<{id: string, version: string, mcpeVersion?: string, releaseDate: Date}> { | ||||
|   const serverPath = await serverManeger(options); | ||||
|   if (options.altServer === "pocketmine") { | ||||
|     const version = (options.version ?? "latest").trim(); | ||||
|   | ||||
| @@ -1,9 +1,88 @@ | ||||
| import { manegerOptions } from "../serverManeger.js"; | ||||
| import { manegerOptions, serverManeger } from "../serverManeger.js"; | ||||
| import coreHttp, { large } from "@sirherobrine23/http"; | ||||
| import utils from "node:util"; | ||||
| import path from "node:path"; | ||||
|  | ||||
| export type javaOptions = manegerOptions & { | ||||
|   /** | ||||
|    * Servidor alternativo ao invés do servidor ofical da Mojang | ||||
|    */ | ||||
|   altServer?: "spigot"|"paper"|"purpur", | ||||
|   allowBeta?: boolean | ||||
|   altServer?: "spigot"|"paper"|"purpur" | ||||
| }; | ||||
|  | ||||
| export async function listVersions(options: Omit<javaOptions, keyof manegerOptions>) { | ||||
|   if (options.altServer === "purpur") { | ||||
|     return Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.purpurmc.org/v2/purpur")).body.versions.map(async version => ({ | ||||
|       version, | ||||
|       downloadUrl: utils.format("https://api.purpurmc.org/v2/purpur/%s/latest/download", version), | ||||
|       date: new Date((await coreHttp.jsonRequest<{timestamp: number}>(utils.format("https://api.purpurmc.org/v2/purpur/%s/latest", version))).body.timestamp) | ||||
|     }))); | ||||
|   } else if (options.altServer === "paper") { | ||||
|     return Promise.all((await coreHttp.jsonRequest<{versions: string[]}>("https://api.papermc.io/v2/projects/paper")).body.versions.map(async version => { | ||||
|       const build = (await coreHttp.jsonRequest<{builds: number[]}>(utils.format("https://api.papermc.io/v2/projects/paper/versions/%s", version))).body.builds.at(-1); | ||||
|       const data = (await coreHttp.jsonRequest<{time: string, downloads: {[k: string]: {name: string, sha256: string}}}>(utils.format("https://api.papermc.io/v2/projects/paper/versions/%s/builds/%s", version, build))).body; | ||||
|  | ||||
|       return { | ||||
|         version, | ||||
|         date: new Date(data.time), | ||||
|         downloadUrl: utils.format("https://api.papermc.io/v2/projects/paper/versions/%s/builds/%s/downloads/%s", version, build, data.downloads["application"].name) | ||||
|       } | ||||
|     })); | ||||
|   } else if (options.altServer === "spigot") { | ||||
|     throw new Error("Não foi implementado!"); | ||||
|   } | ||||
|     return (await Promise.all((await coreHttp.jsonRequest<{versions: {id: string, releaseTime: string, url: string}[]}>("https://launchermeta.mojang.com/mc/game/version_manifest_v2.json")).body.versions.map(async data => ({ | ||||
|     version: data.id, | ||||
|     date: new Date(data.releaseTime), | ||||
|     downloadUrl: (await coreHttp.jsonRequest<{downloads: {[k: string]: {size: number, url: string}}}>(data.url)).body.downloads?.["server"]?.url | ||||
|   })))).filter(a => !!a.downloadUrl); | ||||
| } | ||||
|  | ||||
| export async function installServer(options: javaOptions & {version?: string}) { | ||||
|   const serverPath = await serverManeger(options); | ||||
|   const version = (await listVersions(options)).find(rel => (!options.version || options.version === "latest" || rel.version === options.version)); | ||||
|   if (!version) throw new Error("Não existe a versão informada!"); | ||||
|   await large.saveFile({ | ||||
|     path: path.join(serverPath.serverFolder, "server.jar"), | ||||
|     url: version.downloadUrl | ||||
|   }); | ||||
|   return { | ||||
|     ...version, | ||||
|     id: serverPath.id, | ||||
|   }; | ||||
| } | ||||
|  | ||||
| export async function startServer(options: javaOptions) { | ||||
|   const serverPath = await serverManeger(options); | ||||
|   return serverPath.runCommand({ | ||||
|     command: "java", | ||||
|     args: [ | ||||
|       "-XX:+UseG1GC", | ||||
|       "-XX:+ParallelRefProcEnabled", | ||||
|       "-XX:MaxGCPauseMillis=200", | ||||
|       "-XX:+UnlockExperimentalVMOptions", | ||||
|       "-XX:+DisableExplicitGC", | ||||
|       "-XX:+AlwaysPreTouch", | ||||
|       "-XX:G1NewSizePercent=30", | ||||
|       "-XX:G1MaxNewSizePercent=40", | ||||
|       "-XX:G1HeapRegionSize=8M", | ||||
|       "-XX:G1ReservePercent=20", | ||||
|       "-XX:G1HeapWastePercent=5", | ||||
|       "-XX:G1MixedGCCountTarget=4", | ||||
|       "-XX:InitiatingHeapOccupancyPercent=15", | ||||
|       "-XX:G1MixedGCLiveThresholdPercent=90", | ||||
|       "-XX:G1RSetUpdatingPauseTimePercent=5", | ||||
|       "-XX:SurvivorRatio=32", | ||||
|       "-XX:+PerfDisableSharedMem", | ||||
|       "-XX:MaxTenuringThreshold=1", | ||||
|       "-Dusing.aikars.flags=https://mcflags.emc.gs", | ||||
|       "-Daikars.new.flags=true", | ||||
|       "-jar", "server.jar", | ||||
|     ], | ||||
|     serverActions: { | ||||
|       stop(child) { | ||||
|         child.sendCommand("stop"); | ||||
|       }, | ||||
|     } | ||||
|   }); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user