server state and stdio streaming

This commit is contained in:
2023-10-03 02:57:35 -06:00
parent dc4c8efeb2
commit 4a4563ba85
25 changed files with 502 additions and 80 deletions

11
util/EULA.ts Normal file
View File

@@ -0,0 +1,11 @@
const eulaRegex = /(eula=false)/;
export const checkEULA = (instance = 'server') =>
!eulaRegex.test(Deno.readTextFileSync(`./${instance}/eula.txt`));
export const acceptEULA = (instance = 'server') => {
const eula = Deno.readTextFileSync(`./${instance}/eula.txt`);
const mod = eula.replace(eulaRegex, 'eula=true');
console.log(mod)
Deno.writeTextFileSync(`./${instance}/eula.txt`, mod);
}

27
util/initFabric.ts Normal file
View File

@@ -0,0 +1,27 @@
export async function initFabric() {
const fabricHost = "https://meta.fabricmc.net/v2";
const gameVersionSlug = "/versions/game";
const loaderVersionSlug = "/versions/loader";
const installerVersionSlug = "/versions/installer";
const versionSlugs = [
gameVersionSlug,
loaderVersionSlug,
installerVersionSlug,
];
for (const slug of versionSlugs) {
const uri = fabricHost + slug;
const req = await fetch(uri);
const text = await req.text();
const path = `./fabric/${slug}.json`;
await Deno.mkdir(path.split("/").slice(0, -1).join("/"), {
recursive: true,
});
await Deno.writeTextFile(path, text, { create: true });
}
}

17
util/startServer.ts Normal file
View File

@@ -0,0 +1,17 @@
import { startTail } from "./startTail.ts";
export async function startMCServer(instance = "server") {
const start = new Deno.Command("java", {
args: [
"-Xmx2G",
"-jar",
"./server.jar",
"nogui",
],
cwd: "./" + instance,
});
start.output();
return await startTail(instance);
}

25
util/startTail.ts Normal file
View File

@@ -0,0 +1,25 @@
import { Sockpuppet } from "puppet/client";
import { Tail } from "npm:tail";
export function startTail(instance = "server") {
return new Promise<[Tail, string]>((resolve) => {
const puppet = new Sockpuppet("ws://sockpuppet.cyborggrizzly.com", () => {
const channelId = crypto.randomUUID();
puppet.createChannel(channelId);
puppet.joinChannel(channelId, (line) => {
console.log(line);
});
setTimeout(() => {
const path = `./${instance}/logs/latest.log`;
const tail = new Tail(path, { follow: true });
tail.on("line", (line: string) => {
puppet.getChannel(channelId)?.send(line);
console.log(line);
});
resolve([tail, channelId]);
}, 1000);
});
});
}