quick-e2e: Add Context and StartScriptService to manage server environment and script generation

This commit is contained in:
Oliver
2025-03-16 18:15:21 +01:00
parent 8c3e123719
commit 780d418c2a
4 changed files with 126 additions and 0 deletions

View File

@@ -1,8 +1,10 @@
package de.oliver.quicke2e; package de.oliver.quicke2e;
import de.oliver.quicke2e.config.Configuration; import de.oliver.quicke2e.config.Configuration;
import de.oliver.quicke2e.config.Context;
import de.oliver.quicke2e.eula.EulaService; import de.oliver.quicke2e.eula.EulaService;
import de.oliver.quicke2e.paper.PaperDownloadService; import de.oliver.quicke2e.paper.PaperDownloadService;
import de.oliver.quicke2e.startScript.StartScriptService;
public class Main { public class Main {
@@ -17,6 +19,8 @@ public class Main {
"25565" "25565"
); );
Context context = new Context(config);
PaperDownloadService paper = new PaperDownloadService(); PaperDownloadService paper = new PaperDownloadService();
// paper.downloadServerFile(config.type(), config.version(), config.build()); // paper.downloadServerFile(config.type(), config.version(), config.build());
@@ -24,6 +28,9 @@ public class Main {
if (config.eula()) { if (config.eula()) {
eula.setEulaToTrue(String.format("servers/%s_%s_%s/eula.txt", config.type(), config.version(), config.build())); eula.setEulaToTrue(String.format("servers/%s_%s_%s/eula.txt", config.type(), config.version(), config.build()));
} }
StartScriptService startScript = new StartScriptService();
startScript.writeStartScript(context);
} }
} }

View File

@@ -0,0 +1,57 @@
package de.oliver.quicke2e.config;
import java.nio.file.Path;
public class Context {
private final Configuration configuration;
private String actualBuildNumber;
private Path serverEnvPath;
private Path serverJarPath;
private Path startScriptPath;
public Context(Configuration configuration) {
this.configuration = configuration;
this.actualBuildNumber = configuration.build();
}
public Configuration configuration() {
return configuration;
}
public String actualBuildNumber() {
return actualBuildNumber;
}
public void setActualBuildNumber(String actualBuildNumber) {
this.actualBuildNumber = actualBuildNumber;
}
public String serverFileName() {
return String.format("%s-%s-%s.jar", configuration.type(), configuration.version(), actualBuildNumber);
}
public Path serverEnvPath() {
return serverEnvPath;
}
public void setServerEnvPath(Path serverEnvPath) {
this.serverEnvPath = serverEnvPath;
}
public Path serverJarPath() {
return serverJarPath;
}
public void setServerJarPath(Path serverJarPath) {
this.serverJarPath = serverJarPath;
}
public Path startScriptPath() {
return startScriptPath;
}
public void setStartScriptPath(Path startScriptPath) {
this.startScriptPath = startScriptPath;
}
}

View File

@@ -0,0 +1,59 @@
package de.oliver.quicke2e.startScript;
import de.oliver.quicke2e.config.Context;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Collectors;
public class StartScriptService {
private String startScriptContent;
public StartScriptService() {
try {
startScriptContent = getResourceFileAsString("start.sh");
} catch (IOException e) {
startScriptContent = "echo No start script found!";
}
}
/**
* Reads given resource file as a string.
*
* @param fileName path to the resource file
* @return the file's contents
* @throws IOException if read fails for any reason
*/
private static String getResourceFileAsString(String fileName) throws IOException {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
try (InputStream is = classLoader.getResourceAsStream(fileName)) {
if (is == null) return null;
try (InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr)) {
return reader.lines().collect(Collectors.joining(System.lineSeparator()));
}
}
}
public boolean writeStartScript(Context context) {
Path startScriptPath = Path.of(String.format("%s/start.sh", context.serverEnvPath().toString()));
String content = startScriptContent
.replace("%SERVER_FILE%", context.serverFileName());
try {
Files.writeString(startScriptPath, content);
} catch (IOException e) {
e.printStackTrace();
return false;
}
context.setStartScriptPath(startScriptPath);
return true;
}
}

View File

@@ -0,0 +1,3 @@
#!/usr/bin/env sh
java -Xms4096M -Xmx4096M -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MaxNewSizePercent=40 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=30 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -XX:MaxGCPauseMillis=200 -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=32 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar %SERVER_FILE% nogui