diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index 04fbc810..a31e5729 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -32,23 +32,13 @@ import java.util.*; public class SubserverSystem { private SubserverSystem(){} + private static final String BACKBONE = "/home/minecraft/backbone/"; - private static final List JVM_ARGS = Arrays.asList("-Dlog4j.configurationFile=log4j2.xml", "-server", "-Xms128M", "-XX:ThreadPriorityPolicy=42", "-XX:+TieredCompilation", "-XX:TargetSurvivorRatio=90", "-XX:SurvivorRatio=8", "-XX:MaxTenuringThreshold=15", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseBiasedLocking", "-XX:UseSSE=3", "-XX:+UseCodeCacheFlushing", "-XX:+UseThreadPriorities", "-XX:+UseFastAccessorMethods", "-XX:+AggressiveOpts", "-XX:+ReduceSignalUsage", "-XX:+UseInterpreter", "-XX:+UseFastEmptyMethods", "-XX:+UseSharedSpaces", "-XX:AllocatePrefetchStyle=1", "-XX:+AlwaysCompileLoopMethods", "-XX:SharedReadOnlySize=30m", "-XX:+UseConcMarkSweepGC", "-XX:+RewriteFrequentPairs", "-XX:+OptimizeStringConcat", "-XX:+CMSCleanOnEnter", "-XX:+UseInlineCaches"); + private static final List JVM_ARGS = Arrays.asList("-Dlog4j.configurationFile=log4j2.xml", "-server", "-Xms128M", "-XX:+CompressedOops", "-XX:+TieredCompilation", "-XX:TargetSurvivorRatio=90", "-XX:SurvivorRatio=8", "-XX:MaxTenuringThreshold=15", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseBiasedLocking", "-XX:UseSSE=3", "-XX:+UseCodeCacheFlushing", "-XX:+UseThreadPriorities", "-XX:+AggressiveOpts", "-XX:+ReduceSignalUsage", "-XX:+UseInterpreter", "-XX:+UseSharedSpaces", "-XX:AllocatePrefetchStyle=1", "-XX:+AlwaysCompileLoopMethods", "-XX:+UseConcMarkSweepGC", "-XX:+RewriteFrequentPairs", "-XX:+OptimizeStringConcat", "-XX:+CMSCleanOnEnter", "-XX:+UseInlineCaches"); + private static final List JVM8_ARGS = Arrays.asList("-XX:ThreadPriorityPolicy=42", "-XX:SharedReadOnlySize=30m", "-XX:+UseFastEmptyMethods", "-XX:+UseFastAccessorMethods"); private static final String ARENA_PATH = BACKBONE + "arenaserver/"; private static final String SERVER_PATH = BACKBONE + "server/"; private static final String EVENT_PATH = BACKBONE + "event/"; - private static final String BINARY_PATH = "/binarys/"; - - public static void sendDeniedMessage(ProxiedPlayer p, UUID owner){ - ProxiedPlayer o = ProxyServer.getInstance().getPlayer(owner); - if(o == null) - return; - - BungeeCore.send(o, BungeeCore.CHAT_PREFIX + "§e" + p.getName() + " §7möchte auf deine Bauwelt."); - BungeeCore.send(o, "§7Klicke §ehier§7, wenn du das erlauben möchtest.", - "§e/bau addmember " + p.getName(), - new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau addmember " + p.getName())); - } /** * This function starts every arena (even test- and eventarenas). @@ -109,30 +99,18 @@ public class SubserverSystem { throw new SecurityException("Could not copy folder", e); } - //Generate launch command - List cmd = new LinkedList<>(); - cmd.add("java"); - cmd.add("-DlogPath=" + mapName); - cmd.add("-DfightID=" + eventFightID); - if(player1 != null && eventFightID != -1) - cmd.add("-DblueLeader=" + player1.toString()); - if(player2 != null) - cmd.add("-DredLeader=" + player2.toString()); - if(checkSchemID != 0) - cmd.add("-DcheckSchemID=" + checkSchemID); - if(ranked) - cmd.add("-Dranked=true"); - cmd.add("-Xmx2G"); - cmd.addAll(JVM_ARGS); - cmd.add("-jar"); - cmd.add(BINARY_PATH + modus.serverJar()); - cmd.add("--log-strip-color"); - cmd.add("--world-dir"); - cmd.add(worldDir); - cmd.add("--level-name"); - cmd.add(mapName); - cmd.add("--port"); - cmd.add(String.valueOf(port)); + List cmd = serverStartCommand( + modus.serverJar(), + worldDir, + mapName, + port, + "2G", + "logPath=" + mapName, + "fightID=" + eventFightID, + "ranked=" + ranked, + "checkSchemID=" + checkSchemID, + player1 != null && eventFightID != -1 ? "blueLeader=" + player1.toString() : null, + player2 != null ? "redLeader=" + player2.toString() : null); //Start server ProcessBuilder process = new ProcessBuilder(cmd); @@ -164,10 +142,6 @@ public class SubserverSystem { return startArena(modus, map, eventFightID, checkSchemID, serverName, mapName, player1, player2, false); } - public static Subserver startArena(ArenaMode modus, String map){ - return startArena(modus, map, 0, 0, null, null, null, null); - } - public static Subserver startEventArena(EventFight eventFight, String serverName){ return startArena( eventFight.getSpielmodus(), @@ -180,7 +154,7 @@ public class SubserverSystem { null); } - public static void sendToTestServer(ProxiedPlayer p, ArenaMode m, String map, int checkSchemId){ + public static void startTestServer(ProxiedPlayer p, ArenaMode m, String map, int checkSchemId){ startArena(m, map, -1, checkSchemId, p.getName() + "s Bau", p.getName(), p.getUniqueId(), null).sendPlayer(p); } @@ -189,24 +163,16 @@ public class SubserverSystem { return; SteamwarUser user = SteamwarUser.get(owner); - copyBauwelt(p, BungeeCore.BAUWELT_PROTOTYP, BungeeCore.WORLD_FOLDER + owner.toString()); + copyBauweltIfRequired(p, BungeeCore.BAUWELT_PROTOTYP, BungeeCore.WORLD_FOLDER + owner.toString()); int port = freePort(4000); - //Generate launch command - List cmd = new LinkedList<>(); - cmd.add("java"); - cmd.add("-DlogPath=" + owner.toString()); - cmd.add("-Xmx256M"); - cmd.addAll(JVM_ARGS); - cmd.add("-jar"); - cmd.add(BINARY_PATH + "spigot-1.12.2.jar"); - cmd.add("--log-strip-color"); - cmd.add("--world-dir"); - cmd.add("/home/minecraft/userworlds"); - cmd.add("--level-name"); - cmd.add(owner.toString()); - cmd.add("--port"); - cmd.add(String.valueOf(port)); + List cmd = serverStartCommand( + "spigot-1.12.2.jar", + "/home/minecraft/userworlds", + owner.toString(), + port, + "256M", + "logPath=" + owner.toString()); //Start server ProcessBuilder process = new ProcessBuilder(cmd); @@ -220,24 +186,16 @@ public class SubserverSystem { return; SteamwarUser user = SteamwarUser.get(owner); - copyBauwelt(p, BungeeCore.BAUWELT15, BungeeCore.USERWORLDS15 + user.getId()); + copyBauweltIfRequired(p, BungeeCore.BAUWELT15, BungeeCore.USERWORLDS15 + user.getId()); int port = freePort(4000); - //Generate launch command - List cmd = new LinkedList<>(); - cmd.add("java"); - cmd.add("-DlogPath=" + user.getId()); - cmd.add("-Xmx512M"); - cmd.addAll(JVM_ARGS); - cmd.add("-jar"); - cmd.add(BINARY_PATH + "spigot-1.15.2.jar"); - cmd.add("--log-strip-color"); - cmd.add("--world-dir"); - cmd.add("/home/minecraft/userworlds15"); - cmd.add("--level-name"); - cmd.add(String.valueOf(user.getId())); - cmd.add("--port"); - cmd.add(String.valueOf(port)); + List cmd = serverStartCommand( + "spigot-1.15.2.jar", + "/home/minecraft/userworlds15", + String.valueOf(user.getId()), + port, + "512M", + "logPath=" + owner.toString()); //Start server ProcessBuilder process = new ProcessBuilder(cmd); @@ -246,6 +204,44 @@ public class SubserverSystem { new Bauserver(user.getUserName() + "s Bau", owner, port, process, () -> {}).sendPlayer(p); } + public static void sendDeniedMessage(ProxiedPlayer p, UUID owner){ + ProxiedPlayer o = ProxyServer.getInstance().getPlayer(owner); + if(o == null) + return; + + BungeeCore.send(o, BungeeCore.CHAT_PREFIX + "§e" + p.getName() + " §7möchte auf deine Bauwelt."); + BungeeCore.send(o, "§7Klicke §ehier§7, wenn du das erlauben möchtest.", + "§e/bau addmember " + p.getName(), + new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/bau addmember " + p.getName())); + } + + private static List serverStartCommand(String serverJar, String worldDir, String levelName, int port, String xmx, String... dParams){ + List cmd = new ArrayList<>(); + boolean jdk11 = serverJar.contains("1.15.2"); + if(jdk11) + cmd.add("/usr/lib/jvm/java-11-openjdk-amd64/bin/java"); + else + cmd.add("java"); + + for(String param : dParams){ + cmd.add("-D" + param); + } + cmd.add("-Xmx" + xmx); + cmd.addAll(JVM_ARGS); + if(!jdk11) + cmd.addAll(JVM8_ARGS); + cmd.add("-jar"); + cmd.add("/binarys/" + serverJar); + cmd.add("--log-strip-color"); + cmd.add("--world-dir"); + cmd.add(worldDir); + cmd.add("--level-name"); + cmd.add(levelName); + cmd.add("--port"); + cmd.add(String.valueOf(port)); + return cmd; + } + private static boolean bauRunning(ProxiedPlayer p, UUID owner){ for(Subserver subserver : Subserver.getServerList()){ if(subserver.getType() == Servertype.BAUSERVER && ((Bauserver)subserver).getOwner().equals(owner)){ @@ -256,7 +252,7 @@ public class SubserverSystem { return false; } - private static void copyBauwelt(ProxiedPlayer p, String sourcePath, String targetPath){ + private static void copyBauweltIfRequired(ProxiedPlayer p, String sourcePath, String targetPath){ File w = new File(targetPath); if (!w.exists() || !w.isDirectory()){ try { diff --git a/src/de/steamwar/bungeecore/commands/BauCommand.java b/src/de/steamwar/bungeecore/commands/BauCommand.java index 18ab9beb..616bed28 100644 --- a/src/de/steamwar/bungeecore/commands/BauCommand.java +++ b/src/de/steamwar/bungeecore/commands/BauCommand.java @@ -271,7 +271,7 @@ public class BauCommand { break; } } - SubserverSystem.sendToTestServer(p, mode, map, 0); + SubserverSystem.startTestServer(p, mode, map, 0); })); } diff --git a/src/de/steamwar/bungeecore/commands/CheckCommand.java b/src/de/steamwar/bungeecore/commands/CheckCommand.java index 2d03f4ef..a64c3830 100644 --- a/src/de/steamwar/bungeecore/commands/CheckCommand.java +++ b/src/de/steamwar/bungeecore/commands/CheckCommand.java @@ -232,7 +232,7 @@ public class CheckCommand extends BasicCommand { } ArenaMode mode = ArenaMode.getByCheckSchemType(schematic.getSchemType().toDB()); - SubserverSystem.sendToTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID()); + SubserverSystem.startTestServer(checker, mode, FightCommand.getMap(checker, mode, "Random"), schematic.getSchemID()); currentCheckers.put(checker.getUniqueId(), this); currentSchems.put(schematic.getSchemID(), this); next(0);