From 72ee7c19c8966973a67f5b1c8e940fb8d893c322 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Sun, 20 Jun 2021 17:46:13 +0200 Subject: [PATCH 001/131] Untested remote start system Signed-off-by: Lixfel --- .../steamwar/bungeecore/LoadEvaluation.java | 92 +++++++++++++++++++ .../steamwar/bungeecore/SubserverSystem.java | 29 +++++- 2 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 src/de/steamwar/bungeecore/LoadEvaluation.java diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java new file mode 100644 index 0000000..d1785af --- /dev/null +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -0,0 +1,92 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2021 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bungeecore; + +import java.io.*; + +public class LoadEvaluation { + private LoadEvaluation(){} + + private static final File meminfo = new File("/proc/meminfo"); + + public static double getRamPercentage() { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(meminfo)))) { + String memTotal = bufferedReader.readLine().replaceAll(" +", " "); + bufferedReader.readLine(); + String memAvailable = bufferedReader.readLine().replaceAll(" +", " "); + + long memTotalLong = getNumber(memTotal); + long memAvailableLong = getNumber(memAvailable); + return (memTotalLong - memAvailableLong) / (double) memTotalLong; + } catch (IOException e) { + return 1D; + } + } + + public static double getRemoteRamPercentage() { + try { + Process process = new ProcessBuilder("ssh lx cat /proc/meminfo").start(); + process.waitFor(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String memTotal = bufferedReader.readLine().replaceAll(" +", " "); + bufferedReader.readLine(); + String memAvailable = bufferedReader.readLine().replaceAll(" +", " "); + + long memTotalLong = getNumber(memTotal); + long memAvailableLong = getNumber(memAvailable); + return (memTotalLong - memAvailableLong) / (double) memTotalLong; + } catch (IOException e) { + return 1D; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return 1D; + } + } + + public static double getCPULoad() { + try { + Process process = new ProcessBuilder("cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + process.waitFor(); + return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()); + } catch (IOException e) { + return 1D; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return 1D; + } + } + + public static double getRemoteCPULoad() { + try { + Process process = new ProcessBuilder("ssh lx cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + process.waitFor(); + return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()); + } catch (IOException e) { + return 1D; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return 1D; + } + } + + private static long getNumber(String s) { + return Long.parseLong(s.split(" ")[1]); + } +} diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index 2812eb3..3498008 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -118,8 +118,10 @@ public class SubserverSystem { Thread.currentThread().interrupt(); } + File directory = new File(SERVER_PATH, modus.getFolder()); List cmd = serverStartCommand( modus.serverJar(), + directory, worldDir, mapName, port, @@ -135,7 +137,7 @@ public class SubserverSystem { //Start server ProcessBuilder process = new ProcessBuilder(cmd); - process.directory(new File(SERVER_PATH, modus.getFolder())); + process.directory(directory); String finalMapName = mapName; if(eventFightID == -1) @@ -185,8 +187,10 @@ public class SubserverSystem { copyBauweltIfRequired(p, prototype, worldFolder + worldName); int port = freePort(4000); + File directory = new File(SERVER_PATH, serverName); List cmd = serverStartCommand( serverJar, + directory, worldDir, worldName, port, @@ -195,7 +199,7 @@ public class SubserverSystem { //Start server ProcessBuilder process = new ProcessBuilder(cmd); - process.directory(new File(SERVER_PATH, serverName)); + process.directory(directory); new Bauserver(user.getUserName() + "s Bau", owner, port, process, () -> {}).sendPlayer(p); } @@ -231,9 +235,20 @@ public class SubserverSystem { 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){ + private static List serverStartCommand(String serverJar, File directory, String worldDir, String levelName, int port, String xmx, String... dParams){ List cmd = new ArrayList<>(); boolean jdk11 = serverJar.contains("1.15.2"); + + if(!steamwarStartAvailible() && lixfelStartAvailible()){ + cmd.add("ssh"); + cmd.add("-L"); + cmd.add(port + ":localhost:" + port); + cmd.add("lx"); + cmd.add("cd"); + cmd.add(directory.getPath()); + cmd.add(";"); + } + if(jdk11) cmd.add("/usr/lib/jvm/java-11-openjdk-amd64/bin/java"); else @@ -259,6 +274,14 @@ public class SubserverSystem { return cmd; } + private static boolean steamwarStartAvailible(){ + return LoadEvaluation.getCPULoad() < 0.8 && LoadEvaluation.getRamPercentage() < 0.8; + } + + private static boolean lixfelStartAvailible(){ + return LoadEvaluation.getRemoteCPULoad() < 0.8 && LoadEvaluation.getRemoteRamPercentage() < 0.8; + } + private static boolean bauRunning(ProxiedPlayer p, UUID owner){ for(Subserver subserver : Subserver.getServerList()){ if(subserver.getType() == Servertype.BAUSERVER && ((Bauserver)subserver).getOwner().equals(owner)){ From 85e129ada651dd376e90d9c1474ba325dab1fe2c Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 18:03:41 +0200 Subject: [PATCH 002/131] Fix LoadEvaluation Fix naming --- src/de/steamwar/bungeecore/LoadEvaluation.java | 8 ++++---- src/de/steamwar/bungeecore/SubserverSystem.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java index d1785af..d4acab0 100644 --- a/src/de/steamwar/bungeecore/LoadEvaluation.java +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -40,9 +40,9 @@ public class LoadEvaluation { } } - public static double getRemoteRamPercentage() { + public static double getRemoteRamPercentage(String remote) { try { - Process process = new ProcessBuilder("ssh lx cat /proc/meminfo").start(); + Process process = new ProcessBuilder("ssh " + remote + " cat /proc/meminfo").start(); process.waitFor(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String memTotal = bufferedReader.readLine().replaceAll(" +", " "); @@ -73,9 +73,9 @@ public class LoadEvaluation { } } - public static double getRemoteCPULoad() { + public static double getRemoteCPULoad(String remote) { try { - Process process = new ProcessBuilder("ssh lx cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + Process process = new ProcessBuilder("ssh " + remote + " cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); process.waitFor(); return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()); } catch (IOException e) { diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index 3498008..d002d2c 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -239,7 +239,7 @@ public class SubserverSystem { List cmd = new ArrayList<>(); boolean jdk11 = serverJar.contains("1.15.2"); - if(!steamwarStartAvailible() && lixfelStartAvailible()){ + if(!steamwarStartAvailable() && lixfelStartAvailable()){ cmd.add("ssh"); cmd.add("-L"); cmd.add(port + ":localhost:" + port); @@ -274,12 +274,12 @@ public class SubserverSystem { return cmd; } - private static boolean steamwarStartAvailible(){ + private static boolean steamwarStartAvailable(){ return LoadEvaluation.getCPULoad() < 0.8 && LoadEvaluation.getRamPercentage() < 0.8; } - private static boolean lixfelStartAvailible(){ - return LoadEvaluation.getRemoteCPULoad() < 0.8 && LoadEvaluation.getRemoteRamPercentage() < 0.8; + private static boolean lixfelStartAvailable(){ + return LoadEvaluation.getRemoteCPULoad("lx") < 0.8 && LoadEvaluation.getRemoteRamPercentage("lx") < 0.8; } private static boolean bauRunning(ProxiedPlayer p, UUID owner){ From 5aa973d3889cd20689ab58be6e1bdf459a843315 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 19:02:05 +0200 Subject: [PATCH 003/131] Fix LoadEvaluation --- src/de/steamwar/bungeecore/LoadEvaluation.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java index d4acab0..0732d75 100644 --- a/src/de/steamwar/bungeecore/LoadEvaluation.java +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -42,7 +42,9 @@ public class LoadEvaluation { public static double getRemoteRamPercentage(String remote) { try { - Process process = new ProcessBuilder("ssh " + remote + " cat /proc/meminfo").start(); + // Attention: + // memInfo.sh needs to contain: cat /proc/meminfo + Process process = new ProcessBuilder("ssh", remote, "\"./memInfo.sh\"").start(); process.waitFor(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String memTotal = bufferedReader.readLine().replaceAll(" +", " "); @@ -64,7 +66,7 @@ public class LoadEvaluation { try { Process process = new ProcessBuilder("cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); process.waitFor(); - return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()); + return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()) / 100.0; } catch (IOException e) { return 1D; } catch (InterruptedException e) { @@ -75,9 +77,11 @@ public class LoadEvaluation { public static double getRemoteCPULoad(String remote) { try { - Process process = new ProcessBuilder("ssh " + remote + " cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + // Attention: + // cpuLoad.sh needs to contain: cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.2f\n", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}' + Process process = new ProcessBuilder("ssh", remote, "\"./cpuLoad.sh\"").start(); process.waitFor(); - return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()); + return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()) / 100.0; } catch (IOException e) { return 1D; } catch (InterruptedException e) { From f6a4c343a5d4d156e55b7c13dbf534f77ec7e4b0 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 21:36:58 +0200 Subject: [PATCH 004/131] Add StatCommand Fix LoadEvaluation --- src/de/steamwar/bungeecore/BungeeCore.java | 1 + .../steamwar/bungeecore/LoadEvaluation.java | 4 +- .../bungeecore/commands/StatCommand.java | 48 +++++++++++++++++++ .../steamwar/messages/BungeeCore.properties | 1 + 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 src/de/steamwar/bungeecore/commands/StatCommand.java diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 2344d56..50cb205 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -121,6 +121,7 @@ public class BungeeCore extends Plugin { new UnIgnoreCommand(); new PollresultCommand(); new ResourcereloadCommand(); + new StatCommand(); if(!EVENT_MODE){ new WebregisterCommand(); diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java index 0732d75..b1f7a0d 100644 --- a/src/de/steamwar/bungeecore/LoadEvaluation.java +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -64,12 +64,14 @@ public class LoadEvaluation { public static double getCPULoad() { try { - Process process = new ProcessBuilder("cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + Process process = new ProcessBuilder("bash", "-c", "cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); process.waitFor(); return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()) / 100.0; } catch (IOException e) { + e.printStackTrace(); return 1D; } catch (InterruptedException e) { + e.printStackTrace(); Thread.currentThread().interrupt(); return 1D; } diff --git a/src/de/steamwar/bungeecore/commands/StatCommand.java b/src/de/steamwar/bungeecore/commands/StatCommand.java new file mode 100644 index 0000000..e87eabd --- /dev/null +++ b/src/de/steamwar/bungeecore/commands/StatCommand.java @@ -0,0 +1,48 @@ +package de.steamwar.bungeecore.commands; + +import de.steamwar.bungeecore.LoadEvaluation; +import de.steamwar.bungeecore.Message; +import net.md_5.bungee.api.CommandSender; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class StatCommand extends BasicCommand { + + public StatCommand() { + super("stat", "bungeecore.softreload","stats"); + } + + @Override + public void execute(CommandSender sender, String[] args) { + try { + Process process = new ProcessBuilder("ps", "x").start(); + process.waitFor(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); + Map serverCounts = new HashMap<>(); + bufferedReader.lines().forEach(s -> { + if (!s.contains("--port") || s.contains("grep")) { + return; + } + String server = "SW"; + if (s.contains("ssh -L")) { + server = s.substring(s.indexOf("ssh -L") + 6).split(" ")[2]; + } + serverCounts.put(server, serverCounts.computeIfAbsent(server, s1 -> 0) + 1); + }); + serverCounts.forEach((s, integer) -> { + if (s.equals("SW")) { + Message.send("STAT_SERVER", sender, s, LoadEvaluation.getRamPercentage(), LoadEvaluation.getCPULoad(), integer); + } else { + Message.send("STAT_SERVER", sender, s.toUpperCase(), LoadEvaluation.getRemoteRamPercentage(s), LoadEvaluation.getRemoteCPULoad(s), integer); + } + }); + } catch (Exception e) { + throw new SecurityException(e.getMessage(), e); + } + } + +} diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index a92b7c5..025f2e4 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -104,6 +104,7 @@ MOD_YELLOW_PLUR=§7Deaktiviere die Mods\n§e{0}\n§7um weiter auf §eSteam§8War #Various commands ALERT=§f{0} +STAT_SERVER=§7Server §f{0} - §7Ram §f{1} §7CPU §f{2} §7Server Count §f{3} #Ban&Mute-Command BAN_TEAM_BANNED={0} §c{1} wurde von {2} {3} gebannt. §f§lGrund: §f{4} From 4120e989ce87c690903fe0782d01ccc80823cf4d Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 21:38:12 +0200 Subject: [PATCH 005/131] Add StatCommand Fix LoadEvaluation --- src/de/steamwar/bungeecore/LoadEvaluation.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java index b1f7a0d..59fda6c 100644 --- a/src/de/steamwar/bungeecore/LoadEvaluation.java +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -68,10 +68,8 @@ public class LoadEvaluation { process.waitFor(); return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()) / 100.0; } catch (IOException e) { - e.printStackTrace(); return 1D; } catch (InterruptedException e) { - e.printStackTrace(); Thread.currentThread().interrupt(); return 1D; } From 5959f8eb6f7ea1490a56cc271b47cfb0bb02e383 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 21:38:45 +0200 Subject: [PATCH 006/131] Add StatCommand Fix LoadEvaluation --- .../bungeecore/commands/StatCommand.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/commands/StatCommand.java b/src/de/steamwar/bungeecore/commands/StatCommand.java index e87eabd..5422e63 100644 --- a/src/de/steamwar/bungeecore/commands/StatCommand.java +++ b/src/de/steamwar/bungeecore/commands/StatCommand.java @@ -1,3 +1,22 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + package de.steamwar.bungeecore.commands; import de.steamwar.bungeecore.LoadEvaluation; @@ -6,14 +25,13 @@ import net.md_5.bungee.api.CommandSender; import java.io.BufferedReader; import java.io.InputStreamReader; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class StatCommand extends BasicCommand { public StatCommand() { - super("stat", "bungeecore.softreload","stats"); + super("stat", "bungeecore.softreload", "stats"); } @Override From 5d34cf323f67a1652e80e9a0b594457fc5466bf3 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 20 Jun 2021 21:40:41 +0200 Subject: [PATCH 007/131] Fix LoadEvaluation --- src/de/steamwar/bungeecore/LoadEvaluation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/LoadEvaluation.java b/src/de/steamwar/bungeecore/LoadEvaluation.java index 0732d75..59fda6c 100644 --- a/src/de/steamwar/bungeecore/LoadEvaluation.java +++ b/src/de/steamwar/bungeecore/LoadEvaluation.java @@ -64,7 +64,7 @@ public class LoadEvaluation { public static double getCPULoad() { try { - Process process = new ProcessBuilder("cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); + Process process = new ProcessBuilder("bash", "-c", "cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{printf \"%.2f\\n\", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'").start(); process.waitFor(); return Double.parseDouble(new BufferedReader(new InputStreamReader(process.getInputStream())).readLine()) / 100.0; } catch (IOException e) { From 4de062176a5caffcdb10315339be688a201d73db Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 21 Jun 2021 16:52:39 +0200 Subject: [PATCH 008/131] Better Tablist footer --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 8 +++----- src/de/steamwar/messages/BungeeCore.properties | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index c0b12fd..c25be00 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -131,15 +131,13 @@ public class TablistManager extends BasicListener { } private String calcHeader(ProxiedPlayer player){ - int phase = (seconds % 16) / 4; + int phase = (seconds % 16) / 3; switch(phase){ case 0: - return Message.parse("TABLIST_PHASE_0", player, ProxyServer.getInstance().getPlayers().size()); + return Message.parse("TABLIST_PHASE_0", player); case 1: return Message.parse("TABLIST_PHASE_1", player); case 2: - return Message.parse("TABLIST_PHASE_2", player); - case 3: default: return Message.parse("TABLIST_PHASE_DEFAULT", player); } @@ -161,7 +159,7 @@ public class TablistManager extends BasicListener { try { ServerInfo currentServer = player.getServer().getInfo(); setHeader(calcHeader(player)); - setFooter("§e" + currentServer.getName() + " " + getPing() + "§8ms"); + setFooter(Message.parse("TABLIST_FOOTER", player, currentServer.getName(), getPing(), ProxyServer.getInstance().getPlayers().size())); setSize(size, 20); int i = 0; diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index a92b7c5..8cee5b1 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -475,10 +475,10 @@ POLL_ANWSER=§7{0} POLL_ANWSER_HOVER=§e{0} §ewählen #TablistManager -TABLIST_PHASE_0=§8Spieler online: §e{0} -TABLIST_PHASE_1=§8Teamspeak: §eSteam§8War.de -TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord +TABLIST_PHASE_0=§8Teamspeak: §eSteam§8War.de +TABLIST_PHASE_1=§8Discord: §8https://§eSteam§8War.de/discord TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de +TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2} TABLIST_BAU=Bau #EventStarter From 2fc19bc92d1d67e766020ed3a4ed76e960edc613 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 21 Jun 2021 22:02:53 +0200 Subject: [PATCH 009/131] Add Node3 --- src/de/steamwar/bungeecore/SubserverSystem.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index d002d2c..e35a134 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -239,7 +239,8 @@ public class SubserverSystem { List cmd = new ArrayList<>(); boolean jdk11 = serverJar.contains("1.15.2"); - if(!steamwarStartAvailable() && lixfelStartAvailable()){ + boolean notSteamwarStart = !steamwarStartAvailable(); + if (notSteamwarStart && remoteStartAvailable("lx")) { cmd.add("ssh"); cmd.add("-L"); cmd.add(port + ":localhost:" + port); @@ -247,6 +248,14 @@ public class SubserverSystem { cmd.add("cd"); cmd.add(directory.getPath()); cmd.add(";"); + } else if (notSteamwarStart && remoteStartAvailable("az")) { + cmd.add("ssh"); + cmd.add("-L"); + cmd.add(port + ":localhost:" + port); + cmd.add("az"); + cmd.add("cd"); + cmd.add(directory.getPath()); + cmd.add(";"); } if(jdk11) @@ -278,8 +287,8 @@ public class SubserverSystem { return LoadEvaluation.getCPULoad() < 0.8 && LoadEvaluation.getRamPercentage() < 0.8; } - private static boolean lixfelStartAvailable(){ - return LoadEvaluation.getRemoteCPULoad("lx") < 0.8 && LoadEvaluation.getRemoteRamPercentage("lx") < 0.8; + private static boolean remoteStartAvailable(String remote) { + return LoadEvaluation.getRemoteCPULoad(remote) < 0.8 && LoadEvaluation.getRemoteRamPercentage(remote) < 0.8; } private static boolean bauRunning(ProxiedPlayer p, UUID owner){ From ed10fbd786b481c958050752f1fa0d0fbdb4ca88 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 21 Jun 2021 22:07:38 +0200 Subject: [PATCH 010/131] Add Node3 --- .../steamwar/bungeecore/SubserverSystem.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index e35a134..b44b331 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -239,24 +239,25 @@ public class SubserverSystem { List cmd = new ArrayList<>(); boolean jdk11 = serverJar.contains("1.15.2"); - boolean notSteamwarStart = !steamwarStartAvailable(); - if (notSteamwarStart && remoteStartAvailable("lx")) { + boolean fallback = false; + if (!steamwarStartAvailable()) { cmd.add("ssh"); cmd.add("-L"); cmd.add(port + ":localhost:" + port); - cmd.add("lx"); - cmd.add("cd"); - cmd.add(directory.getPath()); - cmd.add(";"); - } else if (notSteamwarStart && remoteStartAvailable("az")) { - cmd.add("ssh"); - cmd.add("-L"); - cmd.add(port + ":localhost:" + port); - cmd.add("az"); + if (remoteStartAvailable("lx")) { + cmd.add("lx"); + } else if (remoteStartAvailable("az")) { + cmd.add("az"); + } else { + fallback = true; + } cmd.add("cd"); cmd.add(directory.getPath()); cmd.add(";"); } + if (fallback) { + cmd.clear(); + } if(jdk11) cmd.add("/usr/lib/jvm/java-11-openjdk-amd64/bin/java"); From 66899e8df17a7ebafef1ff7cecf386ee0a7d834a Mon Sep 17 00:00:00 2001 From: yoyosource Date: Tue, 22 Jun 2021 12:21:50 +0200 Subject: [PATCH 011/131] Update Tablist slim Mode! --- .../bungeecore/listeners/TablistManager.java | 80 +++++++++++++++---- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index c25be00..6f6fe4f 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -41,6 +41,7 @@ import java.io.File; import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; public class TablistManager extends BasicListener { @@ -81,24 +82,19 @@ public class TablistManager extends BasicListener { private synchronized void updateCustomTablist(){ //Calculate server-player-map playerMap.clear(); - for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){ + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { Server pserver = player.getServer(); - if(pserver == null) //Happens temporarily + if (pserver == null) //Happens temporarily continue; ServerInfo server = pserver.getInfo(); String serverName = server.getName(); Subserver subserver = Subserver.getSubserver(server); - List players; - if(subserver != null && subserver.getType() == Servertype.BAUSERVER){ - players = playerMap.getOrDefault("Bau", new ArrayList<>()); - players.add(player); - playerMap.putIfAbsent("Bau", players); - }else{ - players = playerMap.getOrDefault(serverName, new ArrayList<>()); - players.add(player); - playerMap.putIfAbsent(serverName, players); + if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { + playerMap.computeIfAbsent("Bau", s -> new ArrayList<>()).add(player); + } else { + playerMap.computeIfAbsent(serverName, s -> new ArrayList<>()).add(player); } } playerMap.forEach((server, players) -> players.sort((proxiedPlayer, t1) -> proxiedPlayer.getName().compareToIgnoreCase(t1.getName()))); @@ -155,13 +151,17 @@ public class TablistManager extends BasicListener { } private void refresh(){ + ServerInfo currentServer = player.getServer().getInfo(); + setHeader(calcHeader(player)); + setFooter(Message.parse("TABLIST_FOOTER", player, currentServer.getName(), getPing(), ProxyServer.getInstance().getPlayers().size())); + setSize(size, 20); + + if (size >= 5) { + refreshSlim(currentServer); + return; + } try { - ServerInfo currentServer = player.getServer().getInfo(); - setHeader(calcHeader(player)); - setFooter(Message.parse("TABLIST_FOOTER", player, currentServer.getName(), getPing(), ProxyServer.getInstance().getPlayers().size())); - setSize(size, 20); - int i = 0; for (String server : playerMap.navigableKeySet()) { if (i > 0){ @@ -189,6 +189,54 @@ public class TablistManager extends BasicListener { } } + private void refreshSlim(ServerInfo currentServer) { + try { + int i = 0; + boolean spacer = true; + for (String server : playerMap.navigableKeySet()) { + if (i > 0 && spacer) { + setSlot(i%20, i/20, darkGray, "", 1000); + i++; + } + spacer = true; + List players = playerMap.get(server) + .stream() + .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member) + .collect(Collectors.toList()); + if (server.equals("Bau")) { + Subserver subserver = Subserver.getSubserver(player); + if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { + players = playerMap.get(server); + } + server = Message.parse("TABLIST_BAU", player); + } + int increment = playerMap.get(server).size() - players.size(); + if (players.isEmpty()) { + server += " §7(" + increment + ")"; + spacer = false; + } else if (increment != 0) { + server += " §7(+" + increment + ")"; + } + + setSlot(i%20, i/20, gray, "§7§l" + server, 1000); + i++; + for (ProxiedPlayer p : players){ + boolean sameServer = currentServer == p.getServer().getInfo(); + setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p, sameServer), (sameServer ? 1 : 500)); + i++; + } + } + + while (i < size*20){ + setSlot(i%20, i/20, darkGray, "", 1000); + i++; + } + }catch(IndexOutOfBoundsException | NullPointerException e){ + //Ignore IndexOutOfBoundsException + //Ignore NPE, happens sometimes (only 1s long) when somebody is joining, server switching or disconnecting + } + } + private String getTablistName(ProxiedPlayer p, boolean sameServer) { Subserver server = Subserver.getSubserver(p); if(server != null){ From 8705e19aec7f04a1ead6706e37907173afcb0074 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Thu, 24 Jun 2021 17:41:05 +0200 Subject: [PATCH 012/131] Update Tablist slim Mode! --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 7 ++++--- src/de/steamwar/messages/BungeeCore.properties | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index 6f6fe4f..6a1d965 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -130,9 +130,9 @@ public class TablistManager extends BasicListener { int phase = (seconds % 16) / 3; switch(phase){ case 0: - return Message.parse("TABLIST_PHASE_0", player); - case 1: return Message.parse("TABLIST_PHASE_1", player); + case 1: + return Message.parse("TABLIST_PHASE_2", player); case 2: default: return Message.parse("TABLIST_PHASE_DEFAULT", player); @@ -153,7 +153,8 @@ public class TablistManager extends BasicListener { private void refresh(){ ServerInfo currentServer = player.getServer().getInfo(); setHeader(calcHeader(player)); - setFooter(Message.parse("TABLIST_FOOTER", player, currentServer.getName(), getPing(), ProxyServer.getInstance().getPlayers().size())); + // TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2} + setFooter("§e" + currentServer.getName() + " " + getPing() + "§8ms §eSpieler§8: §7" + ProxyServer.getInstance().getPlayers().size()); setSize(size, 20); if (size >= 5) { diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index 8cee5b1..a92b7c5 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -475,10 +475,10 @@ POLL_ANWSER=§7{0} POLL_ANWSER_HOVER=§e{0} §ewählen #TablistManager -TABLIST_PHASE_0=§8Teamspeak: §eSteam§8War.de -TABLIST_PHASE_1=§8Discord: §8https://§eSteam§8War.de/discord +TABLIST_PHASE_0=§8Spieler online: §e{0} +TABLIST_PHASE_1=§8Teamspeak: §eSteam§8War.de +TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de -TABLIST_FOOTER=§e{0} {1}§8ms §eSpieler§8: §7{2} TABLIST_BAU=Bau #EventStarter From 70359e1c9e9935d666130c695cb24abf3d01f04c Mon Sep 17 00:00:00 2001 From: yoyosource Date: Thu, 24 Jun 2021 19:42:54 +0200 Subject: [PATCH 013/131] Fix CPU usage threshold --- src/de/steamwar/bungeecore/SubserverSystem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index b44b331..b4ffbc4 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -285,11 +285,11 @@ public class SubserverSystem { } private static boolean steamwarStartAvailable(){ - return LoadEvaluation.getCPULoad() < 0.8 && LoadEvaluation.getRamPercentage() < 0.8; + return LoadEvaluation.getCPULoad() < 0.7 && LoadEvaluation.getRamPercentage() < 0.8; } private static boolean remoteStartAvailable(String remote) { - return LoadEvaluation.getRemoteCPULoad(remote) < 0.8 && LoadEvaluation.getRemoteRamPercentage(remote) < 0.8; + return LoadEvaluation.getRemoteCPULoad(remote) < 0.7 && LoadEvaluation.getRemoteRamPercentage(remote) < 0.8; } private static boolean bauRunning(ProxiedPlayer p, UUID owner){ From d11b4ba9ca56b7edc71c8238980aefd3a1cbd58a Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 10:47:17 +0200 Subject: [PATCH 014/131] Fix TablistManager add Team visibility --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index 6a1d965..d5da6f2 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -27,6 +27,7 @@ import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.Servertype; import de.steamwar.bungeecore.Subserver; import de.steamwar.bungeecore.sql.SteamwarUser; +import de.steamwar.bungeecore.sql.Team; import de.steamwar.bungeecore.sql.UserGroup; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; @@ -200,9 +201,10 @@ public class TablistManager extends BasicListener { i++; } spacer = true; + Team team = getTeam(player); List players = playerMap.get(server) .stream() - .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member) + .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || team == getTeam(p)) .collect(Collectors.toList()); if (server.equals("Bau")) { Subserver subserver = Subserver.getSubserver(player); @@ -238,6 +240,10 @@ public class TablistManager extends BasicListener { } } + private Team getTeam(ProxiedPlayer p) { + return Team.get(SteamwarUser.get(p).getTeam()); + } + private String getTablistName(ProxiedPlayer p, boolean sameServer) { Subserver server = Subserver.getSubserver(p); if(server != null){ From 80ec27b0c46b4055c04ac7525e013033e571f64e Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 11:49:59 +0200 Subject: [PATCH 015/131] Fix TablistManager add Team visibility --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index d5da6f2..5daf583 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -241,7 +241,8 @@ public class TablistManager extends BasicListener { } private Team getTeam(ProxiedPlayer p) { - return Team.get(SteamwarUser.get(p).getTeam()); + Team team = Team.get(SteamwarUser.get(p).getTeam()); + return team.getTeamId() <= 0 ? null : team; } private String getTablistName(ProxiedPlayer p, boolean sameServer) { From f2ba19da712cfefa874721f63f2bc1b7a9f4ac09 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 12:33:07 +0200 Subject: [PATCH 016/131] Fix TablistManager add Team visibility --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index 5daf583..fbfb330 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -204,7 +204,7 @@ public class TablistManager extends BasicListener { Team team = getTeam(player); List players = playerMap.get(server) .stream() - .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || team == getTeam(p)) + .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || (team != null && team == getTeam(p))) .collect(Collectors.toList()); if (server.equals("Bau")) { Subserver subserver = Subserver.getSubserver(player); From edbaddbee6d7e768a3924d36301fffb81cccd8b5 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 15:31:29 +0200 Subject: [PATCH 017/131] Update TablistManager --- .../bungeecore/listeners/TablistManager.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index fbfb330..de2c98f 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -176,7 +176,7 @@ public class TablistManager extends BasicListener { i++; for (ProxiedPlayer p : playerMap.get(server)){ boolean sameServer = currentServer == p.getServer().getInfo(); - setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p, sameServer), (sameServer ? 1 : 500)); + setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p), (sameServer ? 1 : 500)); i++; } } @@ -225,7 +225,7 @@ public class TablistManager extends BasicListener { i++; for (ProxiedPlayer p : players){ boolean sameServer = currentServer == p.getServer().getInfo(); - setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p, sameServer), (sameServer ? 1 : 500)); + setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p), (sameServer ? 1 : 500)); i++; } } @@ -245,7 +245,7 @@ public class TablistManager extends BasicListener { return team.getTeamId() <= 0 ? null : team; } - private String getTablistName(ProxiedPlayer p, boolean sameServer) { + private String getTablistName(ProxiedPlayer p) { Subserver server = Subserver.getSubserver(p); if(server != null){ String tablistName = server.getTablistNames().get(p); @@ -256,13 +256,14 @@ public class TablistManager extends BasicListener { StringBuilder st = new StringBuilder(); UserGroup group = SteamwarUser.get(p).getUserGroup(); - //else st.append("§7"); - if(group == UserGroup.Member && sameServer) - st.append("§f"); - else + if (group == UserGroup.Member) { + Team team = getTeam(player); + if (team != null && team == getTeam(p)) st.append("§f"); + else st.append("§7"); + } else { st.append(group.getColorCode()); + } - // if (!sameServer) st.append("§o"); return st.append(p.getName()).toString(); } } From 71c206e59cad16474e0fdfbe1511742ce7fdcdf9 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 15:41:26 +0200 Subject: [PATCH 018/131] Update TablistManager --- .../bungeecore/listeners/TablistManager.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index de2c98f..fc5ce7c 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -174,17 +174,10 @@ public class TablistManager extends BasicListener { server = Message.parse("TABLIST_BAU", player); setSlot(i%20, i/20, gray, "§7§l" + server, 1000); i++; - for (ProxiedPlayer p : playerMap.get(server)){ - boolean sameServer = currentServer == p.getServer().getInfo(); - setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p), (sameServer ? 1 : 500)); - i++; - } + i = update(currentServer, playerMap.get(server), i); } - while (i < size*20){ - setSlot(i%20, i/20, darkGray, "", 1000); - i++; - } + finish(i); }catch(IndexOutOfBoundsException | NullPointerException e){ //Ignore IndexOutOfBoundsException //Ignore NPE, happens sometimes (only 1s long) when somebody is joining, server switching or disconnecting @@ -223,23 +216,32 @@ public class TablistManager extends BasicListener { setSlot(i%20, i/20, gray, "§7§l" + server, 1000); i++; - for (ProxiedPlayer p : players){ - boolean sameServer = currentServer == p.getServer().getInfo(); - setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p), (sameServer ? 1 : 500)); - i++; - } + i = update(currentServer, players, i); } - while (i < size*20){ - setSlot(i%20, i/20, darkGray, "", 1000); - i++; - } + finish(i); }catch(IndexOutOfBoundsException | NullPointerException e){ //Ignore IndexOutOfBoundsException //Ignore NPE, happens sometimes (only 1s long) when somebody is joining, server switching or disconnecting } } + private int update(ServerInfo currentServer, List players, int i) { + for (ProxiedPlayer p : players){ + boolean sameServer = currentServer == p.getServer().getInfo(); + setSlot(i % 20, i / 20, BungeeTabListPlusAPI.getIconFromPlayer(p), getTablistName(p), (sameServer ? 1 : 500)); + i++; + } + return i; + } + + private void finish(int i) { + while (i < size*20){ + setSlot(i%20, i/20, darkGray, "", 1000); + i++; + } + } + private Team getTeam(ProxiedPlayer p) { Team team = Team.get(SteamwarUser.get(p).getTeam()); return team.getTeamId() <= 0 ? null : team; From 4a94f453f6da1a832f6bebfa98af26b9c27d4bd9 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 15:48:11 +0200 Subject: [PATCH 019/131] Add ListCommand for user --- src/de/steamwar/bungeecore/BungeeCore.java | 1 + .../bungeecore/commands/ListCommand.java | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/de/steamwar/bungeecore/commands/ListCommand.java diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 2344d56..8b78cb6 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -121,6 +121,7 @@ public class BungeeCore extends Plugin { new UnIgnoreCommand(); new PollresultCommand(); new ResourcereloadCommand(); + new ListCommand(); if(!EVENT_MODE){ new WebregisterCommand(); diff --git a/src/de/steamwar/bungeecore/commands/ListCommand.java b/src/de/steamwar/bungeecore/commands/ListCommand.java new file mode 100644 index 0000000..6ab37f0 --- /dev/null +++ b/src/de/steamwar/bungeecore/commands/ListCommand.java @@ -0,0 +1,71 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bungeecore.commands; + +import de.steamwar.bungeecore.Servertype; +import de.steamwar.bungeecore.Subserver; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; + +import java.util.ArrayList; +import java.util.List; +import java.util.TreeMap; +import java.util.stream.Collectors; + +public class ListCommand extends BasicCommand { + + public ListCommand() { + super("list", ""); + } + + private final TreeMap> playerMap = new TreeMap<>(); + + private synchronized void updateCustomTablist(){ + //Calculate server-player-map + playerMap.clear(); + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { + Server pserver = player.getServer(); + if (pserver == null) //Happens temporarily + continue; + + ServerInfo server = pserver.getInfo(); + String serverName = server.getName(); + + Subserver subserver = Subserver.getSubserver(server); + if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { + playerMap.computeIfAbsent("Bau", s -> new ArrayList<>()).add(player); + } else { + playerMap.computeIfAbsent(serverName, s -> new ArrayList<>()).add(player); + } + } + playerMap.forEach((server, players) -> players.sort((proxiedPlayer, t1) -> proxiedPlayer.getName().compareToIgnoreCase(t1.getName()))); + } + + @Override + public void execute(CommandSender commandSender, String[] strings) { + updateCustomTablist(); + for (String server : playerMap.navigableKeySet()) { + commandSender.sendMessage("§e" + server + "§8: §7" + playerMap.get(server).stream().map(CommandSender::getName).collect(Collectors.joining(", "))); + } + } +} From 1c9bd9fcfff0fe793527519ec88ded3f8de1a985 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 16:37:30 +0200 Subject: [PATCH 020/131] Fix TablistManager --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index fc5ce7c..c1e99d3 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -219,6 +219,7 @@ public class TablistManager extends BasicListener { i = update(currentServer, players, i); } + setSize(Math.max((i + 19) / 20, 5), 20); finish(i); }catch(IndexOutOfBoundsException | NullPointerException e){ //Ignore IndexOutOfBoundsException From 11f61f34cdfce718d47630a92c2ca0e84d088b40 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 16:41:43 +0200 Subject: [PATCH 021/131] Fix TablistManager --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index c1e99d3..7fade9c 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -219,7 +219,8 @@ public class TablistManager extends BasicListener { i = update(currentServer, players, i); } - setSize(Math.max((i + 19) / 20, 5), 20); + // Shrink Down + setSize(Math.min((i + 19) / 20, 4), 20); finish(i); }catch(IndexOutOfBoundsException | NullPointerException e){ //Ignore IndexOutOfBoundsException From 9e8a031230bda2ab597516891efd205e41e97d37 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 17:48:47 +0200 Subject: [PATCH 022/131] Make Fight Server with one Player more visible --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index 7fade9c..fd386a9 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -199,13 +199,18 @@ public class TablistManager extends BasicListener { .stream() .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || (team != null && team == getTeam(p))) .collect(Collectors.toList()); + + Subserver subserver = Subserver.getSubserver(player); if (server.equals("Bau")) { - Subserver subserver = Subserver.getSubserver(player); if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { players = playerMap.get(server); } server = Message.parse("TABLIST_BAU", player); } + if (subserver != null && subserver.getType() == Servertype.ARENA && playerMap.get(server).size() == 1) { + players = playerMap.get(server); + } + int increment = playerMap.get(server).size() - players.size(); if (players.isEmpty()) { server += " §7(" + increment + ")"; From c925aa41aca641a64aec47cab38936053004c338 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Fri, 25 Jun 2021 18:28:21 +0200 Subject: [PATCH 023/131] Fix SubserverSystem concurrency and Thread safety --- src/de/steamwar/bungeecore/SubserverSystem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/SubserverSystem.java b/src/de/steamwar/bungeecore/SubserverSystem.java index b4ffbc4..d5e85b0 100644 --- a/src/de/steamwar/bungeecore/SubserverSystem.java +++ b/src/de/steamwar/bungeecore/SubserverSystem.java @@ -89,7 +89,7 @@ public class SubserverSystem { * @return * The new started subserver. */ - public static Subserver startArena(ArenaMode modus, String map, int eventFightID, int checkSchemID, int prepareSchemID, String serverName, String mapName, UUID player1, UUID player2, boolean ranked){ + public static synchronized Subserver startArena(ArenaMode modus, String map, int eventFightID, int checkSchemID, int prepareSchemID, String serverName, String mapName, UUID player1, UUID player2, boolean ranked){ //Generate missing parameters int port = freePort(FIRST_ARENA_PORT); @@ -179,7 +179,7 @@ public class SubserverSystem { startArena(m, map, -1, checkSchemId, prepareSchemId, p.getName() + "s Bau", p.getName(), p.getUniqueId(), null, false).sendPlayer(p); } - private static void sendToBau(ProxiedPlayer p, UUID owner, String prototype, String worldFolder, String serverJar, String worldDir, String worldName, String xmx, String serverName){ + private static synchronized void sendToBau(ProxiedPlayer p, UUID owner, String prototype, String worldFolder, String serverJar, String worldDir, String worldName, String xmx, String serverName){ if(bauRunning(p, owner)) return; From fa70a46b64e12c22c0e8b42115b81fbe9e80a455 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 26 Jun 2021 08:09:23 +0200 Subject: [PATCH 024/131] Remove useless checks --- src/de/steamwar/bungeecore/commands/StatCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/commands/StatCommand.java b/src/de/steamwar/bungeecore/commands/StatCommand.java index 5422e63..506ecab 100644 --- a/src/de/steamwar/bungeecore/commands/StatCommand.java +++ b/src/de/steamwar/bungeecore/commands/StatCommand.java @@ -42,7 +42,7 @@ public class StatCommand extends BasicCommand { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); Map serverCounts = new HashMap<>(); bufferedReader.lines().forEach(s -> { - if (!s.contains("--port") || s.contains("grep")) { + if (!s.contains("--port")) { return; } String server = "SW"; From e9297fab4741d66536e29722c041c8234f5ac891 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 26 Jun 2021 10:22:55 +0200 Subject: [PATCH 025/131] Add ListCommand --- src/de/steamwar/bungeecore/BungeeCore.java | 1 + .../bungeecore/commands/ListCommand.java | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/de/steamwar/bungeecore/commands/ListCommand.java diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 2344d56..8b78cb6 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -121,6 +121,7 @@ public class BungeeCore extends Plugin { new UnIgnoreCommand(); new PollresultCommand(); new ResourcereloadCommand(); + new ListCommand(); if(!EVENT_MODE){ new WebregisterCommand(); diff --git a/src/de/steamwar/bungeecore/commands/ListCommand.java b/src/de/steamwar/bungeecore/commands/ListCommand.java new file mode 100644 index 0000000..6ab37f0 --- /dev/null +++ b/src/de/steamwar/bungeecore/commands/ListCommand.java @@ -0,0 +1,71 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bungeecore.commands; + +import de.steamwar.bungeecore.Servertype; +import de.steamwar.bungeecore.Subserver; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.connection.Server; + +import java.util.ArrayList; +import java.util.List; +import java.util.TreeMap; +import java.util.stream.Collectors; + +public class ListCommand extends BasicCommand { + + public ListCommand() { + super("list", ""); + } + + private final TreeMap> playerMap = new TreeMap<>(); + + private synchronized void updateCustomTablist(){ + //Calculate server-player-map + playerMap.clear(); + for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { + Server pserver = player.getServer(); + if (pserver == null) //Happens temporarily + continue; + + ServerInfo server = pserver.getInfo(); + String serverName = server.getName(); + + Subserver subserver = Subserver.getSubserver(server); + if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { + playerMap.computeIfAbsent("Bau", s -> new ArrayList<>()).add(player); + } else { + playerMap.computeIfAbsent(serverName, s -> new ArrayList<>()).add(player); + } + } + playerMap.forEach((server, players) -> players.sort((proxiedPlayer, t1) -> proxiedPlayer.getName().compareToIgnoreCase(t1.getName()))); + } + + @Override + public void execute(CommandSender commandSender, String[] strings) { + updateCustomTablist(); + for (String server : playerMap.navigableKeySet()) { + commandSender.sendMessage("§e" + server + "§8: §7" + playerMap.get(server).stream().map(CommandSender::getName).collect(Collectors.joining(", "))); + } + } +} From ad054d2b06b476c72d990c842a4d42af83b221e7 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 26 Jun 2021 10:23:44 +0200 Subject: [PATCH 026/131] Remove ListCommand --- src/de/steamwar/bungeecore/BungeeCore.java | 1 - .../bungeecore/commands/ListCommand.java | 71 ------------------- 2 files changed, 72 deletions(-) delete mode 100644 src/de/steamwar/bungeecore/commands/ListCommand.java diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 8b78cb6..2344d56 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -121,7 +121,6 @@ public class BungeeCore extends Plugin { new UnIgnoreCommand(); new PollresultCommand(); new ResourcereloadCommand(); - new ListCommand(); if(!EVENT_MODE){ new WebregisterCommand(); diff --git a/src/de/steamwar/bungeecore/commands/ListCommand.java b/src/de/steamwar/bungeecore/commands/ListCommand.java deleted file mode 100644 index 6ab37f0..0000000 --- a/src/de/steamwar/bungeecore/commands/ListCommand.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2020 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.bungeecore.commands; - -import de.steamwar.bungeecore.Servertype; -import de.steamwar.bungeecore.Subserver; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.config.ServerInfo; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.connection.Server; - -import java.util.ArrayList; -import java.util.List; -import java.util.TreeMap; -import java.util.stream.Collectors; - -public class ListCommand extends BasicCommand { - - public ListCommand() { - super("list", ""); - } - - private final TreeMap> playerMap = new TreeMap<>(); - - private synchronized void updateCustomTablist(){ - //Calculate server-player-map - playerMap.clear(); - for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { - Server pserver = player.getServer(); - if (pserver == null) //Happens temporarily - continue; - - ServerInfo server = pserver.getInfo(); - String serverName = server.getName(); - - Subserver subserver = Subserver.getSubserver(server); - if (subserver != null && subserver.getType() == Servertype.BAUSERVER) { - playerMap.computeIfAbsent("Bau", s -> new ArrayList<>()).add(player); - } else { - playerMap.computeIfAbsent(serverName, s -> new ArrayList<>()).add(player); - } - } - playerMap.forEach((server, players) -> players.sort((proxiedPlayer, t1) -> proxiedPlayer.getName().compareToIgnoreCase(t1.getName()))); - } - - @Override - public void execute(CommandSender commandSender, String[] strings) { - updateCustomTablist(); - for (String server : playerMap.navigableKeySet()) { - commandSender.sendMessage("§e" + server + "§8: §7" + playerMap.get(server).stream().map(CommandSender::getName).collect(Collectors.joining(", "))); - } - } -} From c253709f4ac074bf5f2413f6b8e011fbe5070920 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 26 Jun 2021 10:27:59 +0200 Subject: [PATCH 027/131] Update ListCommand to multilang --- src/de/steamwar/bungeecore/commands/ListCommand.java | 6 +++++- src/de/steamwar/messages/BungeeCore.properties | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/commands/ListCommand.java b/src/de/steamwar/bungeecore/commands/ListCommand.java index 6ab37f0..b5d2f2d 100644 --- a/src/de/steamwar/bungeecore/commands/ListCommand.java +++ b/src/de/steamwar/bungeecore/commands/ListCommand.java @@ -19,6 +19,7 @@ package de.steamwar.bungeecore.commands; +import de.steamwar.bungeecore.Message; import de.steamwar.bungeecore.Servertype; import de.steamwar.bungeecore.Subserver; import net.md_5.bungee.api.CommandSender; @@ -65,7 +66,10 @@ public class ListCommand extends BasicCommand { public void execute(CommandSender commandSender, String[] strings) { updateCustomTablist(); for (String server : playerMap.navigableKeySet()) { - commandSender.sendMessage("§e" + server + "§8: §7" + playerMap.get(server).stream().map(CommandSender::getName).collect(Collectors.joining(", "))); + if (server.equals("Bau")) { + server = Message.parse("TABLIST_BAU", commandSender); + } + Message.send("LIST_COMMAND", commandSender, server, playerMap.get(server).stream().map(CommandSender::getName).collect(Collectors.joining(", "))); } } } diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index a92b7c5..dd74cdb 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -480,6 +480,7 @@ TABLIST_PHASE_1=§8Teamspeak: §eSteam§8War.de TABLIST_PHASE_2=§8Discord: §8https://§eSteam§8War.de/discord TABLIST_PHASE_DEFAULT=§8Website: https://§eSteam§8War.de TABLIST_BAU=Bau +LIST_COMMAND=§e{0}§8: §7{1} #EventStarter EVENT_FIGHT_BROADCAST=§7Hier §eklicken §7für den Kampf §{0}{1} §8vs §{2}{3} From c750231b144a1bc7bef675766105cae7b1251e41 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sat, 26 Jun 2021 11:13:01 +0200 Subject: [PATCH 028/131] Add + to Local Chat --- .../bungeecore/listeners/ChatListener.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index b41ea78..9fd8061 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -19,10 +19,7 @@ package de.steamwar.bungeecore.listeners; -import de.steamwar.bungeecore.BungeeCore; -import de.steamwar.bungeecore.Message; -import de.steamwar.bungeecore.Servertype; -import de.steamwar.bungeecore.Subserver; +import de.steamwar.bungeecore.*; import de.steamwar.bungeecore.commands.BauCommand; import de.steamwar.bungeecore.commands.TpCommand; import de.steamwar.bungeecore.comms.packets.PingPacket; @@ -51,6 +48,8 @@ public class ChatListener extends BasicListener { sanitize7(e); if(e.getMessage().startsWith("/")) onCommand(e); + else if(e.getMessage().startsWith("+")) + onPlusMessage(e); else onChat(e); } @@ -116,6 +115,21 @@ public class ChatListener extends BasicListener { scheduler.schedule(BungeeCore.get(), () -> Message.sendPrefixless("MSG_FORMAT", sender, "YoyoNow", sender.getDisplayName(), Message.parse("CHAT_YOYONOW_4", sender)), 12, TimeUnit.SECONDS); } + private void onPlusMessage(ChatEvent e) { + ProxiedPlayer p = (ProxiedPlayer) e.getSender(); + Subserver subserver = Subserver.getSubserver(p); + if(/*subserver instanceof Bauserver*/true) { + String[] smolArgs = e.getMessage().split(" "); + String[] args = new String[smolArgs.length + 1]; + smolArgs[0] = smolArgs[0].substring(1); + args[0] = ""; + System.arraycopy(smolArgs, 0, args, 1, smolArgs.length); + localChat(e, args); + } else { + onChat(e); + } + } + private void onChat(ChatEvent e){ if(e.getSender() instanceof ProxiedPlayer){ ProxiedPlayer sender = (ProxiedPlayer) e.getSender(); From 955cb8863a0e57259e490186da07c3fa0aed2993 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sat, 26 Jun 2021 11:14:13 +0200 Subject: [PATCH 029/131] Remove Debug --- src/de/steamwar/bungeecore/listeners/ChatListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index 9fd8061..aeffc19 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -118,7 +118,7 @@ public class ChatListener extends BasicListener { private void onPlusMessage(ChatEvent e) { ProxiedPlayer p = (ProxiedPlayer) e.getSender(); Subserver subserver = Subserver.getSubserver(p); - if(/*subserver instanceof Bauserver*/true) { + if(subserver instanceof Bauserver) { String[] smolArgs = e.getMessage().split(" "); String[] args = new String[smolArgs.length + 1]; smolArgs[0] = smolArgs[0].substring(1); From 906be50771cd2ef488433d9a17ef596b4b048d3f Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 27 Jun 2021 08:10:15 +0200 Subject: [PATCH 030/131] Compress ChatListener.onPlusMessage --- src/de/steamwar/bungeecore/listeners/ChatListener.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index aeffc19..12903c0 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -119,9 +119,8 @@ public class ChatListener extends BasicListener { ProxiedPlayer p = (ProxiedPlayer) e.getSender(); Subserver subserver = Subserver.getSubserver(p); if(subserver instanceof Bauserver) { - String[] smolArgs = e.getMessage().split(" "); + String[] smolArgs = e.getMessage().substring(1).split(" "); String[] args = new String[smolArgs.length + 1]; - smolArgs[0] = smolArgs[0].substring(1); args[0] = ""; System.arraycopy(smolArgs, 0, args, 1, smolArgs.length); localChat(e, args); From 5637311be5b0e1824c31919f7b12c9b704a1864a Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 28 Jun 2021 17:06:00 +0200 Subject: [PATCH 031/131] Hotfix Tablist --- .../bungeecore/listeners/TablistManager.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index fd386a9..fd31ce2 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -69,15 +69,11 @@ public class TablistManager extends BasicListener { } } - private void calculateSize(){ + private void calculateSize() { size = -1; - for(Map.Entry> server : playerMap.entrySet()) - size += 2 + server.getValue().size(); - - size = (size+19)/20; - - if(size > 5) - size = 5; + size += playerMap.size() * 2 + ProxyServer.getInstance().getPlayers().size(); + size = (size + 19) / 20 + 1; + if(size > 5) size = 5; } private synchronized void updateCustomTablist(){ @@ -224,8 +220,6 @@ public class TablistManager extends BasicListener { i = update(currentServer, players, i); } - // Shrink Down - setSize(Math.min((i + 19) / 20, 4), 20); finish(i); }catch(IndexOutOfBoundsException | NullPointerException e){ //Ignore IndexOutOfBoundsException From 64c8af3064c5c568567e34ca583eb86b6b54bf4c Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 28 Jun 2021 17:27:29 +0200 Subject: [PATCH 032/131] Fix TablistManager --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index fd31ce2..d69a1e8 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -72,7 +72,7 @@ public class TablistManager extends BasicListener { private void calculateSize() { size = -1; size += playerMap.size() * 2 + ProxyServer.getInstance().getPlayers().size(); - size = (size + 19) / 20 + 1; + size = (size + 19) / 20; if(size > 5) size = 5; } From 47711b746ea4c15e2c0e5c62b0fd7afcc319d9d0 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 10 Jul 2021 22:04:56 +0200 Subject: [PATCH 033/131] Add DevCommand --- src/de/steamwar/bungeecore/BungeeCore.java | 1 + .../bungeecore/commands/DevCommand.java | 86 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/de/steamwar/bungeecore/commands/DevCommand.java diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index 2344d56..fe19b80 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -108,6 +108,7 @@ public class BungeeCore extends Plugin { new DenyCommand("watchcat", "wc"); new TeamCommand(); new ServerTeamchatCommand(); + new DevCommand(); new EventCommand(); new EventreloadCommand(); new EventRescheduleCommand(); diff --git a/src/de/steamwar/bungeecore/commands/DevCommand.java b/src/de/steamwar/bungeecore/commands/DevCommand.java new file mode 100644 index 0000000..c266520 --- /dev/null +++ b/src/de/steamwar/bungeecore/commands/DevCommand.java @@ -0,0 +1,86 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2020 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.bungeecore.commands; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.io.File; +import java.net.InetSocketAddress; +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.Collectors; + +public class DevCommand extends BasicCommand { + + private final File DevServerDir = new File("/configs/DevServer"); + + public DevCommand() { + super("dev", ""); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + return; + } + String[] devSever = DevServerDir.list(); + if (devSever == null || devSever.length == 0) { + sender.sendMessage("§eSteam§8War§8» §cDer Server ist derzeit nicht erreichbar."); + } else if (devSever.length == 1) { + String[] server = devSever[0].split("\\."); + sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); + } else { + if (args.length != 0) { + for (String s : devSever) { + String[] server = s.split("\\."); + if (args[0].equals(server[0])) { + sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); + return; + } + } + } + sender.sendMessage("§eSteam§8War§8» §cUnbekannter DevServer."); + } + } + + private void sendToServer(ProxiedPlayer proxiedPlayer, String name, int port) { + InetSocketAddress address = new InetSocketAddress("127.0.0.1", port); + ServerInfo serverInfo = ProxyServer.getInstance().constructServerInfo("Dev-" + name, address, "SteamWar.de - Subserver", false); + proxiedPlayer.connect(serverInfo); + } + + @Override + public Iterable onTabComplete(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + return Collections.emptyList(); + } + String[] devSever = DevServerDir.list(); + if (devSever == null) { + return Collections.emptyList(); + } + if (args.length > 1) { + return Collections.emptyList(); + } + return Arrays.stream(devSever).map(s -> s.split("\\.")).map(s -> s[0]).collect(Collectors.toList()); + } +} From b16b258ba2659b902b0ed8a05c728209c7c6962b Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 10 Jul 2021 22:38:44 +0200 Subject: [PATCH 034/131] Add DevCommand --- .../bungeecore/commands/DevCommand.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/de/steamwar/bungeecore/commands/DevCommand.java b/src/de/steamwar/bungeecore/commands/DevCommand.java index c266520..baba06d 100644 --- a/src/de/steamwar/bungeecore/commands/DevCommand.java +++ b/src/de/steamwar/bungeecore/commands/DevCommand.java @@ -28,6 +28,7 @@ import java.io.File; import java.net.InetSocketAddress; import java.util.Arrays; import java.util.Collections; +import java.util.function.Predicate; import java.util.stream.Collectors; public class DevCommand extends BasicCommand { @@ -50,19 +51,25 @@ public class DevCommand extends BasicCommand { String[] server = devSever[0].split("\\."); sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); } else { - if (args.length != 0) { - for (String s : devSever) { - String[] server = s.split("\\."); - if (args[0].equals(server[0])) { - sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); - return; - } - } + if (args.length == 0) { + send(devSever, (ProxiedPlayer) sender, s -> s.equalsIgnoreCase(((ProxiedPlayer) sender).getDisplayName()), () -> sender.sendMessage("§eSteam§8War§8» §cBitte gib einen DevServer an.")); + } else { + send(devSever, (ProxiedPlayer) sender, args[0]::equalsIgnoreCase, () -> sender.sendMessage("§eSteam§8War§8» §cDer Server ist derzeit nicht erreichbar.")); } - sender.sendMessage("§eSteam§8War§8» §cUnbekannter DevServer."); } } + private void send(String[] devServer, ProxiedPlayer sender, Predicate test, Runnable error) { + for (String s : devServer) { + String[] server = s.split("\\."); + if (test.test(server[0])) { + sendToServer(sender, server[0], Integer.parseInt(server[1])); + break; + } + } + error.run(); + } + private void sendToServer(ProxiedPlayer proxiedPlayer, String name, int port) { InetSocketAddress address = new InetSocketAddress("127.0.0.1", port); ServerInfo serverInfo = ProxyServer.getInstance().constructServerInfo("Dev-" + name, address, "SteamWar.de - Subserver", false); @@ -81,6 +88,9 @@ public class DevCommand extends BasicCommand { if (args.length > 1) { return Collections.emptyList(); } - return Arrays.stream(devSever).map(s -> s.split("\\.")).map(s -> s[0]).collect(Collectors.toList()); + return Arrays.stream(devSever).map(s -> s.split("\\.")).map(s -> s[0]).filter(s -> { + if (args.length == 0) return true; + return s.startsWith(args[0]); + }).collect(Collectors.toList()); } } From 1879f74eadfa85618fb73d265b602fbd162436a6 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sat, 10 Jul 2021 22:43:15 +0200 Subject: [PATCH 035/131] Add DevCommand --- src/de/steamwar/bungeecore/commands/DevCommand.java | 7 ++++--- src/de/steamwar/messages/BungeeCore.properties | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/de/steamwar/bungeecore/commands/DevCommand.java b/src/de/steamwar/bungeecore/commands/DevCommand.java index baba06d..5daa909 100644 --- a/src/de/steamwar/bungeecore/commands/DevCommand.java +++ b/src/de/steamwar/bungeecore/commands/DevCommand.java @@ -19,6 +19,7 @@ package de.steamwar.bungeecore.commands; +import de.steamwar.bungeecore.Message; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; @@ -46,15 +47,15 @@ public class DevCommand extends BasicCommand { } String[] devSever = DevServerDir.list(); if (devSever == null || devSever.length == 0) { - sender.sendMessage("§eSteam§8War§8» §cDer Server ist derzeit nicht erreichbar."); + Message.send("DEV_NO_SERVER", sender); } else if (devSever.length == 1) { String[] server = devSever[0].split("\\."); sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); } else { if (args.length == 0) { - send(devSever, (ProxiedPlayer) sender, s -> s.equalsIgnoreCase(((ProxiedPlayer) sender).getDisplayName()), () -> sender.sendMessage("§eSteam§8War§8» §cBitte gib einen DevServer an.")); + send(devSever, (ProxiedPlayer) sender, s -> s.equalsIgnoreCase(((ProxiedPlayer) sender).getDisplayName()), () -> Message.send("DEV_UNKNOWN_SERVER", sender)); } else { - send(devSever, (ProxiedPlayer) sender, args[0]::equalsIgnoreCase, () -> sender.sendMessage("§eSteam§8War§8» §cDer Server ist derzeit nicht erreichbar.")); + send(devSever, (ProxiedPlayer) sender, args[0]::equalsIgnoreCase, () -> Message.send("DEV_NO_SERVER", sender)); } } } diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index a92b7c5..06fdc7f 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -9,6 +9,9 @@ INVALID_TIME=§cUngültige Zeitangabe. STEAMWAR_BRAND=§eSteam§8War.de §7({0}) §r<- §e{1} §7({2})§r +DEV_NO_SERVER=§cDer Server ist derzeit nicht erreichbar. +DEV_UNKNOWN_SERVER=§cBitte gib einen DevServer an. + #ModLoader blocker MODLOADER_INSTALLED=§7Du hast §e{0} §7installiert. Daher kannst du keinen Arenen beitreten. MODLOADER_DENIED=§cMit Fabric, Forge und LiteLoader kannst du keinen Arenen beitreten. From 86664ea399ab5dcc916d39b1dcb78d82997f6e98 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 11 Jul 2021 08:24:54 +0200 Subject: [PATCH 036/131] Fix Typo --- src/de/steamwar/bungeecore/commands/DevCommand.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/de/steamwar/bungeecore/commands/DevCommand.java b/src/de/steamwar/bungeecore/commands/DevCommand.java index 5daa909..7e5ed2d 100644 --- a/src/de/steamwar/bungeecore/commands/DevCommand.java +++ b/src/de/steamwar/bungeecore/commands/DevCommand.java @@ -45,17 +45,17 @@ public class DevCommand extends BasicCommand { if (!(sender instanceof ProxiedPlayer)) { return; } - String[] devSever = DevServerDir.list(); - if (devSever == null || devSever.length == 0) { + String[] devServer = DevServerDir.list(); + if (devServer == null || devServer.length == 0) { Message.send("DEV_NO_SERVER", sender); - } else if (devSever.length == 1) { - String[] server = devSever[0].split("\\."); + } else if (devServer.length == 1) { + String[] server = devServer[0].split("\\."); sendToServer((ProxiedPlayer) sender, server[0], Integer.parseInt(server[1])); } else { if (args.length == 0) { - send(devSever, (ProxiedPlayer) sender, s -> s.equalsIgnoreCase(((ProxiedPlayer) sender).getDisplayName()), () -> Message.send("DEV_UNKNOWN_SERVER", sender)); + send(devServer, (ProxiedPlayer) sender, s -> s.equalsIgnoreCase(((ProxiedPlayer) sender).getDisplayName()), () -> Message.send("DEV_UNKNOWN_SERVER", sender)); } else { - send(devSever, (ProxiedPlayer) sender, args[0]::equalsIgnoreCase, () -> Message.send("DEV_NO_SERVER", sender)); + send(devServer, (ProxiedPlayer) sender, args[0]::equalsIgnoreCase, () -> Message.send("DEV_NO_SERVER", sender)); } } } From c8bc438b0c96c0241211954692413cde0a674a57 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 11 Jul 2021 13:02:30 +0200 Subject: [PATCH 037/131] Hotfix color codes for WGS winners --- src/de/steamwar/bungeecore/listeners/ChatListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index b41ea78..b850835 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -157,7 +157,7 @@ public class ChatListener extends BasicListener { String name = sender.getDisplayName(); String chatcolor = user.getUserGroup().getChatColorCode(); - if(user.getUserGroup() != UserGroup.Member) + if(user.getUserGroup() != UserGroup.Member || user.getTeam() == 12 || user.getTeam() == 285 || user.getTeam() == 54) message = ChatColor.translateAlternateColorCodes('&', message); String msg = name + "§7»" + chatcolor + " " + message; From 587395002a1ec2016bf32327211a17c8bad22f46 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Sun, 11 Jul 2021 13:23:29 +0200 Subject: [PATCH 038/131] Better 7 sanitize --- src/de/steamwar/bungeecore/listeners/ChatListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/de/steamwar/bungeecore/listeners/ChatListener.java b/src/de/steamwar/bungeecore/listeners/ChatListener.java index b850835..65b7e89 100644 --- a/src/de/steamwar/bungeecore/listeners/ChatListener.java +++ b/src/de/steamwar/bungeecore/listeners/ChatListener.java @@ -64,6 +64,10 @@ public class ChatListener extends BasicListener { e.setMessage("/" + e.getMessage().substring(1)); }else if(begin.startsWith("77") && begin.substring(2).matches("[A-Za-z]+")){ e.setMessage("//" + e.getMessage().substring(2)); + }else if(begin.startsWith("7/") && begin.substring(2).matches("[A-Za-z]+")){ + e.setMessage("//" + e.getMessage().substring(2)); + }else if(begin.startsWith("/7") && begin.substring(2).matches("[A-Za-z]+")){ + e.setMessage("//" + e.getMessage().substring(2)); } } From d1b764eb8856fdcf7f4997fefe7585297ca866c7 Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 12 Jul 2021 09:32:13 +0200 Subject: [PATCH 039/131] Hotfix StatCommand for no stats --- src/de/steamwar/bungeecore/commands/StatCommand.java | 3 +++ src/de/steamwar/messages/BungeeCore.properties | 1 + 2 files changed, 4 insertions(+) diff --git a/src/de/steamwar/bungeecore/commands/StatCommand.java b/src/de/steamwar/bungeecore/commands/StatCommand.java index 506ecab..1488dbf 100644 --- a/src/de/steamwar/bungeecore/commands/StatCommand.java +++ b/src/de/steamwar/bungeecore/commands/StatCommand.java @@ -58,6 +58,9 @@ public class StatCommand extends BasicCommand { Message.send("STAT_SERVER", sender, s.toUpperCase(), LoadEvaluation.getRemoteRamPercentage(s), LoadEvaluation.getRemoteCPULoad(s), integer); } }); + if (serverCounts.isEmpty()) { + Message.send("NO_STATS", sender); + } } catch (Exception e) { throw new SecurityException(e.getMessage(), e); } diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index eab98a5..9f3e701 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -108,6 +108,7 @@ MOD_YELLOW_PLUR=§7Deaktiviere die Mods\n§e{0}\n§7um weiter auf §eSteam§8War #Various commands ALERT=§f{0} STAT_SERVER=§7Server §f{0} - §7Ram §f{1} §7CPU §f{2} §7Server Count §f{3} +NO_STATS=§7Es gibt keine Statistiken, da keine Server online sind #Ban&Mute-Command BAN_TEAM_BANNED={0} §c{1} wurde von {2} {3} gebannt. §f§lGrund: §f{4} From 73940661c92dde73958040e2dbc837434322d75b Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 12 Jul 2021 09:32:58 +0200 Subject: [PATCH 040/131] Hotfix StatCommand for no stats --- src/de/steamwar/messages/BungeeCore.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index 9f3e701..66acfd5 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -108,7 +108,7 @@ MOD_YELLOW_PLUR=§7Deaktiviere die Mods\n§e{0}\n§7um weiter auf §eSteam§8War #Various commands ALERT=§f{0} STAT_SERVER=§7Server §f{0} - §7Ram §f{1} §7CPU §f{2} §7Server Count §f{3} -NO_STATS=§7Es gibt keine Statistiken, da keine Server online sind +NO_STATS=§7Es gibt keine Statistiken, da keine Server gestartet sind #Ban&Mute-Command BAN_TEAM_BANNED={0} §c{1} wurde von {2} {3} gebannt. §f§lGrund: §f{4} From 4a4f185c81875c917c3a59d699e21365890fda4d Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 12 Jul 2021 09:33:54 +0200 Subject: [PATCH 041/131] Hotfix StatCommand for no stats --- src/de/steamwar/messages/BungeeCore.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/messages/BungeeCore.properties b/src/de/steamwar/messages/BungeeCore.properties index 66acfd5..669ea67 100644 --- a/src/de/steamwar/messages/BungeeCore.properties +++ b/src/de/steamwar/messages/BungeeCore.properties @@ -108,7 +108,7 @@ MOD_YELLOW_PLUR=§7Deaktiviere die Mods\n§e{0}\n§7um weiter auf §eSteam§8War #Various commands ALERT=§f{0} STAT_SERVER=§7Server §f{0} - §7Ram §f{1} §7CPU §f{2} §7Server Count §f{3} -NO_STATS=§7Es gibt keine Statistiken, da keine Server gestartet sind +NO_STATS=§7Kein Bau oder Fight Server gestartet #Ban&Mute-Command BAN_TEAM_BANNED={0} §c{1} wurde von {2} {3} gebannt. §f§lGrund: §f{4} From 91e5733a00c9fb226693c987b3b1b0704ff5715e Mon Sep 17 00:00:00 2001 From: yoyosource Date: Mon, 26 Jul 2021 20:47:48 +0200 Subject: [PATCH 042/131] Fix TablistManager --- src/de/steamwar/bungeecore/listeners/TablistManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/de/steamwar/bungeecore/listeners/TablistManager.java b/src/de/steamwar/bungeecore/listeners/TablistManager.java index d69a1e8..8c83b10 100644 --- a/src/de/steamwar/bungeecore/listeners/TablistManager.java +++ b/src/de/steamwar/bungeecore/listeners/TablistManager.java @@ -193,7 +193,7 @@ public class TablistManager extends BasicListener { Team team = getTeam(player); List players = playerMap.get(server) .stream() - .filter(p -> p.getServer().getInfo() == currentServer || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || (team != null && team == getTeam(p))) + .filter(p -> (p.getServer() != null && p.getServer().getInfo() == currentServer) || SteamwarUser.get(p).getUserGroup() != UserGroup.Member || (team != null && team == getTeam(p))) .collect(Collectors.toList()); Subserver subserver = Subserver.getSubserver(player); From 01cf6fdb586b2b962bf791aebc4e539903e5e235 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 28 Jul 2021 15:06:40 +0200 Subject: [PATCH 043/131] Add DiscordBot --- pom.xml | 39 ++++++++++ src/de/steamwar/bungeecore/BungeeCore.java | 4 ++ .../bungeecore/bot/SteamwarDiscordBot.java | 70 ++++++++++++++++++ .../bungeecore/bot/config/DiscordRole.java | 39 ++++++++++ .../bot/config/DiscordRulesLink.java | 36 ++++++++++ .../bot/config/SteamwarDiscordBotConfig.java | 71 +++++++++++++++++++ .../bot/listeners/BasicDiscordListener.java | 30 ++++++++ .../RolesInteractionButtonListener.java | 41 +++++++++++ .../bot/util/DiscordRolesMessage.java | 51 +++++++++++++ .../bot/util/DiscordRulesMessage.java | 57 +++++++++++++++ 10 files changed, 438 insertions(+) create mode 100644 src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java create mode 100644 src/de/steamwar/bungeecore/bot/config/DiscordRole.java create mode 100644 src/de/steamwar/bungeecore/bot/config/DiscordRulesLink.java create mode 100644 src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java create mode 100644 src/de/steamwar/bungeecore/bot/listeners/BasicDiscordListener.java create mode 100644 src/de/steamwar/bungeecore/bot/listeners/RolesInteractionButtonListener.java create mode 100644 src/de/steamwar/bungeecore/bot/util/DiscordRolesMessage.java create mode 100644 src/de/steamwar/bungeecore/bot/util/DiscordRulesMessage.java diff --git a/pom.xml b/pom.xml index dbf2760..8bb101a 100644 --- a/pom.xml +++ b/pom.xml @@ -35,10 +35,31 @@ 8 + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + + package + + shade + + + + bungeecore + + + dv8tion + m2-dv8tion + https://m2.dv8tion.net/releases + + + steamwar @@ -61,5 +82,23 @@ system ${main.basedir}/lib/BungeeTabListPlus.jar + + net.dv8tion + JDA + 4.3.0_299 + compile + + + club.minnced + opus-java + + + + + org.projectlombok + lombok + 1.18.20 + provided + \ No newline at end of file diff --git a/src/de/steamwar/bungeecore/BungeeCore.java b/src/de/steamwar/bungeecore/BungeeCore.java index f0a8bb7..72e5839 100644 --- a/src/de/steamwar/bungeecore/BungeeCore.java +++ b/src/de/steamwar/bungeecore/BungeeCore.java @@ -19,6 +19,8 @@ package de.steamwar.bungeecore; +import de.steamwar.bungeecore.bot.SteamwarDiscordBot; +import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; import de.steamwar.bungeecore.commands.*; import de.steamwar.bungeecore.comms.SpigotReceiver; import de.steamwar.bungeecore.listeners.*; @@ -141,6 +143,7 @@ public class BungeeCore extends Plugin { new EventStarter(); new SessionManager(); new SpigotReceiver(); + new SteamwarDiscordBot(); new TablistManager(); getProxy().getScheduler().schedule(this, () -> { @@ -254,6 +257,7 @@ public class BungeeCore extends Plugin { ); ArenaMode.init(config.getSection("games")); + SteamwarDiscordBotConfig.loadConfig(config.getSection("discord")); final Configuration servers = config.getSection("servers"); for(final String serverName : servers.getKeys()){ diff --git a/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java new file mode 100644 index 0000000..91ab97f --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/SteamwarDiscordBot.java @@ -0,0 +1,70 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot; + +import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; +import de.steamwar.bungeecore.bot.listeners.RolesInteractionButtonListener; +import de.steamwar.bungeecore.bot.util.DiscordRolesMessage; +import de.steamwar.bungeecore.bot.util.DiscordRulesMessage; +import lombok.Getter; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; +import net.dv8tion.jda.api.OnlineStatus; +import net.dv8tion.jda.api.entities.Activity; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +import javax.security.auth.login.LoginException; + +public class SteamwarDiscordBot { + + private static SteamwarDiscordBot INSTANCE; + + public static SteamwarDiscordBot instance() { + return INSTANCE; + } + + @Getter + private final JDA jda; + + public SteamwarDiscordBot() { + INSTANCE = this; + JDABuilder builder = JDABuilder.createDefault(SteamwarDiscordBotConfig.TOKEN); + builder.setActivity(Activity.playing("auf Steamwar.de")); + builder.setStatus(OnlineStatus.ONLINE); + try { + jda = builder.build(); + } catch (LoginException e) { + throw new SecurityException("Could not Login: " + SteamwarDiscordBotConfig.TOKEN, e); + } + try { + jda.awaitReady(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + DiscordRolesMessage.sendMessage(); + DiscordRulesMessage.sendMessage(); + + new RolesInteractionButtonListener(); + } + + public void addListener(ListenerAdapter listenerAdapter) { + jda.addEventListener(listenerAdapter); + } +} diff --git a/src/de/steamwar/bungeecore/bot/config/DiscordRole.java b/src/de/steamwar/bungeecore/bot/config/DiscordRole.java new file mode 100644 index 0000000..68b57be --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/config/DiscordRole.java @@ -0,0 +1,39 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import net.dv8tion.jda.api.entities.Emoji; +import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.interactions.components.ButtonStyle; + +@Data +@AllArgsConstructor +public class DiscordRole { + + private String emoji; + private String label; + private String roleId; + + public Button toButton() { + return Button.of(ButtonStyle.SECONDARY, roleId, label, Emoji.fromUnicode(emoji)); + } +} diff --git a/src/de/steamwar/bungeecore/bot/config/DiscordRulesLink.java b/src/de/steamwar/bungeecore/bot/config/DiscordRulesLink.java new file mode 100644 index 0000000..4f2ebe0 --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/config/DiscordRulesLink.java @@ -0,0 +1,36 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import net.dv8tion.jda.api.interactions.components.Button; + +@Data +@AllArgsConstructor +public class DiscordRulesLink { + + private String label; + private String link; + + public Button toButton() { + return Button.link(link, label); + } +} diff --git a/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java new file mode 100644 index 0000000..b1baaee --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/config/SteamwarDiscordBotConfig.java @@ -0,0 +1,71 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.config; + +import net.md_5.bungee.config.Configuration; + +import java.util.ArrayList; +import java.util.List; + +public class SteamwarDiscordBotConfig { + + public static String TOKEN; + public static String GUILD; + public static String ROLES_CHANNEL; + public static String ROLES_BASE_MESSAGE; + public static String ROLES_ADDED; + public static String ROLES_REMOVED; + public static List ROLES; + public static String RULES_CHANNEL; + public static String RULES_TITLE; + public static List RULES_RULES; + public static List RULES_LINKS; + + public static void loadConfig(Configuration config) { + TOKEN = config.getString("token"); + GUILD = config.getString("guild"); + Configuration rolesSection = config.getSection("roles-claim"); + ROLES_CHANNEL = rolesSection.getString("channel"); + ROLES_BASE_MESSAGE = rolesSection.getString("base"); + ROLES_ADDED = rolesSection.getString("added"); + ROLES_REMOVED = rolesSection.getString("removed"); + ROLES = new ArrayList<>(); + + for (String roles : rolesSection.getSection("roles").getKeys()) { + Configuration role = rolesSection.getSection("roles").getSection(roles); + ROLES.add(new DiscordRole(role.getString("emoji"), + role.getString("label"), + role.getString("roleId"))); + } + + Configuration rulesSection = config.getSection("rules"); + RULES_CHANNEL = rulesSection.getString("channel"); + RULES_TITLE = rulesSection.getString("title"); + RULES_RULES = rulesSection.getStringList("rules"); + + RULES_LINKS = new ArrayList<>(); + + for (String links : rulesSection.getSection("links").getKeys()) { + Configuration link = rulesSection.getSection("links").getSection(links); + RULES_LINKS.add(new DiscordRulesLink(link.getString("label"), + link.getString("url"))); + } + } +} diff --git a/src/de/steamwar/bungeecore/bot/listeners/BasicDiscordListener.java b/src/de/steamwar/bungeecore/bot/listeners/BasicDiscordListener.java new file mode 100644 index 0000000..1c8a5ff --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/listeners/BasicDiscordListener.java @@ -0,0 +1,30 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.listeners; + +import de.steamwar.bungeecore.bot.SteamwarDiscordBot; +import net.dv8tion.jda.api.hooks.ListenerAdapter; + +public abstract class BasicDiscordListener extends ListenerAdapter { + + BasicDiscordListener() { + SteamwarDiscordBot.instance().addListener(this); + } +} diff --git a/src/de/steamwar/bungeecore/bot/listeners/RolesInteractionButtonListener.java b/src/de/steamwar/bungeecore/bot/listeners/RolesInteractionButtonListener.java new file mode 100644 index 0000000..0790a07 --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/listeners/RolesInteractionButtonListener.java @@ -0,0 +1,41 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.listeners; + +import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; +import net.dv8tion.jda.api.events.interaction.GenericComponentInteractionCreateEvent; +import net.dv8tion.jda.api.interactions.InteractionType; +import org.jetbrains.annotations.NotNull; + +public class RolesInteractionButtonListener extends BasicDiscordListener { + + @Override + public void onGenericComponentInteractionCreate(@NotNull GenericComponentInteractionCreateEvent event) { + if(event.getType() == InteractionType.COMPONENT && event.getTextChannel().getId().equals(SteamwarDiscordBotConfig.ROLES_CHANNEL) && SteamwarDiscordBotConfig.ROLES.stream().anyMatch(discordRole -> discordRole.getRoleId().equals(event.getComponentId()))) { + if (event.getMember().getRoles().stream().anyMatch(role -> role.getId().equals(event.getComponentId()))) { + event.getGuild().removeRoleFromMember(event.getMember(), event.getGuild().getRoleById(event.getComponentId())).complete(); + event.reply(SteamwarDiscordBotConfig.ROLES_REMOVED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).complete(); + } else { + event.getGuild().addRoleToMember(event.getMember(), event.getGuild().getRoleById(event.getComponentId())).complete(); + event.reply(SteamwarDiscordBotConfig.ROLES_ADDED.replace("%role%", event.getGuild().getRoleById(event.getComponentId()).getAsMention())).setEphemeral(true).complete(); + } + } + } +} diff --git a/src/de/steamwar/bungeecore/bot/util/DiscordRolesMessage.java b/src/de/steamwar/bungeecore/bot/util/DiscordRolesMessage.java new file mode 100644 index 0000000..deb65ed --- /dev/null +++ b/src/de/steamwar/bungeecore/bot/util/DiscordRolesMessage.java @@ -0,0 +1,51 @@ +/* + This file is a part of the SteamWar software. + + Copyright (C) 2020 SteamWar.de-Serverteam + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +package de.steamwar.bungeecore.bot.util; + +import de.steamwar.bungeecore.bot.SteamwarDiscordBot; +import de.steamwar.bungeecore.bot.config.SteamwarDiscordBotConfig; +import net.dv8tion.jda.api.MessageBuilder; +import net.dv8tion.jda.api.entities.TextChannel; +import net.dv8tion.jda.api.interactions.components.ActionRow; +import net.dv8tion.jda.api.interactions.components.Button; +import net.dv8tion.jda.api.requests.restaction.MessageAction; + +import java.util.ArrayList; +import java.util.List; + +public class DiscordRolesMessage { + + public static void sendMessage() { + TextChannel channel = SteamwarDiscordBot.instance().getJda().getGuildById(SteamwarDiscordBotConfig.GUILD).getTextChannelById(SteamwarDiscordBotConfig.ROLES_CHANNEL); + assert channel != null; + if(channel.hasLatestMessage()) { + channel.getIterableHistory().complete().forEach(message -> message.delete().complete()); + } + + MessageBuilder builder = new MessageBuilder(); + builder.setContent(SteamwarDiscordBotConfig.ROLES_BASE_MESSAGE); + List