From 22ee1522c1765041f0bb62cc52078be467d8f965 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Thu, 5 Sep 2013 02:11:47 -0700 Subject: [PATCH] Added DynamicServer for bungee. Added reload commands for balancer, dynamicserver, playercount. Added depends for lboby on dynamic server. --- .../Mineplex.Bungee.DynamicServer/.classpath | 7 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 +++ .../Mineplex.Bungee.DynamicServer/plugin.yml | 4 + .../bungee/dynamicServer/DynamicServer.java | 87 ++++++++++++++++++ .../ReloadServerListCommand.java | 24 +++++ .../Mineplex.Bungee.LobbyBalancer/plugin.yml | 1 + .../bungee/lobbyBalancer/LobbyBalancer.java | 12 ++- .../ReloadLobbyServerListCommand.java | 24 +++++ Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 9 files changed, 166 insertions(+), 4 deletions(-) create mode 100644 Plugins/Mineplex.Bungee.DynamicServer/.classpath create mode 100644 Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs create mode 100644 Plugins/Mineplex.Bungee.DynamicServer/plugin.yml create mode 100644 Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java create mode 100644 Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java create mode 100644 Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java diff --git a/Plugins/Mineplex.Bungee.DynamicServer/.classpath b/Plugins/Mineplex.Bungee.DynamicServer/.classpath new file mode 100644 index 000000000..fbeb69b51 --- /dev/null +++ b/Plugins/Mineplex.Bungee.DynamicServer/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/Plugins/Mineplex.Bungee.DynamicServer/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml b/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml new file mode 100644 index 000000000..e3bb9f3ea --- /dev/null +++ b/Plugins/Mineplex.Bungee.DynamicServer/plugin.yml @@ -0,0 +1,4 @@ +name: DynamicServer +main: mineplex.bungee.dynamicServer.DynamicServer +version: 1 +author: defek7 diff --git a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java b/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java new file mode 100644 index 000000000..c876dc0a8 --- /dev/null +++ b/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/DynamicServer.java @@ -0,0 +1,87 @@ +package mineplex.bungee.dynamicServer; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.InetSocketAddress; + +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.api.plugin.Plugin; + +public class DynamicServer extends Plugin implements Listener +{ + @Override + public void onEnable() + { + LoadServers(); + + getProxy().getPluginManager().registerListener(this, this); + getProxy().getPluginManager().registerCommand(this, new ReloadServerListCommand(this)); + } + + public void LoadServers() + { + FileInputStream fstream = null; + BufferedReader br = null; + + try + { + File npcFile = new File("servers.dat"); + + if (npcFile.exists()) + { + fstream = new FileInputStream(npcFile); + br = new BufferedReader(new InputStreamReader(fstream)); + + String line = br.readLine(); + + while (line != null) + { + String name = line.split(",")[0]; + String address = line.split(",")[1].split(":")[0]; + Integer port = Integer.parseInt(line.split(",")[1].split(":")[1]); + InetSocketAddress socketAddress = new InetSocketAddress(address, port); + + getProxy().getServers().put(name, getProxy().constructServerInfo(name, socketAddress, "DynamicServer", false)); + line = br.readLine(); + } + } + else + { + npcFile.createNewFile(); + } + } + catch (Exception e) + { + System.out.println("Error parsing servers file."); + } + finally + { + if (br != null) + { + try + { + br.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + if (fstream != null) + { + try + { + fstream.close(); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + } + } +} diff --git a/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java b/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java new file mode 100644 index 000000000..9e69ed8e6 --- /dev/null +++ b/Plugins/Mineplex.Bungee.DynamicServer/src/mineplex/bungee/dynamicServer/ReloadServerListCommand.java @@ -0,0 +1,24 @@ +package mineplex.bungee.dynamicServer; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.plugin.Command; + +public class ReloadServerListCommand extends Command +{ + private DynamicServer _plugin; + + public ReloadServerListCommand(DynamicServer plugin) + { + super( "reloaddynamicserver", "bungeecord.command.reloadserverlist" ); + + _plugin = plugin; + } + + @Override + public void execute(CommandSender sender, String[] arg1) + { + _plugin.LoadServers(); + sender.sendMessage(ChatColor.BLUE + "DynamicServer>" + ChatColor.GRAY + " Reloaded server list."); + } +} diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml b/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml index 6252a495c..df2221356 100644 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml +++ b/Plugins/Mineplex.Bungee.LobbyBalancer/plugin.yml @@ -2,3 +2,4 @@ name: LobbyBalancer main: mineplex.bungee.lobbyBalancer.LobbyBalancer version: 1 author: defek7 +depends: [DynamicServer] diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java b/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java index 6141a19d4..1acc87b23 100644 --- a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java +++ b/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/LobbyBalancer.java @@ -29,6 +29,8 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable getProxy().getPluginManager().registerListener(this, this); getProxy().getScheduler().schedule(this, this, 1L, 1L, TimeUnit.SECONDS); + + getProxy().getPluginManager().registerCommand(this, new ReloadLobbyServerListCommand(this)); } @EventHandler @@ -220,9 +222,11 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable return var3.toString(); } } - - private void loadLobbyServers() - { + + public void loadLobbyServers() + { + _lobbyServers.clear(); + for (String key : getProxy().getServers().keySet()) { if (key.toUpperCase().contains("LOBBY")) @@ -230,5 +234,5 @@ public class LobbyBalancer extends Plugin implements Listener, Runnable _lobbyServers.put(key, 0); } } - } + } } diff --git a/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java b/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java new file mode 100644 index 000000000..855e8e2f3 --- /dev/null +++ b/Plugins/Mineplex.Bungee.LobbyBalancer/src/mineplex/bungee/lobbyBalancer/ReloadLobbyServerListCommand.java @@ -0,0 +1,24 @@ +package mineplex.bungee.lobbyBalancer; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.plugin.Command; + +public class ReloadLobbyServerListCommand extends Command +{ + private LobbyBalancer _plugin; + + public ReloadLobbyServerListCommand(LobbyBalancer plugin) + { + super( "reloadlobbybalancer", "bungeecord.command.reloadserverlist" ); + + _plugin = plugin; + } + + @Override + public void execute(CommandSender sender, String[] arg1) + { + _plugin.loadLobbyServers(); + sender.sendMessage(ChatColor.BLUE + "LobbyBalancer>" + ChatColor.GRAY + " Reloaded lobby server list."); + } +} diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index a0fa45569032714f2d9d9d850cacfd05dc2bda8b..c2101b0a3e0a4a44ff728cdf2568e3788b0e937e 100644 GIT binary patch delta 14098 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 Vn3smd8qdl2Jge`Ui$>Cz{|(>N%##2B delta 13712 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