Implemented more subchannels

This commit is contained in:
Jaime Martínez Rincón 2017-12-01 23:46:23 +01:00
parent 6cea42767b
commit a71e2ae842
6 changed files with 134 additions and 32 deletions

View File

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

View File

@ -25,6 +25,7 @@ public class StatusManager implements Listener {
private ScheduledTask task; private ScheduledTask task;
private final Map<ServerInfo, ServerStatus> storage = new HashMap<>(); private final Map<ServerInfo, ServerStatus> storage = new HashMap<>();
private final Map<ServerInfo, Boolean> overriders = new HashMap<>();
public StatusManager(PlayerBalancer plugin) { public StatusManager(PlayerBalancer plugin) {
this.props = plugin.getSettings().getServerCheckerProps(); this.props = plugin.getSettings().getServerCheckerProps();
@ -96,6 +97,9 @@ public class StatusManager implements Listener {
} }
public boolean isAccessible(ServerInfo server) { public boolean isAccessible(ServerInfo server) {
if (overriders.containsKey(server))
return overriders.get(server);
ServerStatus status = getStatus(server); ServerStatus status = getStatus(server);
for (String pattern : props.getMarkerDescs()) { for (String pattern : props.getMarkerDescs()) {
@ -121,7 +125,7 @@ public class StatusManager implements Listener {
if (server == null) if (server == null)
break; break;
//REMOVE OVERRIDE overriders.remove(server);
break; break;
} }
@ -131,7 +135,7 @@ public class StatusManager implements Listener {
if (server == null) if (server == null)
break; break;
//ADD OVERRIDE overriders.put(server, in.readBoolean());
break; break;
} }
} }

View File

@ -7,6 +7,7 @@ import com.google.gson.GsonBuilder;
import com.google.gson.JsonSerializer; import com.google.gson.JsonSerializer;
import com.jaimemartz.playerbalancer.PlayerBalancer; import com.jaimemartz.playerbalancer.PlayerBalancer;
import com.jaimemartz.playerbalancer.connection.ConnectionIntent; import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
import com.jaimemartz.playerbalancer.ping.ServerStatus; import com.jaimemartz.playerbalancer.ping.ServerStatus;
import com.jaimemartz.playerbalancer.section.ServerSection; import com.jaimemartz.playerbalancer.section.ServerSection;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
@ -19,6 +20,7 @@ import net.md_5.bungee.event.EventHandler;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class MessagingService implements Listener { public class MessagingService implements Listener {
private final PlayerBalancer plugin; private final PlayerBalancer plugin;
@ -185,6 +187,38 @@ public class MessagingService implements Listener {
sender.sendData("PlayerBalancer", stream.toByteArray()); sender.sendData("PlayerBalancer", stream.toByteArray());
} }
case "ClearPlayerBypass": {
if (event.getReceiver() instanceof ProxiedPlayer) {
ProxiedPlayer player = (ProxiedPlayer) event.getReceiver();
PlayerLocker.unlock(player);
}
break;
}
case "SetPlayerBypass": {
if (event.getReceiver() instanceof ProxiedPlayer) {
ProxiedPlayer player = (ProxiedPlayer) event.getReceiver();
PlayerLocker.lock(player);
}
break;
}
case "BypassConnect": {
if (event.getReceiver() instanceof ProxiedPlayer) {
ProxiedPlayer player = (ProxiedPlayer) event.getReceiver();
ServerInfo server = plugin.getProxy().getServerInfo(in.readUTF());
if (server == null)
break;
PlayerLocker.lock(player);
plugin.getProxy().getScheduler().schedule(plugin, () -> {
PlayerLocker.unlock(player);
}, 5, TimeUnit.SECONDS);
}
break;
}
} }
} }
} }

View File

