Skip to content

Commit e96640f

Browse files
committed
Split providers into classes
1 parent 77b811f commit e96640f

File tree

13 files changed

+341
-179
lines changed

13 files changed

+341
-179
lines changed
Lines changed: 27 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.jaimemartz.playerbalancer.connection;
22

33
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.connection.provider.types.*;
46
import com.jaimemartz.playerbalancer.ping.ServerStatus;
57
import com.jaimemartz.playerbalancer.section.ServerSection;
8+
import com.jaimemartz.playerbalancer.settings.props.features.BalancerProps;
69
import net.md_5.bungee.api.config.ServerInfo;
710
import net.md_5.bungee.api.connection.ProxiedPlayer;
811

@@ -12,97 +15,65 @@
1215

1316
public enum ProviderType {
1417
NONE {
18+
NullProvider provider = new NullProvider();
19+
1520
@Override
1621
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
17-
return null;
22+
return provider.requestTarget(plugin, section, servers, player);
1823
}
1924
},
2025

2126
RANDOM {
27+
RandomProvider provider = new RandomProvider();
28+
2229
@Override
2330
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
24-
return ProviderType.getRandom(servers);
31+
return provider.requestTarget(plugin, section, servers, player);
2532
}
2633
},
2734

2835
LOWEST {
36+
LowestProvider provider = new LowestProvider();
37+
2938
@Override
3039
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
31-
int min = Integer.MAX_VALUE;
32-
ServerInfo target = null;
33-
34-
for (ServerInfo server : servers) {
35-
int count = plugin.getNetworkManager().getPlayers(server);
36-
37-
if (count < min) {
38-
min = count;
39-
target = server;
40-
}
41-
}
42-
43-
return target;
40+
return provider.requestTarget(plugin, section, servers, player);
4441
}
4542
},
4643

4744
BALANCED {
45+
BalancedProvider provider = new BalancedProvider();
46+
4847
@Override
4948
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
50-
List<ServerInfo> results = new ArrayList<>();
51-
int min = Integer.MAX_VALUE;
52-
53-
for (ServerInfo server : servers) {
54-
int count = plugin.getNetworkManager().getPlayers(server);
55-
56-
if (count <= min) {
57-
if (count < min) {
58-
min = count;
59-
results.clear();
60-
}
61-
results.add(server);
62-
}
63-
}
64-
65-
return ProviderType.getRandom(results);
49+
return provider.requestTarget(plugin, section, servers, player);
6650
}
6751
},
6852

6953
PROGRESSIVE {
54+
ProgressiveProvider provider = new ProgressiveProvider();
55+
7056
@Override
7157
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
72-
for (ServerInfo server : servers) {
73-
ServerStatus status = plugin.getStatusManager().getStatus(server);
74-
if (plugin.getNetworkManager().getPlayers(server) < status.getMaximum()) {
75-
return server;
76-
}
77-
}
78-
79-
return ProviderType.getRandom(servers);
58+
return provider.requestTarget(plugin, section, servers, player);
8059
}
8160
},
8261

8362
FILLER {
63+
FillerProvider provider = new FillerProvider();
64+
8465
@Override
8566
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
86-
int max = Integer.MIN_VALUE;
87-
ServerInfo target = null;
88-
89-
for (ServerInfo server : servers) {
90-
ServerStatus status = plugin.getStatusManager().getStatus(server);
91-
int count = plugin.getNetworkManager().getPlayers(server);
92-
93-
if (count > max && count <= status.getMaximum()) {
94-
max = count;
95-
target = server;
96-
}
97-
}
67+
return provider.requestTarget(plugin, section, servers, player);
68+
}
69+
},
9870

99-
return target;
71+
EXTERNAL {
72+
@Override
73+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
74+
return section.getExternalProvider().requestTarget(plugin, section, servers, player);
10075
}
10176
};
10277

10378
public abstract ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player);
104-
105-
private static ServerInfo getRandom(List<ServerInfo> list) {
106-
return list.get(ThreadLocalRandom.current().nextInt(list.size()));
107-
}
10879
}

src/main/java/com/jaimemartz/playerbalancer/connection/ServerAssignRegistry.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.Map;
1010

