almost done :)
This commit is contained in:
+39
@@ -0,0 +1,39 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord;
|
||||
|
||||
import us.ajg0702.queue.api.util.QueueLogger;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class BungeeLogger implements QueueLogger {
|
||||
|
||||
private final Logger logger;
|
||||
|
||||
protected BungeeLogger(Logger logger) {
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String message) {
|
||||
logger.warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warning(String message) {
|
||||
logger.warning(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String message) {
|
||||
logger.info(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String message) {
|
||||
logger.severe(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void severe(String message) {
|
||||
logger.severe(message);
|
||||
}
|
||||
}
|
||||
+103
@@ -0,0 +1,103 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord;
|
||||
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import us.ajg0702.queue.api.PlatformMethods;
|
||||
import us.ajg0702.queue.api.commands.IBaseCommand;
|
||||
import us.ajg0702.queue.api.commands.ICommandSender;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
import us.ajg0702.queue.api.util.QueueLogger;
|
||||
import us.ajg0702.queue.commands.commands.PlayerSender;
|
||||
import us.ajg0702.queue.platforms.bungeecord.players.BungeePlayer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class BungeeMethods implements PlatformMethods {
|
||||
|
||||
final ProxyServer proxyServer;
|
||||
final QueueLogger logger;
|
||||
final BungeeQueue plugin;
|
||||
|
||||
public BungeeMethods(BungeeQueue plugin, ProxyServer proxyServer, QueueLogger logger) {
|
||||
this.proxyServer = proxyServer;
|
||||
this.logger = logger;
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
@Override
|
||||
public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) {
|
||||
Collection<ProxiedPlayer> networkPlayers = ProxyServer.getInstance().getPlayers();
|
||||
if (networkPlayers != null && !networkPlayers.isEmpty()) {
|
||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||
out.writeUTF(channel);
|
||||
out.writeUTF(player.getName());
|
||||
int length = data.length;
|
||||
|
||||
for (String s : data) {
|
||||
out.writeUTF(s);
|
||||
}
|
||||
|
||||
((BungeePlayer) player).getHandle().getServer().sendData("ajqueue:tospigot", out.toByteArray());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdaptedPlayer senderToPlayer(ICommandSender sender) {
|
||||
if(sender instanceof PlayerSender) {
|
||||
return ((PlayerSender) sender).getHandle();
|
||||
}
|
||||
return new BungeePlayer((ProxiedPlayer) sender.getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPluginVersion() {
|
||||
return plugin.getDescription().getVersion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdaptedPlayer> getOnlinePlayers() {
|
||||
List<AdaptedPlayer> players = new ArrayList<>();
|
||||
proxyServer.getPlayers().forEach(pp -> players.add(new BungeePlayer(pp)));
|
||||
return players;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPlayerNames(boolean lowercase) {
|
||||
List<String> names = new ArrayList<>();
|
||||
proxyServer.getPlayers().forEach(player -> names.add(lowercase ? player.getName().toLowerCase(Locale.ROOT) : player.getName()));
|
||||
return names;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdaptedPlayer getPlayer(String name) {
|
||||
ProxiedPlayer player = proxyServer.getPlayer(name);
|
||||
if(player == null) return null;
|
||||
return new BungeePlayer(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getServerNames() {
|
||||
return new ArrayList<>(proxyServer.getServers().keySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getImplementationName() {
|
||||
return "BungeeCord";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IBaseCommand> getCommands() {
|
||||
return plugin.commands;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPlugin(String pluginName) {
|
||||
return proxyServer.getPluginManager().getPlugin(pluginName) != null;
|
||||
}
|
||||
}
|
||||
+132
@@ -0,0 +1,132 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord;
|
||||
|
||||
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.*;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
import net.md_5.bungee.api.plugin.Plugin;
|
||||
import net.md_5.bungee.event.EventHandler;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import us.ajg0702.queue.api.commands.IBaseCommand;
|
||||
import us.ajg0702.queue.api.util.QueueLogger;
|
||||
import us.ajg0702.queue.commands.BaseCommand;
|
||||
import us.ajg0702.queue.commands.commands.leavequeue.LeaveCommand;
|
||||
import us.ajg0702.queue.commands.commands.listqueues.ListCommand;
|
||||
import us.ajg0702.queue.commands.commands.manage.ManageCommand;
|
||||
import us.ajg0702.queue.commands.commands.queue.QueueCommand;
|
||||
import us.ajg0702.queue.common.QueueMain;
|
||||
import us.ajg0702.queue.platforms.bungeecord.commands.BungeeCommand;
|
||||
import us.ajg0702.queue.platforms.bungeecord.players.BungeePlayer;
|
||||
import us.ajg0702.queue.platforms.bungeecord.server.BungeeServer;
|
||||
import us.ajg0702.queue.platforms.bungeecord.server.BungeeServerBuilder;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class BungeeQueue extends Plugin implements Listener {
|
||||
|
||||
private QueueLogger logger;
|
||||
|
||||
private QueueMain main;
|
||||
|
||||
private File dataFolder;
|
||||
|
||||
List<IBaseCommand> commands;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
logger = new BungeeLogger(getLogger());
|
||||
dataFolder = getDataFolder();
|
||||
|
||||
main = new QueueMain(
|
||||
logger,
|
||||
new BungeeMethods(this, getProxy(), logger),
|
||||
dataFolder
|
||||
);
|
||||
main.setServerBuilder(new BungeeServerBuilder(main, getProxy()));
|
||||
|
||||
getProxy().registerChannel("ajqueue:tospigot");
|
||||
getProxy().registerChannel("ajqueue:tobungee");
|
||||
|
||||
commands = Arrays.asList(
|
||||
new QueueCommand(main),
|
||||
new LeaveCommand(main),
|
||||
new ListCommand(main),
|
||||
new ManageCommand(main)
|
||||
);
|
||||
|
||||
for(IBaseCommand command : commands) {
|
||||
getProxy().getPluginManager()
|
||||
.registerCommand(this, new BungeeCommand(main, (BaseCommand) command));
|
||||
}
|
||||
|
||||
getProxy().getPluginManager().registerListener(this, this);
|
||||
|
||||
adventure = BungeeAudiences.create(this);
|
||||
|
||||
}
|
||||
|
||||
private static BungeeAudiences adventure;
|
||||
|
||||
public static @NonNull BungeeAudiences adventure() {
|
||||
if(adventure == null) {
|
||||
throw new IllegalStateException("Cannot retrieve audience provider while plugin is not enabled");
|
||||
}
|
||||
return adventure;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
main.shutdown();
|
||||
if(adventure != null) {
|
||||
adventure.close();
|
||||
adventure = null;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPluginMessage(PluginMessageEvent e) {
|
||||
|
||||
if(e.getTag().equals("ajqueue:tospigot")) {
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
if(!e.getTag().equals("ajqueue:toproxy")) return;
|
||||
e.setCancelled(true);
|
||||
|
||||
if(!(e.getReceiver() instanceof ProxiedPlayer)) return;
|
||||
|
||||
main.getEventHandler().handleMessage(new BungeePlayer((ProxiedPlayer) e.getReceiver()), e.getData());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PostLoginEvent e) {
|
||||
main.getEventHandler().onPlayerJoin(new BungeePlayer(e.getPlayer()));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onServerSwitch(ServerSwitchEvent e) {
|
||||
main.getEventHandler().onPlayerJoinServer(new BungeePlayer(e.getPlayer()));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onLeave(PlayerDisconnectEvent e) {
|
||||
main.getEventHandler().onPlayerLeave(new BungeePlayer(e.getPlayer()));
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onKick(ServerKickEvent e) {
|
||||
if(!e.getPlayer().isConnected()) return;
|
||||
if(e.getPlayer().getServer() == null) return; // if the player is kicked on initial join, we dont care
|
||||
Component reason = BungeeComponentSerializer.get().deserialize(e.getKickReasonComponent());
|
||||
main.getEventHandler().onServerKick(
|
||||
new BungeePlayer(e.getPlayer()),
|
||||
new BungeeServer(e.getCancelServer()),
|
||||
reason,
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.commands;
|
||||
|
||||
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.plugin.Command;
|
||||
import net.md_5.bungee.api.plugin.TabExecutor;
|
||||
import us.ajg0702.queue.commands.BaseCommand;
|
||||
import us.ajg0702.queue.common.QueueMain;
|
||||
|
||||
public class BungeeCommand extends Command implements TabExecutor {
|
||||
QueueMain main;
|
||||
BaseCommand command;
|
||||
public BungeeCommand(QueueMain main, BaseCommand command) {
|
||||
super(command.getName(), command.getPermission(), command.getAliases().toArray(new String[0]));
|
||||
this.main = main;
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(CommandSender sender, String[] args) {
|
||||
command.execute(new BungeeSender(sender), args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
|
||||
return command.autoComplete(new BungeeSender(sender), args);
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.commands;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.md_5.bungee.api.CommandSender;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import us.ajg0702.queue.api.commands.ICommandSender;
|
||||
import us.ajg0702.queue.platforms.bungeecord.BungeeQueue;
|
||||
|
||||
public class BungeeSender implements ICommandSender {
|
||||
|
||||
final CommandSender handle;
|
||||
|
||||
public BungeeSender(CommandSender handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(String permission) {
|
||||
return handle.hasPermission(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPlayer() {
|
||||
return handle instanceof ProxiedPlayer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Component message) {
|
||||
BungeeQueue.adventure().sender(handle).sendMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandSender getHandle() {
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.players;
|
||||
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.chat.BaseComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
import us.ajg0702.queue.api.server.AdaptedServer;
|
||||
import us.ajg0702.queue.platforms.bungeecord.BungeeQueue;
|
||||
import us.ajg0702.queue.platforms.bungeecord.server.BungeeServer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BungeePlayer implements AdaptedPlayer, Audience {
|
||||
|
||||
final ProxiedPlayer handle;
|
||||
|
||||
public BungeePlayer(ProxiedPlayer player) {
|
||||
handle = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConnected() {
|
||||
return handle.isConnected();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Component message) {
|
||||
if(PlainTextComponentSerializer.plainText().serialize(message).isEmpty()) return;
|
||||
BungeeQueue.adventure().player(handle).sendMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendActionBar(@NotNull Component message) {
|
||||
if(PlainTextComponentSerializer.plainText().serialize(message).isEmpty()) return;
|
||||
BungeeQueue.adventure().player(handle).sendActionBar(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(String message) {
|
||||
if(message.isEmpty()) return;
|
||||
BungeeQueue.adventure().player(handle).sendMessage(Component.text(message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(String permission) {
|
||||
return handle.hasPermission(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getServerName() {
|
||||
return handle.getServer().getInfo().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getUniqueId() {
|
||||
return handle.getUniqueId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connect(AdaptedServer server) {
|
||||
handle.connect(((BungeeServer) server).getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return handle.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getPermissions() {
|
||||
return new ArrayList<>(handle.getPermissions());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProxiedPlayer getHandle() {
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.server;
|
||||
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
import us.ajg0702.queue.api.server.AdaptedServer;
|
||||
import us.ajg0702.queue.api.server.AdaptedServerInfo;
|
||||
import us.ajg0702.queue.api.server.AdaptedServerPing;
|
||||
import us.ajg0702.queue.platforms.bungeecord.players.BungeePlayer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class BungeeServer implements AdaptedServer {
|
||||
|
||||
final ServerInfo handle;
|
||||
final BungeeServerInfo serverInfo;
|
||||
|
||||
public BungeeServer(ServerInfo handle) {
|
||||
this.handle = handle;
|
||||
serverInfo = new BungeeServerInfo(handle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdaptedServerInfo getServerInfo() {
|
||||
return serverInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return serverInfo.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<AdaptedServerPing> ping() {
|
||||
CompletableFuture<AdaptedServerPing> future = new CompletableFuture<>();
|
||||
handle.ping((pp, error) -> {
|
||||
if(error != null) {
|
||||
future.complete(null);
|
||||
}
|
||||
future.complete(new BungeeServerPing(pp));
|
||||
});
|
||||
return future;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAccess(AdaptedPlayer player) {
|
||||
return handle.canAccess((ProxiedPlayer) player.getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdaptedPlayer> getPlayers() {
|
||||
List<AdaptedPlayer> players = new ArrayList<>();
|
||||
handle.getPlayers().forEach(pp -> players.add(new BungeePlayer(pp)));
|
||||
return players;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerInfo getHandle() {
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.server;
|
||||
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import us.ajg0702.queue.api.queues.QueueServer;
|
||||
import us.ajg0702.queue.api.server.AdaptedServer;
|
||||
import us.ajg0702.queue.api.server.ServerBuilder;
|
||||
import us.ajg0702.queue.common.QueueMain;
|
||||
import us.ajg0702.queue.common.queues.QueueServerImpl;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class BungeeServerBuilder implements ServerBuilder {
|
||||
|
||||
private final ProxyServer proxyServer;
|
||||
private final QueueMain main;
|
||||
public BungeeServerBuilder(QueueMain main, ProxyServer proxyServer) {
|
||||
this.proxyServer = proxyServer;
|
||||
this.main = main;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<QueueServer> buildServers() {
|
||||
List<QueueServer> result = new ArrayList<>();
|
||||
Map<String, ServerInfo> servers = proxyServer.getServers();
|
||||
|
||||
for(String serverName : servers.keySet()) {
|
||||
ServerInfo serverInfo = servers.get(serverName);
|
||||
AdaptedServer adaptedServer = new BungeeServer(serverInfo);
|
||||
result.add(new QueueServerImpl(adaptedServer.getName(), main, adaptedServer));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdaptedServer getServer(String name) {
|
||||
ServerInfo server = proxyServer.getServerInfo(name);
|
||||
if(server == null) return null;
|
||||
return new BungeeServer(server);
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.server;
|
||||
|
||||
import net.md_5.bungee.api.config.ServerInfo;
|
||||
import us.ajg0702.queue.api.server.AdaptedServerInfo;
|
||||
|
||||
public class BungeeServerInfo implements AdaptedServerInfo {
|
||||
|
||||
final ServerInfo handle;
|
||||
public BungeeServerInfo(ServerInfo handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return handle.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerInfo getHandle() {
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package us.ajg0702.queue.platforms.bungeecord.server;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
|
||||
import net.md_5.bungee.api.ServerPing;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import us.ajg0702.queue.api.server.AdaptedServerPing;
|
||||
|
||||
public class BungeeServerPing implements AdaptedServerPing {
|
||||
|
||||
final ServerPing handle;
|
||||
|
||||
public BungeeServerPing(ServerPing handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Component getDescriptionComponent() {
|
||||
BaseComponent[] baseComponents = new BaseComponent[1];
|
||||
baseComponents[0] = handle.getDescriptionComponent();
|
||||
return BungeeComponentSerializer.get().deserialize(baseComponents);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPlainDescription() {
|
||||
return handle.getDescriptionComponent().toPlainText();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPlayerCount() {
|
||||
return handle.getPlayers().getOnline();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxPlayers() {
|
||||
return handle.getPlayers().getMax();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ServerPing getHandle() {
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
name: ajQueue
|
||||
version: "@VERSION@"
|
||||
main: us.ajg0702.queue.platforms.bungeecord.BungeeQueue
|
||||
author: ajgeiss0702
|
||||
Reference in New Issue
Block a user