@ -11,7 +11,7 @@
<name>PlayerBalancer Addon</name> <name>PlayerBalancer Addon</name>
<artifactId>playerbalancer-addon</artifactId> <artifactId>playerbalancer-addon</artifactId>
<version>1.1 for 2.1.2.0+</version> <version>1.2 for 2.1.2.0+</version>
<build> <build>
<finalName>PlayerBalancerAddon</finalName> <finalName>PlayerBalancerAddon</finalName>

View File

@ -26,12 +26,14 @@ public class MainCommand implements CommandExecutor {
Player player = plugin.getServer().getPlayer(args[2]); Player player = plugin.getServer().getPlayer(args[2]);
if (player != null) { if (player != null) {
plugin.getManager().connectPlayer(player, input); plugin.getManager().connectPlayer(player, input);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else { } else {
sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server"); sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server");
} }
} else { } else {
if (sender instanceof Player) { if (sender instanceof Player) {
plugin.getManager().connectPlayer((Player) sender, input); plugin.getManager().connectPlayer((Player) sender, input);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else { } else {
sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player"); sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player");
} }
@ -47,12 +49,14 @@ public class MainCommand implements CommandExecutor {
Player player = plugin.getServer().getPlayer(args[1]); Player player = plugin.getServer().getPlayer(args[1]);
if (player != null) { if (player != null) {
plugin.getManager().fallbackPlayer((Player) sender); plugin.getManager().fallbackPlayer((Player) sender);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else { } else {
sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server"); sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server");
} }
} else { } else {
if (sender instanceof Player) { if (sender instanceof Player) {
plugin.getManager().fallbackPlayer((Player) sender); plugin.getManager().fallbackPlayer((Player) sender);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else { } else {
sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player"); sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player");
} }
@ -61,27 +65,91 @@ public class MainCommand implements CommandExecutor {
} }
case "bypassconnect": { case "bypassconnect": {
sender.sendMessage(ChatColor.RED + "This command variant is not implemented yet"); if (args.length >= 2) {
String input = args[1];
if (args.length >= 3) {
Player player = plugin.getServer().getPlayer(args[2]);
if (player != null) {
plugin.getManager().bypassConnect(player, input);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server");
}
} else {
if (sender instanceof Player) {
plugin.getManager().bypassConnect((Player) sender, input);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player");
}
}
} else {
sender.sendMessage(ChatColor.RED + "Usage: /section bypassconnect <server> [player]");
}
break; break;
} }
case "setbypass": { case "setbypass": {
sender.sendMessage(ChatColor.RED + "This command variant is not implemented yet"); if (args.length >= 2) {
Player player = plugin.getServer().getPlayer(args[1]);
if (player != null) {
plugin.getManager().setPlayerBypass(player);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server");
}
} else {
if (sender instanceof Player) {
plugin.getManager().setPlayerBypass((Player) sender);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player");
}
}
break; break;
} }
case "clearbypass": { case "clearbypass": {
sender.sendMessage(ChatColor.RED + "This command variant is not implemented yet"); if (args.length >= 2) {
Player player = plugin.getServer().getPlayer(args[1]);
if (player != null) {
plugin.getManager().clearPlayerBypass((Player) sender);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "There is no player with that name connected to this server");
}
} else {
if (sender instanceof Player) {
plugin.getManager().clearPlayerBypass((Player) sender);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "This command variant can only be executed by a player");
}
}
break; break;
} }
case "overridestatus": { case "overridestatus": {
sender.sendMessage(ChatColor.RED + "This command variant is not implemented yet"); if (args.length >= 3) {
if (args[2].equals("false") || args[2].equals("true")) {
plugin.getManager().setStatusOverride(args[1], Boolean.valueOf(args[2]));
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "The status parameter of this command variant has to be a boolean type, either false or true");
}
} else {
sender.sendMessage(ChatColor.RED + "Usage: /section overridestatus <section> <status: false|true>");
}
break; break;
} }
case "clearoverride": { case "clearoverride": {
sender.sendMessage(ChatColor.RED + "This command variant is not implemented yet"); if (args.length >= 2) {
plugin.getManager().clearStatusOverride(args[1]);
sender.sendMessage(ChatColor.GREEN + "Successfully sent request to the plugin");
} else {
sender.sendMessage(ChatColor.RED + "Usage: /section clearoverride <server>");
}
break; break;
} }
} }
@ -90,15 +158,11 @@ public class MainCommand implements CommandExecutor {
sender.sendMessage(ChatColor.GRAY + "Available commands:"); sender.sendMessage(ChatColor.GRAY + "Available commands:");
sender.sendMessage(ChatColor.AQUA + "/spb connect <section> [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to that section"); sender.sendMessage(ChatColor.AQUA + "/spb connect <section> [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to that section");
sender.sendMessage(ChatColor.AQUA + "/spb fallback [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to the parent of the current section"); sender.sendMessage(ChatColor.AQUA + "/spb fallback [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to the parent of the current section");
/* TODO For version 2.1.3 of the main plugin
sender.sendMessage(ChatColor.AQUA + "/spb bypassconnect <server> [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to a specific server without balancing"); sender.sendMessage(ChatColor.AQUA + "/spb bypassconnect <server> [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Connects you or the specified player to a specific server without balancing");
sender.sendMessage(ChatColor.AQUA + "/spb setbypass [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Sets a bypass for you or the specified player"); sender.sendMessage(ChatColor.AQUA + "/spb setbypass [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Sets a bypass for you or the specified player");
sender.sendMessage(ChatColor.AQUA + "/spb clearbypass [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Clears the bypass for you or the specified player"); sender.sendMessage(ChatColor.AQUA + "/spb clearbypass [player]" + ChatColor.GRAY + " - " + ChatColor.RED + "Clears the bypass for you or the specified player");
sender.sendMessage(ChatColor.AQUA + "/spb overridestatus <server> <status>" + ChatColor.GRAY + " - " + ChatColor.RED + "Overrides the accessible status of a specific server, over anything else"); sender.sendMessage(ChatColor.AQUA + "/spb overridestatus <server> <status: false|true>" + ChatColor.GRAY + " - " + ChatColor.RED + "Overrides the accessible status of a specific server, over anything else");
sender.sendMessage(ChatColor.AQUA + "/spb clearoverride <server>" + ChatColor.GRAY + " - " + ChatColor.RED + "Clears the overridden status of a specific server"); sender.sendMessage(ChatColor.AQUA + "/spb clearoverride <server>" + ChatColor.GRAY + " - " + ChatColor.RED + "Clears the overridden status of a specific server");
*/
sender.sendMessage(ChatColor.STRIKETHROUGH + ChatColor.GRAY.toString() + Strings.repeat("-", 53)); sender.sendMessage(ChatColor.STRIKETHROUGH + ChatColor.GRAY.toString() + Strings.repeat("-", 53));
} }
} }

View File

@ -153,6 +153,24 @@ public class PluginMessageManager implements PluginMessageListener {
return true; return true;
} }
public void clearPlayerBypass(Player player) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("ClearPlayerBypass");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
public void setPlayerBypass(Player player) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("SetPlayerBypass");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
public void bypassConnect(Player player, String server) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("BypassConnect");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
public boolean clearStatusOverride(String server) { public boolean clearStatusOverride(String server) {
Player player = Iterables.getFirst(plugin.getServer().getOnlinePlayers(), null); Player player = Iterables.getFirst(plugin.getServer().getOnlinePlayers(), null);
if (player == null) { if (player == null) {
@ -182,24 +200,6 @@ public class PluginMessageManager implements PluginMessageListener {
return true; return true;
} }
public void clearPlayerBypass(Player player) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("ClearPlayerBypass");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
public void setPlayerBypass(Player player) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("SetPlayerBypass");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
public void bypassConnect(Player player, String server) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("BypassConnect");
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
}
private final class MessageContext { private final class MessageContext {
private final String channel; private final String channel;
private final String subchannel; private final String subchannel;