Monorepo project #508
@ -15,7 +15,6 @@ export type bedrockOptions = manegerOptions & {
|
|||||||
* Servidor alternativo ao invés do servidor ofical da Mojang
|
* Servidor alternativo ao invés do servidor ofical da Mojang
|
||||||
*/
|
*/
|
||||||
altServer?: "pocketmine"|"powernukkit"|"cloudbust",
|
altServer?: "pocketmine"|"powernukkit"|"cloudbust",
|
||||||
allowBeta?: boolean
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const pocketmineGithub = await Github.GithubManeger("pmmp", "PocketMine-MP");
|
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;
|
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);
|
const serverPath = await serverManeger(options);
|
||||||
if (options.altServer === "pocketmine") {
|
if (options.altServer === "pocketmine") {
|
||||||
const version = (options.version ?? "latest").trim();
|
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 & {
|
export type javaOptions = manegerOptions & {
|
||||||
/**
|
/**
|
||||||
* Servidor alternativo ao invés do servidor ofical da Mojang
|
* Servidor alternativo ao invés do servidor ofical da Mojang
|
||||||
*/
|
*/
|
||||||
altServer?: "spigot"|"paper"|"purpur",
|
altServer?: "spigot"|"paper"|"purpur"
|
||||||
allowBeta?: boolean
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
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