1- package com .jaimemartz .playerbalancer .listener ;
1+ package com .jaimemartz .playerbalancer .listeners ;
22
33import com .google .common .io .ByteArrayDataInput ;
44import com .google .common .io .ByteStreams ;
5- import com .google .gson .Gson ;
6- import com .google .gson .GsonBuilder ;
5+ import com .google .gson .*;
76import com .jaimemartz .playerbalancer .PlayerBalancer ;
87import com .jaimemartz .playerbalancer .connection .ConnectionIntent ;
98import com .jaimemartz .playerbalancer .section .ServerSection ;
10- import com .jaimemartz .playerbalancer .json .ServerInfoAdapter ;
9+ import com .jaimemartz .playerbalancer .utils .ServerInfoAdapter ;
1110import net .md_5 .bungee .api .config .ServerInfo ;
1211import net .md_5 .bungee .api .connection .ProxiedPlayer ;
1312import net .md_5 .bungee .api .connection .Server ;
1817import java .io .ByteArrayOutputStream ;
1918import java .io .DataOutputStream ;
2019import java .io .IOException ;
20+ import java .lang .reflect .Type ;
21+ import java .util .Collection ;
22+ import java .util .stream .Collectors ;
2123
2224public class PluginMessageListener implements Listener {
2325 private final PlayerBalancer plugin ;
@@ -26,7 +28,11 @@ public class PluginMessageListener implements Listener {
2628 public PluginMessageListener (PlayerBalancer plugin ) {
2729 this .plugin = plugin ;
2830 GsonBuilder builder = new GsonBuilder ();
29- builder .registerTypeAdapter (ServerInfo .class , new ServerInfoAdapter ());
31+
32+ builder .registerTypeAdapter (ServerInfo .class , (JsonSerializer <ServerInfo >) (server , type , context ) ->
33+ context .serialize (server .getName ())
34+ );
35+
3036 builder .serializeNulls ();
3137 gson = builder .create ();
3238 }
@@ -44,9 +50,8 @@ public void onPluginMessage(PluginMessageEvent event) {
4450 ProxiedPlayer player = (ProxiedPlayer ) event .getReceiver ();
4551 ServerSection section = plugin .getSectionManager ().getByName (in .readUTF ());
4652
47- if (section == null ) {
48- return ;
49- }
53+ if (section == null )
54+ break ;
5055
5156 ConnectionIntent .simple (plugin , player , section );
5257 }
@@ -55,14 +60,14 @@ public void onPluginMessage(PluginMessageEvent event) {
5560
5661 case "ConnectOther" : {
5762 ProxiedPlayer player = plugin .getProxy ().getPlayer (in .readUTF ());
58- if ( player == null ) {
59- return ;
60- }
63+
64+ if ( player == null )
65+ break ;
6166
6267 ServerSection section = plugin .getSectionManager ().getByName (in .readUTF ());
63- if ( section == null ) {
64- return ;
65- }
68+
69+ if ( section == null )
70+ break ;
6671
6772 ConnectionIntent .simple (plugin , player , section );
6873 break ;
@@ -73,9 +78,9 @@ public void onPluginMessage(PluginMessageEvent event) {
7378 DataOutputStream out = new DataOutputStream (stream );
7479
7580 ServerSection section = plugin .getSectionManager ().getByName (in .readUTF ());
76- if ( section == null ) {
77- return ;
78- }
81+
82+ if ( section == null )
83+ break ;
7984
8085 try {
8186 String output = gson .toJson (section );
@@ -94,14 +99,14 @@ public void onPluginMessage(PluginMessageEvent event) {
9499 DataOutputStream out = new DataOutputStream (stream );
95100
96101 ServerInfo server = plugin .getProxy ().getServerInfo (in .readUTF ());
97- if ( server == null ) {
98- return ;
99- }
102+
103+ if ( server == null )
104+ break ;
100105
101106 ServerSection section = plugin .getSectionManager ().getByServer (server );
102- if ( section == null ) {
103- return ;
104- }
107+
108+ if ( section == null )
109+ break ;
105110
106111 try {
107112 String output = gson .toJson (section );
@@ -122,9 +127,9 @@ public void onPluginMessage(PluginMessageEvent event) {
122127 DataOutputStream out = new DataOutputStream (stream );
123128
124129 ServerSection section = plugin .getSectionManager ().getByPlayer (player );
125- if ( section == null ) {
126- return ;
127- }
130+
131+ if ( section == null )
132+ break ;
128133
129134 try {
130135 String output = gson .toJson (section );
@@ -138,6 +143,27 @@ public void onPluginMessage(PluginMessageEvent event) {
138143 }
139144 break ;
140145 }
146+
147+ case "GetSectionPlayerCount" : {
148+ ByteArrayOutputStream stream = new ByteArrayOutputStream ();
149+ DataOutputStream out = new DataOutputStream (stream );
150+
151+ ServerSection section = plugin .getSectionManager ().getByName (in .readUTF ());
152+
153+ if (section == null )
154+ break ;
155+
156+ try {
157+ out .writeUTF ("GetSectionPlayerCount" );
158+ out .writeInt (section .getServers ().stream ()
159+ .mapToInt (a -> a .getPlayers ().size ()).sum ());
160+ } catch (IOException e ) {
161+ e .printStackTrace ();
162+ }
163+
164+ sender .sendData ("PlayerBalancer" , stream .toByteArray ());
165+ break ;
166+ }
141167 }
142168 }
143169 }
0 commit comments