server state and stdio streaming
This commit is contained in:
11
util/EULA.ts
Normal file
11
util/EULA.ts
Normal 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
27
util/initFabric.ts
Normal 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
17
util/startServer.ts
Normal 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
25
util/startTail.ts
Normal 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);
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user