mirror of
https://github.com/BGHDDevelopment/PlayerBalancer.git
synced 2024-11-05 02:19:48 +01:00
Plugin message kinda works, next up: creating more subchannels on the bungee side, creating the command and creating the placeholders
This commit is contained in:
parent
3b11db7b2a
commit
d4cea35eb0
@ -12,7 +12,7 @@ public class MainCommand extends Command {
|
|||||||
private final PlayerBalancer plugin;
|
private final PlayerBalancer plugin;
|
||||||
|
|
||||||
public MainCommand(PlayerBalancer plugin) {
|
public MainCommand(PlayerBalancer plugin) {
|
||||||
super("balancer");
|
super("balancer", "", "playerbalancer", "pb");
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
package com.jaimemartz.playerbalancer.json;
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
|
public class ServerInfoAdapter implements JsonSerializer<ServerInfo> {
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(ServerInfo server, Type type, JsonSerializationContext context) {
|
||||||
|
return context.serialize(server.getName());
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,7 @@ import com.google.gson.GsonBuilder;
|
|||||||
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.section.ServerSection;
|
import com.jaimemartz.playerbalancer.section.ServerSection;
|
||||||
|
import com.jaimemartz.playerbalancer.json.ServerInfoAdapter;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.connection.Server;
|
import net.md_5.bungee.api.connection.Server;
|
||||||
@ -24,10 +25,9 @@ public class PluginMessageListener implements Listener {
|
|||||||
|
|
||||||
public PluginMessageListener(PlayerBalancer plugin) {
|
public PluginMessageListener(PlayerBalancer plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
|
||||||
GsonBuilder builder = new GsonBuilder();
|
GsonBuilder builder = new GsonBuilder();
|
||||||
|
builder.registerTypeAdapter(ServerInfo.class, new ServerInfoAdapter());
|
||||||
builder.serializeNulls();
|
builder.serializeNulls();
|
||||||
builder.excludeFieldsWithoutExposeAnnotation();
|
|
||||||
gson = builder.create();
|
gson = builder.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,6 +37,7 @@ public class PluginMessageListener implements Listener {
|
|||||||
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
|
ByteArrayDataInput in = ByteStreams.newDataInput(event.getData());
|
||||||
String request = in.readUTF();
|
String request = in.readUTF();
|
||||||
ServerInfo sender = ((Server) event.getSender()).getInfo();
|
ServerInfo sender = ((Server) event.getSender()).getInfo();
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
case "Connect": {
|
case "Connect": {
|
||||||
if (event.getReceiver() instanceof ProxiedPlayer) {
|
if (event.getReceiver() instanceof ProxiedPlayer) {
|
||||||
@ -78,6 +79,7 @@ public class PluginMessageListener implements Listener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
String output = gson.toJson(section);
|
String output = gson.toJson(section);
|
||||||
|
out.writeUTF("GetSectionByName");
|
||||||
out.writeUTF(output);
|
out.writeUTF(output);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -103,6 +105,7 @@ public class PluginMessageListener implements Listener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
String output = gson.toJson(section);
|
String output = gson.toJson(section);
|
||||||
|
out.writeUTF("GetSectionByServer");
|
||||||
out.writeUTF(output);
|
out.writeUTF(output);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -125,6 +128,7 @@ public class PluginMessageListener implements Listener {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
String output = gson.toJson(section);
|
String output = gson.toJson(section);
|
||||||
|
out.writeUTF("GetSectionOfPlayer");
|
||||||
out.writeUTF(output);
|
out.writeUTF(output);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -19,10 +19,10 @@ public class ServerSection {
|
|||||||
private ServerSection parent;
|
private ServerSection parent;
|
||||||
private int position;
|
private int position;
|
||||||
|
|
||||||
private ServerInfo server;
|
private transient ServerInfo server;
|
||||||
private SectionCommand command;
|
private transient SectionCommand command;
|
||||||
private NavigableSet<ServerInfo> servers;
|
private transient AbstractProvider externalProvider;
|
||||||
private AbstractProvider externalProvider;
|
private Set<ServerInfo> servers;
|
||||||
|
|
||||||
private boolean valid = false;
|
private boolean valid = false;
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ public class ServerSection {
|
|||||||
this.command = command;
|
this.command = command;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NavigableSet<ServerInfo> getServers() {
|
public Set<ServerInfo> getServers() {
|
||||||
return servers;
|
return servers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-jar-plugin</artifactId>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
<version>2.3.1</version>
|
<version>3.0.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<outputDirectory>../target</outputDirectory>
|
<outputDirectory>../target</outputDirectory>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>placeholderapi</id>
|
<id>papi-repo</id>
|
||||||
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||||
</repository>
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
@ -6,6 +6,7 @@ import net.md_5.bungee.api.chat.ComponentBuilder;
|
|||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class MainCommand implements CommandExecutor {
|
public class MainCommand implements CommandExecutor {
|
||||||
private final PlayerBalancerAddon plugin;
|
private final PlayerBalancerAddon plugin;
|
||||||
@ -16,12 +17,48 @@ public class MainCommand implements CommandExecutor {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||||
if (cmd.getName().equalsIgnoreCase("balanceraddon"))
|
if (cmd.getName().equalsIgnoreCase("spb")) {
|
||||||
|
if (args.length != 0) {
|
||||||
|
switch (args[0].toLowerCase()) {
|
||||||
|
case "connect": {
|
||||||
|
if (args.length >= 2) {
|
||||||
|
String input = args[1];
|
||||||
|
if (args.length == 3) {
|
||||||
|
Player player = plugin.getServer().getPlayer(args[2]);
|
||||||
|
if (player != null) {
|
||||||
|
plugin.getManager().connectPlayer(player, input);
|
||||||
|
} else {
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("There is no player with that name connected to this proxy").color(ChatColor.RED).create());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
plugin.getManager().connectPlayer((Player) sender, input);
|
||||||
|
} else {
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("This command can only be executed by a player").color(ChatColor.RED).create());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("Usage: /section connect <section> [player]").color(ChatColor.RED).create());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
sender.spigot().sendMessage(new ComponentBuilder(Strings.repeat("-", 53)).strikethrough(true).color(ChatColor.GRAY).create());
|
case "info": {
|
||||||
sender.spigot().sendMessage(new ComponentBuilder("Available commands:").color(ChatColor.GRAY).create());
|
plugin.getManager().getSectionOfPlayer((Player) sender, (a) -> {
|
||||||
sender.spigot().sendMessage(new ComponentBuilder("/section connect <section> [player]").color(ChatColor.AQUA).append(" - ").color(ChatColor.GRAY).append("Connects you or the specified player to that section").color(ChatColor.RED).create());
|
System.out.println(a);
|
||||||
sender.spigot().sendMessage(new ComponentBuilder(Strings.repeat("-", 53)).strikethrough(true).color(ChatColor.GRAY).create());
|
sender.sendMessage(a);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder(Strings.repeat("-", 53)).strikethrough(true).color(ChatColor.GRAY).create());
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("Available commands:").color(ChatColor.GRAY).create());
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("/spb connect <section> [player]").color(ChatColor.AQUA).append(" - ").color(ChatColor.GRAY).append("Connects you or the specified player to that section").color(ChatColor.RED).create());
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder("/spb fallback").color(ChatColor.AQUA).append(" - ").color(ChatColor.GRAY).append("Connects you to the parent section").color(ChatColor.RED).create());
|
||||||
|
sender.spigot().sendMessage(new ComponentBuilder(Strings.repeat("-", 53)).strikethrough(true).color(ChatColor.GRAY).create());
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ public class PlayerBalancerAddon extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
manager = new PluginMessageManager(this);
|
manager = new PluginMessageManager(this);
|
||||||
getCommand("balanceraddon").setExecutor(new MainCommand(this));
|
getCommand("spb").setExecutor(new MainCommand(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,24 +1,21 @@
|
|||||||
package com.jaimemartz.playerbalanceraddon;
|
package com.jaimemartz.playerbalanceraddon;
|
||||||
|
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.LinkedListMultimap;
|
import com.google.common.collect.LinkedListMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.messaging.Messenger;
|
|
||||||
import org.bukkit.plugin.messaging.PluginMessageListener;
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.DataInputStream;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public class PluginMessageManager implements PluginMessageListener {
|
public class PluginMessageManager implements PluginMessageListener {
|
||||||
private final Multimap<MessageContext, Consumer<ByteArrayDataInput>> contexts = LinkedListMultimap.create();
|
private final Multimap<MessageContext, Consumer<ByteArrayDataInput>> contexts = HashMultimap.create();
|
||||||
private final PlayerBalancerAddon plugin;
|
private final PlayerBalancerAddon plugin;
|
||||||
|
|
||||||
public PluginMessageManager(PlayerBalancerAddon plugin) {
|
public PluginMessageManager(PlayerBalancerAddon plugin) {
|
||||||
@ -38,8 +35,14 @@ public class PluginMessageManager implements PluginMessageListener {
|
|||||||
ByteArrayDataInput in = ByteStreams.newDataInput(message);
|
ByteArrayDataInput in = ByteStreams.newDataInput(message);
|
||||||
String subchannel = in.readUTF();
|
String subchannel = in.readUTF();
|
||||||
|
|
||||||
contexts.get(new MessageContext(channel, subchannel, player.getUniqueId()))
|
Iterator<Consumer<ByteArrayDataInput>> iterator = contexts.get(
|
||||||
.stream().findFirst().ifPresent(a -> a.accept(in));
|
new MessageContext(channel, subchannel, player.getUniqueId())
|
||||||
|
).iterator();
|
||||||
|
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
iterator.next().accept(in);
|
||||||
|
iterator.remove();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,13 +62,14 @@ public class PluginMessageManager implements PluginMessageListener {
|
|||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
out.writeUTF("GetSectionByName");
|
out.writeUTF("GetSectionByName");
|
||||||
out.writeUTF(section);
|
out.writeUTF(section);
|
||||||
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
|
||||||
|
|
||||||
contexts.put(new MessageContext(
|
contexts.put(new MessageContext(
|
||||||
"PlayerBalancer",
|
"PlayerBalancer",
|
||||||
"GetSectionByName",
|
"GetSectionByName",
|
||||||
player.getUniqueId()
|
player.getUniqueId()
|
||||||
), ByteArrayDataInput::readUTF);
|
), (response) -> consumer.accept(response.readUTF()));
|
||||||
|
|
||||||
|
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -79,13 +83,14 @@ public class PluginMessageManager implements PluginMessageListener {
|
|||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
out.writeUTF("GetSectionByServer");
|
out.writeUTF("GetSectionByServer");
|
||||||
out.writeUTF(server);
|
out.writeUTF(server);
|
||||||
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
|
||||||
|
|
||||||
contexts.put(new MessageContext(
|
contexts.put(new MessageContext(
|
||||||
"PlayerBalancer",
|
"PlayerBalancer",
|
||||||
"GetSectionByServer",
|
"GetSectionByServer",
|
||||||
player.getUniqueId()
|
player.getUniqueId()
|
||||||
), ByteArrayDataInput::readUTF);
|
), (response) -> consumer.accept(response.readUTF()));
|
||||||
|
|
||||||
|
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,13 +98,14 @@ public class PluginMessageManager implements PluginMessageListener {
|
|||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
out.writeUTF("GetSectionOfPlayer");
|
out.writeUTF("GetSectionOfPlayer");
|
||||||
out.writeUTF(player.getName());
|
out.writeUTF(player.getName());
|
||||||
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
|
||||||
|
|
||||||
contexts.put(new MessageContext(
|
contexts.put(new MessageContext(
|
||||||
"PlayerBalancer",
|
"PlayerBalancer",
|
||||||
"GetSectionOfPlayer",
|
"GetSectionOfPlayer",
|
||||||
player.getUniqueId()
|
player.getUniqueId()
|
||||||
), ByteArrayDataInput::readUTF);
|
), (response) -> consumer.accept(response.readUTF()));
|
||||||
|
|
||||||
|
player.sendPluginMessage(plugin, "PlayerBalancer", out.toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class MessageContext {
|
private final class MessageContext {
|
||||||
@ -132,5 +138,14 @@ public class PluginMessageManager implements PluginMessageListener {
|
|||||||
result = 31 * result + (player != null ? player.hashCode() : 0);
|
result = 31 * result + (player != null ? player.hashCode() : 0);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "MessageContext{" +
|
||||||
|
"channel='" + channel + '\'' +
|
||||||
|
", subchannel='" + subchannel + '\'' +
|
||||||
|
", player=" + player +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,9 @@ name: PlayerBalancerAddon
|
|||||||
main: com.jaimemartz.playerbalanceraddon.PlayerBalancerAddon
|
main: com.jaimemartz.playerbalanceraddon.PlayerBalancerAddon
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
author: jaime29010
|
author: jaime29010
|
||||||
|
|
||||||
softdepend: [PlaceholderAPI]
|
softdepend: [PlaceholderAPI]
|
||||||
|
|
||||||
|
commands:
|
||||||
|
spb:
|
||||||
|
description: Command to interact with the bungee side of PlayerBalancer
|
||||||
|
permission: playerbalancer.admin
|
Loading…
Reference in New Issue
Block a user