Skip to content

Commit 6a0303c

Browse files
committed
Added "ForcedEntrySection" feature
1 parent a15c591 commit 6a0303c

File tree

9 files changed

+122
-19
lines changed

9 files changed

+122
-19
lines changed

Main Plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
<name>PlayerBalancer Plugin</name>
1313
<artifactId>playerbalancer-plugin</artifactId>
14-
<version>2.1.2.1</version>
14+
<version>2.1.2.2</version>
1515

1616
<build>
1717
<finalName>PlayerBalancer</finalName>

Main Plugin/src/main/java/com/jaimemartz/playerbalancer/PlayerBalancer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,12 @@ private void execStart() {
133133

134134
if (settings.getGeneralProps().isPluginMessaging()) {
135135
getProxy().registerChannel("PlayerBalancer");
136-
messagingService = new MessagingService(this);
136+
137137
getProxy().getPluginManager().registerListener(this, fallbackService);
138+
139+
getProxy().getPluginManager().registerListener(this, statusManager);
140+
141+
messagingService = new MessagingService(this);
138142
getProxy().getPluginManager().registerListener(this, messagingService);
139143
}
140144

Main Plugin/src/main/java/com/jaimemartz/playerbalancer/listeners/ServerConnectListener.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ public void connect(ServerInfo server, Callback<Boolean> callback) {
4949
}
5050

5151
private ServerSection getSection(ProxiedPlayer player, ServerInfo target) {
52+
if (player.getServer() == null && plugin.getSettings().getForcedEntrySectionProps().isEnabled()) {
53+
return plugin.getSectionManager().getByName(plugin.getSettings().getForcedEntrySectionProps().getSectionName());
54+
}
55+
5256
ServerSection section = plugin.getSectionManager().getByServer(target);
5357

5458
if (section != null) {

Main Plugin/src/main/java/com/jaimemartz/playerbalancer/ping/StatusManager.java

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,34 @@
11
package com.jaimemartz.playerbalancer.ping;
22

3+
import com.google.common.io.ByteArrayDataInput;
4+
import com.google.common.io.ByteStreams;
35
import com.jaimemartz.playerbalancer.PlayerBalancer;
46
import com.jaimemartz.playerbalancer.section.ServerSection;
57
import com.jaimemartz.playerbalancer.settings.props.features.ServerCheckerProps;
68
import net.md_5.bungee.api.config.ServerInfo;
9+
import net.md_5.bungee.api.connection.Server;
10+
import net.md_5.bungee.api.event.PluginMessageEvent;
11+
import net.md_5.bungee.api.plugin.Listener;
712
import net.md_5.bungee.api.scheduler.ScheduledTask;
13+
import net.md_5.bungee.event.EventHandler;
814

915
import java.util.HashMap;
1016
import java.util.Map;
1117
import java.util.concurrent.TimeUnit;
1218

13-
public class StatusManager {
19+
public class StatusManager implements Listener {
1420
private final PlayerBalancer plugin;
1521
private final ServerCheckerProps props;
1622

1723
private boolean stopped = true;
1824
private PingTactic tactic;
1925
private ScheduledTask task;
26+
2027
private final Map<ServerInfo, ServerStatus> storage = new HashMap<>();
2128

2229
public StatusManager(PlayerBalancer plugin) {
23-
this.plugin = plugin;
2430
this.props = plugin.getSettings().getServerCheckerProps();
31+
this.plugin = plugin;
2532
}
2633

2734
public void start() {
@@ -30,9 +37,9 @@ public void start() {
3037
}
3138

3239
stopped = false;
33-
tactic = plugin.getSettings().getServerCheckerProps().getTactic();
40+
tactic = props.getTactic();
3441
plugin.getLogger().info(String.format("Starting the ping task, the interval is %s",
35-
plugin.getSettings().getServerCheckerProps().getInterval()
42+
props.getInterval()
3643
));
3744

3845
task = plugin.getProxy().getScheduler().schedule(plugin, () -> {
@@ -50,7 +57,7 @@ public void start() {
5057
}
5158
}
5259

53-
}, 0L, plugin.getSettings().getServerCheckerProps().getInterval(), TimeUnit.MILLISECONDS);
60+
}, 0L, props.getInterval(), TimeUnit.MILLISECONDS);
5461
}
5562

5663
public void stop() {
@@ -67,7 +74,7 @@ private void update(ServerInfo server) {
6774
status = new ServerStatus();
6875
}
6976

70-
if (plugin.getSettings().getServerCheckerProps().isDebug()) {
77+
if (props.isDebug()) {
7178
plugin.getLogger().info(String.format(
7279
"Updated server %s, status: [Description: \"%s\", Players: %s, Maximum Players: %s, Online: %s]",
7380
server.getName(), status.getDescription(), status.getPlayers(), status.getMaximum(), status.isOnline()
@@ -98,6 +105,37 @@ public boolean isAccessible(ServerInfo server) {
98105
}
99106
}
100107

101-
return true;
108+
return status.isOnline();
109+
}
110+
111+
@EventHandler
112+
public void onPluginMessage(PluginMessageEvent event) {
113+
if (event.getTag().equals("PlayerBalancer") && event.getSender() instanceof Server) {
114+
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
115+
String request = in.readUTF();
116+
ServerInfo sender = ((Server) event.getSender()).getInfo();
117+
118+
switch (request) {
119+
case "ClearStatusOverride": {
120+
ServerInfo server = plugin.getProxy().getServerInfo(in.readUTF());
121+
122+
if (server == null)
123+
break;
124+
125+
//REMOVE OVERRIDE
126+
break;
127+
}
128+
129+
case "SetStatusOverride": {
130+
ServerInfo server = plugin.getProxy().getServerInfo(in.readUTF());
131+
132+
if (server == null)
133+
break;
134+
135+
//ADD OVERRIDE
136+
break;
137+
}
138+
}
139+
}
102140
}
103141
}

Main Plugin/src/main/java/com/jaimemartz/playerbalancer/settings/SettingsHolder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,14 @@ public void setKickHandlerProps(ServerRefreshProps serverRefreshProps) {
8282
featuresProps.setServerRefreshProps(serverRefreshProps);
8383
}
8484

85+
public ForcedEntrySectionProps getForcedEntrySectionProps() {
86+
return featuresProps.getForcedEntrySectionProps();
87+
}
88+
89+
public void setForcedEntrySectionProps(ForcedEntrySectionProps forcedEntrySectionProps) {
90+
featuresProps.setForcedEntrySectionProps(forcedEntrySectionProps);
91+
}
92+
8593
@Override
8694
public String toString() {
8795
return "SettingsHolder{" +

Main Plugin/src/main/java/com/jaimemartz/playerbalancer/settings/props/FeaturesProps.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public class FeaturesProps {
2121
@Setting(value = "server-refresh")
2222
private ServerRefreshProps serverRefreshProps;
2323

24+
@Setting(value = "force-entry-section")
25+
private ForcedEntrySectionProps forcedEntrySectionProps;
26+
2427
public BalancerProps getBalancerProps() {
2528
return balancerProps;
2629
}
@@ -61,6 +64,14 @@ public void setServerRefreshProps(ServerRefreshProps serverRefreshProps) {
6164
this.serverRefreshProps = serverRefreshProps;
6265
}
6366

67+
public ForcedEntrySectionProps getForcedEntrySectionProps() {
68+
return forcedEntrySectionProps;
69+
}
70+
71+
public void setForcedEntrySectionProps(ForcedEntrySectionProps forcedEntrySectionProps) {
72+
this.forcedEntrySectionProps = forcedEntrySectionProps;
73+
}
74+
6475
@Override
6576
public String toString() {
6677
return "FeaturesProps{" +
@@ -69,6 +80,7 @@ public String toString() {
6980
", serverCheckerProps=" + serverCheckerProps +
7081
", kickHandlerProps=" + kickHandlerProps +
7182
", serverRefreshProps=" + serverRefreshProps +
83+
", forceEntrySectionProps=" + forcedEntrySectionProps +
7284
'}';
7385
}
7486
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.jaimemartz.playerbalancer.settings.props.features;
2+
3+
import ninja.leaping.configurate.objectmapping.Setting;
4+
import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable;
5+
6+
@ConfigSerializable
7+
public class ForcedEntrySectionProps {
8+
@Setting
9+
private boolean enabled;
10+
11+
@Setting(value = "section")
12+
private String sectionName;
13+
14+
public boolean isEnabled() {
15+
return enabled;
16+
}
17+
18+
public void setEnabled(boolean enabled) {
19+
this.enabled = enabled;
20+
}
21+
22+
public String getSectionName() {
23+
return sectionName;
24+
}
25+
26+
public void setSectionName(String sectionName) {
27+
this.sectionName = sectionName;
28+
}
29+
}

Main Plugin/src/main/resources/default.conf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,4 +214,13 @@ features {
214214
# The interval between every refresh (in milliseconds)
215215
interval=5000
216216
}
217+
218+
# Forces the first server players connect (when not connected already) to be one of a specific section
219+
# This overrides `force_default_server` from BungeeCord
220+
force-entry-section {
221+
enabled=false
222+
223+
# The section you want
224+
section="auth-lobbies"
225+
}
217226
}

Spigot Addon/src/main/java/com/jaimemartz/playerbalanceraddon/PluginMessageManager.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,54 +153,53 @@ public void fallbackPlayer(Player player) {
153153
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
154154
}
155155

156-
//TODO Implement this on the bungeecord side
157-
public boolean unmarkServer(String server) {
156+
public boolean clearStatusOverride(String server) {
158157
Player player = Iterables.getFirst(plugin.getServer().getOnlinePlayers(), null);
159158
if (player == null) {
160159
return false;
161160
}
162161

163162
ByteArrayDataOutput out = ByteStreams.newDataOutput();
164-
out.writeUTF("ServerUnmark");
163+
out.writeUTF("ClearStatusOverride");
165164
out.writeUTF(server);
166165
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
167166

168167
return true;
169168
}
170169

171-
public boolean markServer(String server, boolean status) {
170+
public boolean setStatusOverride(String server, boolean status) {
172171
Player player = Iterables.getFirst(plugin.getServer().getOnlinePlayers(), null);
173172
if (player == null) {
174173
return false;
175174
}
176175

177176
ByteArrayDataOutput out = ByteStreams.newDataOutput();
178-
out.writeUTF("ServerMark");
177+
out.writeUTF("SetStatusOverride");
179178
out.writeUTF(server);
180179
out.writeBoolean(status);
181180
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
182181

183182
return true;
184183
}
185184

186-
public void unbypassPlayer(Player player) {
185+
public void clearPlayerBypass(Player player) {
187186
ByteArrayDataOutput out = ByteStreams.newDataOutput();
188-
out.writeUTF("PlayerUnbypass");
187+
out.writeUTF("ClearPlayerBypass");
189188
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
190189
}
191190

192-
public void bypassPlayer(Player player) {
191+
public void setPlayerBypass(Player player) {
193192
ByteArrayDataOutput out = ByteStreams.newDataOutput();
194-
out.writeUTF("PlayerBypass");
193+
out.writeUTF("SetPlayerBypass");
195194
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
196195
}
197196

197+
//TOODO Add this to the /balancer or some other command too
198198
public void bypassConnect(Player player, String server) {
199199
ByteArrayDataOutput out = ByteStreams.newDataOutput();
200200
out.writeUTF("BypassConnect");
201201
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
202202
}
203-
//END TODO Implement this on the bungeecord side
204203

205204
private final class MessageContext {
206205
private final String channel;

0 commit comments

Comments
 (0)