diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/out/artifacts/BungeeQueue_jar/BungeeQueue.jar b/out/artifacts/BungeeQueue_jar/BungeeQueue.jar index 69bb975..34be4a3 100644 Binary files a/out/artifacts/BungeeQueue_jar/BungeeQueue.jar and b/out/artifacts/BungeeQueue_jar/BungeeQueue.jar differ diff --git a/out/production/BungeeQueue/config.example.yml b/out/production/BungeeQueue/config.example.yml new file mode 100644 index 0000000..0c53741 --- /dev/null +++ b/out/production/BungeeQueue/config.example.yml @@ -0,0 +1,6 @@ +queueServer: "queue" +targetServer: "server" +maxPlayers: 50 + +enforceDefaultTimeout: 30 + diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class index 7773d13..d1bf7a5 100644 Binary files a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class and b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/BungeeQueue.class differ diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class index 072b048..ef630ce 100644 Binary files a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class and b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers$1.class differ diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class index f7004e0..3b4c271 100644 Binary files a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class and b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.class differ diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class index 75ee954..fa448a4 100644 Binary files a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class and b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.class differ diff --git a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class index 052d84b..c9042eb 100644 Binary files a/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class and b/out/production/BungeeQueue/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.class differ diff --git a/out/production/BungeeQueue/plugin.yml b/out/production/BungeeQueue/plugin.yml index 86d0427..db030b9 100644 --- a/out/production/BungeeQueue/plugin.yml +++ b/out/production/BungeeQueue/plugin.yml @@ -1,3 +1,4 @@ name: BungeeQueue main: eu.mhsl.minecraft.bungeequeue.BungeeQueue -version: 0.1 \ No newline at end of file +version: 0.1 +author: MineTec \ No newline at end of file diff --git a/src/config.example.yml b/src/config.example.yml new file mode 100644 index 0000000..0c53741 --- /dev/null +++ b/src/config.example.yml @@ -0,0 +1,6 @@ +queueServer: "queue" +targetServer: "server" +maxPlayers: 50 + +enforceDefaultTimeout: 30 + diff --git a/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java index 0070374..3425b3f 100644 --- a/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java +++ b/src/eu/mhsl/minecraft/bungeequeue/BungeeQueue.java @@ -9,7 +9,14 @@ 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.plugin.Plugin; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -19,29 +26,63 @@ public class BungeeQueue extends Plugin { public static ServerInfo queueServer; public static ServerInfo targetServer; - public static int maxPlayers = 1; //mutable per command + public static int maxPlayers = 1; //mutable per command and config + + public static Configuration conf; + public static File dataFolder; public static List<ProxiedPlayer> list = new ArrayList<>(); @Override public void onEnable() { plugin = this; + dataFolder = getDataFolder(); + + try { + if(!dataFolder.exists()) dataFolder.mkdir(); + File configFile = new File(dataFolder, "config.yml"); + if(!configFile.exists()) { + try(InputStream in = getResourceAsStream("config.example.yml")) { + Files.copy(in, configFile.toPath()); + } catch(IOException e) { + e.printStackTrace(); + } + } + + conf = ConfigurationProvider.getProvider(YamlConfiguration.class).load(new File(dataFolder, "config.yml")); + maxPlayers = conf.getInt("maxPlayers"); + } catch(IOException e) { + e.printStackTrace(); + } + ProxyServer instance = ProxyServer.getInstance(); - queueServer = instance.getServerInfo("queue"); - targetServer = instance.getServerInfo("server"); + queueServer = instance.getServerInfo(conf.getString("queueServer")); + targetServer = instance.getServerInfo(conf.getString("targetServer")); instance.getPluginManager().registerListener(this, new PlayerJoin()); instance.getPluginManager().registerCommand(this, new MaxPlayers()); instance.getScheduler().schedule(this, new MoveToTarget(), 5, 1, TimeUnit.SECONDS); - instance.getScheduler().schedule(this, new QueueInfoMessager(), 5, 2, TimeUnit.SECONDS); + instance.getScheduler().schedule(this, new QueueInfoMessager(), 1, 2, TimeUnit.SECONDS); instance.getScheduler().schedule(this, new PlayersWaitingCheck(), 10, 10, TimeUnit.SECONDS); } public void onDisable() { + ProxyServer.getInstance().getPluginManager().unregisterListeners(this); + ProxyServer.getInstance().getPluginManager().unregisterCommands(this); + saveConfig(); + } + public static boolean saveConfig() { + try { + ConfigurationProvider.getProvider(YamlConfiguration.class).save(conf, new File(dataFolder, "config.yml")); + return true; + } catch(IOException e) { + e.printStackTrace(); + return false; + } } } diff --git a/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java index daaddb6..4443cb4 100644 --- a/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java +++ b/src/eu/mhsl/minecraft/bungeequeue/command/MaxPlayers.java @@ -27,21 +27,23 @@ public class MaxPlayers extends Command { case "set": if(strings.length == 2) { BungeeQueue.maxPlayers = Integer.parseInt(strings[1]); + BungeeQueue.conf.set("maxPlayers", BungeeQueue.maxPlayers); + BungeeQueue.saveConfig(); p.sendMessage(new ComponentBuilder("Die Maximale Spieleranzahl wurde auf " + strings[1] + " gesetzt.").color(ChatColor.GREEN).create()); } else p.sendMessage(new ComponentBuilder("Bitte definiere die maximale Spieleranzahl: /maxplayers set <amount> ").color(ChatColor.RED).create()); break; case "query": - p.sendMessage(new ComponentBuilder("Die aktuelle Spielerzahl ist " + BungeeQueue.maxPlayers).color(ChatColor.GREEN) + p.sendMessage(new ComponentBuilder("Die aktuelle Spieleranzahl ist " + BungeeQueue.maxPlayers).color(ChatColor.GREEN) .append("\n... davon belegt " + BungeeQueue.targetServer.getPlayers().size()).color(ChatColor.GREEN) - .append("\ndu kannst 'enforce' nutzen, um eine Überbelegung zu verhindern.").color(ChatColor.RED) + .append("\nDu kannst 'enforce' nutzen, um eine Überbelegung zu verhindern.").color(ChatColor.RED) .create() ); break; case "enforce": - if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : 30)) - p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl wird durchgesetzt...").color(ChatColor.GREEN).create()); + if(enforceMaxPlayer(strings.length == 2 ? Integer.parseInt(strings[1]) : BungeeQueue.conf.getInt("enforceDefaultTimeout"))) + p.sendMessage(new ComponentBuilder("Die maximale Spieleranzahl wird durchgesetzt...").color(ChatColor.GREEN).create()); else - p.sendMessage(new ComponentBuilder("Die maximale Spielerzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create()); + p.sendMessage(new ComponentBuilder("Die maximale Spieleranzahl ist nicht erreicht und kann somit auch nicht durchgesetzt werden!").color(ChatColor.RED).create()); break; case "bypass": if(strings.length > 2) { @@ -74,8 +76,8 @@ public class MaxPlayers extends Command { evaluatedPlayers.add(players.get(i)); players.get(i).sendMessage(new ComponentBuilder("\n\n>> Achtung >> \n").bold(true).color(ChatColor.RED) - .append("Aufgrund eines zu hohen Spieleraufkommens werden zufällige Spieler vom Server gekickt.\n Begebe dich an einen sicheren Ort.\n").color(ChatColor.GOLD) - .append("Du wirst in " + timeout + " sekunden in die Queue verschoben!\n\n").color(ChatColor.RED) + .append("Aufgrund eines zu hohen Spieleraufkommens, das Lags erzeugt, werden zufällige Spieler vom Server gekickt.\n Begebe dich an einen sicheren Ort.\n").color(ChatColor.GOLD) + .append("Du wirst in " + timeout + " Sekunden in die Warteschlange verschoben!\n\n").color(ChatColor.RED) .create() ); } @@ -85,7 +87,7 @@ public class MaxPlayers extends Command { public void run() { for(ProxiedPlayer p : evaluatedPlayers) { p.connect(BungeeQueue.queueServer); - p.sendMessage(new ComponentBuilder("Du wurdest wie angekündigt aufgrund einer zu hohen Spielerzahl zurück in die Queue versetzt. Die Auswahl dich zu verschieben war Zufällig. Sorry - gönn dir eine Pause!").color(ChatColor.GOLD).create()); + p.sendMessage(new ComponentBuilder("Du wurdest wie angekündigt aufgrund eines zu hohen Spieleraufkommens zurück in die Warteschlange versetzt. Die Auswahl Dich zu verschieben war zufällig. Sorry!").color(ChatColor.GOLD).create()); } } }, timeout, TimeUnit.SECONDS); diff --git a/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java index b1e423d..e4fa2dd 100644 --- a/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java +++ b/src/eu/mhsl/minecraft/bungeequeue/listener/PlayerJoin.java @@ -10,7 +10,11 @@ import net.md_5.bungee.event.EventHandler; public class PlayerJoin implements Listener { @EventHandler public void onPlayerJoin(PostLoginEvent e) { - e.getPlayer().sendMessage(new ComponentBuilder("Du wurdest zur Queue hinzugefügt!").color(ChatColor.DARK_AQUA).create()); + e.getPlayer().sendMessage(new ComponentBuilder("Hey,\nDu befindest dich gerade in der Warteschlange des ").color(ChatColor.GOLD) + .append(" CraftAttack 4 ").color(ChatColor.AQUA) + .append("Servers.\nÜber deiner Hotbar siehst Du deinen aktuellen Platz in der Warteschlange. Wir entschuldigen, dass Du hier warten musst, aber um den Server lagfrei zu betreiben ist dies unerlässlich.").color(ChatColor.GOLD) + .create() + ); BungeeQueue.list.add(e.getPlayer()); } } diff --git a/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java index 936ee7f..ceb2caf 100644 --- a/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java +++ b/src/eu/mhsl/minecraft/bungeequeue/scheduler/QueueInfoMessager.java @@ -10,6 +10,7 @@ public class QueueInfoMessager implements Runnable { @Override public void run() { for(ProxiedPlayer p : BungeeQueue.list) { + int percent = (int) Math.abs(((((float) (BungeeQueue.list.indexOf(p)+1) / (BungeeQueue.list.size()+1)) * 100))-100); p.sendMessage( ChatMessageType.ACTION_BAR, new ComponentBuilder("Warteschlange platz ").color(ChatColor.DARK_GREEN) @@ -17,7 +18,7 @@ public class QueueInfoMessager implements Runnable { .append(" / ").bold(false).color(ChatColor.DARK_GREEN) .append(BungeeQueue.list.size()+"").bold(true).color(ChatColor.GREEN) .append(" - (").color(ChatColor.GRAY) - .append("" + ((BungeeQueue.list.indexOf(p) / BungeeQueue.list.size()) * 100)) + .append("" + percent) .append("%)") .create() ); diff --git a/src/plugin.yml b/src/plugin.yml index 86d0427..db030b9 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,3 +1,4 @@ name: BungeeQueue main: eu.mhsl.minecraft.bungeequeue.BungeeQueue -version: 0.1 \ No newline at end of file +version: 0.1 +author: MineTec \ No newline at end of file