11+
//todo improve this
1112
public class ServerAssignRegistry {
1213
private static final Table<ProxiedPlayer, ServerSection, ServerInfo> table = HashBasedTable.create();
1314

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.jaimemartz.playerbalancer.connection.provider;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.section.ServerSection;
5+
import net.md_5.bungee.api.config.ServerInfo;
6+
import net.md_5.bungee.api.connection.ProxiedPlayer;
7+
8+
import java.util.List;
9+
10+
public abstract class AbstractProvider {
11+
public abstract ServerInfo requestTarget(
12+
PlayerBalancer plugin,
13+
ServerSection section,
14+
List<ServerInfo> servers,
15+
ProxiedPlayer player
16+
);
17+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.section.ServerSection;
6+
import net.md_5.bungee.api.config.ServerInfo;
7+
import net.md_5.bungee.api.connection.ProxiedPlayer;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.concurrent.ThreadLocalRandom;
12+
13+
public class BalancedProvider extends AbstractProvider {
14+
@Override
15+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
16+
List<ServerInfo> results = new ArrayList<>();
17+
int min = Integer.MAX_VALUE;
18+
19+
for (ServerInfo server : servers) {
20+
int count = plugin.getNetworkManager().getPlayers(server);
21+
22+
if (count <= min) {
23+
if (count < min) {
24+
min = count;
25+
results.clear();
26+
}
27+
results.add(server);
28+
}
29+
}
30+
31+
return results.get(ThreadLocalRandom.current().nextInt(results.size()));
32+
}
33+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.ping.ServerStatus;
6+
import com.jaimemartz.playerbalancer.section.ServerSection;
7+
import net.md_5.bungee.api.config.ServerInfo;
8+
import net.md_5.bungee.api.connection.ProxiedPlayer;
9+
10+
import java.util.List;
11+
12+
public class FillerProvider extends AbstractProvider {
13+
@Override
14+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
15+
int max = Integer.MIN_VALUE;
16+
ServerInfo target = null;
17+
18+
for (ServerInfo server : servers) {
19+
ServerStatus status = plugin.getStatusManager().getStatus(server);
20+
int count = plugin.getNetworkManager().getPlayers(server);
21+
22+
if (count > max && count <= status.getMaximum()) {
23+
max = count;
24+
target = server;
25+
}
26+
}
27+
28+
return target;
29+
}
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.section.ServerSection;
6+
import net.md_5.bungee.api.config.ServerInfo;
7+
import net.md_5.bungee.api.connection.ProxiedPlayer;
8+
9+
import java.util.List;
10+
11+
public class LowestProvider extends AbstractProvider {
12+
@Override
13+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
14+
int min = Integer.MAX_VALUE;
15+
ServerInfo target = null;
16+
17+
for (ServerInfo server : servers) {
18+
int count = plugin.getNetworkManager().getPlayers(server);
19+
20+
if (count < min) {
21+
min = count;
22+
target = server;
23+
}
24+
}
25+
26+
return target;
27+
}
28+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.section.ServerSection;
6+
import net.md_5.bungee.api.config.ServerInfo;
7+
import net.md_5.bungee.api.connection.ProxiedPlayer;
8+
9+
import java.util.List;
10+
11+
public class NullProvider extends AbstractProvider {
12+
@Override
13+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
14+
return null;
15+
}
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.ProviderType;
5+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
6+
import com.jaimemartz.playerbalancer.ping.ServerStatus;
7+
import com.jaimemartz.playerbalancer.section.ServerSection;
8+
import net.md_5.bungee.api.config.ServerInfo;
9+
import net.md_5.bungee.api.connection.ProxiedPlayer;
10+
11+
import java.util.List;
12+
import java.util.concurrent.ThreadLocalRandom;
13+
14+
public class ProgressiveProvider extends AbstractProvider {
15+
@Override
16+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
17+
for (ServerInfo server : servers) {
18+
ServerStatus status = plugin.getStatusManager().getStatus(server);
19+
if (plugin.getNetworkManager().getPlayers(server) < status.getMaximum()) {
20+
return server;
21+
}
22+
}
23+
24+
return servers.get(ThreadLocalRandom.current().nextInt(servers.size()));
25+
}
26+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.jaimemartz.playerbalancer.connection.provider.types;
2+
3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.connection.provider.AbstractProvider;
5+
import com.jaimemartz.playerbalancer.section.ServerSection;
6+
import net.md_5.bungee.api.config.ServerInfo;
7+
import net.md_5.bungee.api.connection.ProxiedPlayer;
8+
9+
import java.util.List;
10+
import java.util.concurrent.ThreadLocalRandom;
11+
12+
public class RandomProvider extends AbstractProvider {
13+
@Override
14+
public ServerInfo requestTarget(PlayerBalancer plugin, ServerSection section, List<ServerInfo> servers, ProxiedPlayer player) {
15+
return servers.get(ThreadLocalRandom.current().nextInt(servers.size()));
16+
}
17+
}

src/main/java/com/jaimemartz/playerbalancer/manager/PasteHelper.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@
1515
import java.io.InputStreamReader;
1616
import java.net.URL;
1717
import java.util.function.BiConsumer;
18+
import java.util.function.Supplier;
1819

1920
public enum PasteHelper {
20-
PLUGIN((sender, url) -> {
21+
PLUGIN((sender, address) -> {
2122
if (sender instanceof ProxiedPlayer) {
2223
sender.sendMessage(new ComponentBuilder("Click me for the PlayerBalancer configuration")
23-
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, url.toString()))
24+
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, address.toString()))
2425
.color(ChatColor.GREEN)
2526
.create()
2627
);
2728
} else {
28-
sender.sendMessage(new ComponentBuilder("PlayerBalancer configuration link: " + url.toString()).create());
29+
sender.sendMessage(new ComponentBuilder("PlayerBalancer configuration link: " + address.toString()).create());
2930
}
3031
}) {
3132
@Override
@@ -52,15 +53,15 @@ public URL paste(PlayerBalancer plugin) throws Exception {
5253
}
5354
},
5455

55-
BUNGEE((sender, url) -> {
56+
BUNGEE((sender, address) -> {
5657
if (sender instanceof ProxiedPlayer) {
5758
sender.sendMessage(new ComponentBuilder("Click me for the BungeeCord configuration")
58-
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, url.toString()))
59+
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, address.toString()))
5960
.color(ChatColor.GREEN)
6061
.create()
6162
);
6263
} else {
63-
sender.sendMessage(new ComponentBuilder("BungeeCord configuration link: " + url.toString()).create());
64+
sender.sendMessage(new ComponentBuilder("BungeeCord configuration link: " + address.toString()).create());
6465
}
6566
}) {
6667
@Override

0 commit comments

Comments
 (0)