Fixed issues with the router

This commit is contained in:
Jaime Martínez Rincón 2018-01-15 20:06:53 +01:00
parent b29254fd7b
commit 25d70548c9
5 changed files with 29 additions and 30 deletions

View File

@ -11,7 +11,7 @@
<name>PlayerBalancer Plugin</name>
<artifactId>playerbalancer-plugin</artifactId>
<version>2.1.5.2</version>
<version>2.1.5.3</version>
<build>
<finalName>PlayerBalancer</finalName>

View File

@ -17,20 +17,30 @@ import java.util.concurrent.TimeUnit;
import static com.jaimemartz.playerbalancer.utils.MessageUtils.safeNull;
public abstract class ConnectionIntent {
protected final PlayerBalancer plugin;
protected final ProxiedPlayer player;
protected final ServerSection section;
private final PlayerBalancer plugin;
private final ProxiedPlayer player;
private final ServerSection section;
private final List<ServerInfo> exclusions;
public ConnectionIntent(PlayerBalancer plugin, ProxiedPlayer player, ProviderType provider, ServerSection section, List<ServerInfo> servers) {
public ConnectionIntent(PlayerBalancer plugin, ProxiedPlayer player, ServerSection section) {
this.plugin = plugin;
this.player = player;
this.section = tryRoute(player, section);
this.exclusions = new ArrayList<>();
}
public List<ServerInfo> getExclusions() {
return exclusions;
}
public boolean execute() {
MessageUtils.send(player, plugin.getSettings().getMessagesProps().getConnectingMessage(),
(str) -> str.replace("{section}", section.getName())
.replace("{alias}", safeNull(section.getProps().getAlias()))
);
List<ServerInfo> servers = new ArrayList<>(section.getServers());
//Prevents removing servers from the section
if (servers == section.getServers()) {
throw new IllegalStateException("The servers list parameter is the same reference, this cannot happen");
@ -43,7 +53,7 @@ public abstract class ConnectionIntent {
}
if (section.getImplicitProvider() != ProviderType.NONE) {
ServerInfo target = this.fetchServer(player, section, provider, servers);
ServerInfo target = this.fetchServer(player, section, section.getImplicitProvider(), servers);
if (target != null) {
this.connect(target, (response, throwable) -> {
if (response) { //only if the connect has been executed correctly
@ -58,18 +68,8 @@ public abstract class ConnectionIntent {
MessageUtils.send(player, plugin.getSettings().getMessagesProps().getFailureMessage());
}
}
}
public ConnectionIntent(PlayerBalancer plugin, ProxiedPlayer player, ServerSection section) {
this(plugin, player, section.getImplicitProvider(), section);
}
public ConnectionIntent(PlayerBalancer plugin, ProxiedPlayer player, ProviderType type, ServerSection section) {
this(plugin, player, type, section, new ArrayList<>(section.getServers()));
}
public ConnectionIntent(PlayerBalancer plugin, ProxiedPlayer player, ServerSection section, List<ServerInfo> servers) {
this(plugin, player, section.getImplicitProvider(), section, servers);
return false;
}
private ServerInfo fetchServer(ProxiedPlayer player, ServerSection section, ProviderType provider, List<ServerInfo> servers) {
@ -104,16 +104,17 @@ public abstract class ConnectionIntent {
private ServerSection tryRoute(ProxiedPlayer player, ServerSection section) {
if (plugin.getSettings().getFeaturesProps().getPermissionRouterProps().isEnabled()) {
Map<String, String> routes = plugin.getSettings().getFeaturesProps().getPermissionRouterProps().getRules().get(section.getName());
ServerSection current = plugin.getSectionManager().getByPlayer(player);
if (routes != null) {
for (Map.Entry<String, String> route : routes.entrySet()) {
if (player.hasPermission(route.getKey())) {
ServerSection bind = plugin.getSectionManager().getByName(route.getValue());
ServerSection current = plugin.getSectionManager().getByPlayer(player);
if (bind != null) {
if (current == bind)
if (current == bind) {
break;
}
return bind;
}
@ -123,6 +124,7 @@ public abstract class ConnectionIntent {
}
}
}
return section;
}
@ -134,7 +136,7 @@ public abstract class ConnectionIntent {
public void connect(ServerInfo server, Callback<Boolean> callback) {
ConnectionIntent.direct(plugin, player, server, callback);
}
};
}.execute();
}
public static void direct(PlayerBalancer plugin, ProxiedPlayer player, ServerInfo server, Callback<Boolean> callback) {
@ -148,4 +150,4 @@ public abstract class ConnectionIntent {
callback.done(result, throwable);
});
}
}
}

View File

@ -49,7 +49,7 @@ public class ServerConnectListener implements Listener {
event.setTarget(server);
callback.done(true, null);
}
};
}.execute();
}
private ServerSection getSection(ProxiedPlayer player, ServerInfo target) {

View File

@ -16,8 +16,6 @@ import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import net.md_5.bungee.event.EventPriority;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class ServerKickListener implements Listener {
@ -67,11 +65,7 @@ public class ServerKickListener implements Listener {
if (section == null)
return;
List<ServerInfo> servers = new ArrayList<>();
servers.addAll(section.getServers());
servers.remove(from);
new ConnectionIntent(plugin, player, section, servers) {
ConnectionIntent intent = new ConnectionIntent(plugin, player, section) {
@Override
public void connect(ServerInfo server, Callback<Boolean> callback) {
PlayerLocker.lock(player);
@ -87,6 +81,9 @@ public class ServerKickListener implements Listener {
callback.done(true, null);
}
};
intent.getExclusions().add(from);
intent.execute();
}
private ServerSection getSection(ProxiedPlayer player, ServerInfo from) {

View File

@ -229,7 +229,7 @@ features {
rules {
general-lobbies {
special.permission=other-lobby-section
"special.permission"=other-lobby-section
}
}
}