@@ -0,0 +1,11 @@
|
||||
<!--
|
||||
|
||||
!!! READ BEFORE CREATING A GITHUB ISSUE !!!
|
||||
|
||||
GitHub Issues are not the place to get support. Before creating an issue, make sure you have talked to aj and agree that it is appropiate for a GitHub Issue.
|
||||
|
||||
Even if you are sure it is an issue with the plugin, it could still be a configuration issue.
|
||||
|
||||
GitHub Issues that have not been seen by aj before opening (and/or are not strictly about development) will be closed with the message "this is not the place to get support"
|
||||
|
||||
-->
|
||||
@@ -54,8 +54,8 @@ public interface QueueManager {
|
||||
String getQueuedName(AdaptedPlayer player);
|
||||
|
||||
/**
|
||||
* Checks servers that are in bungeecord and adds any it doesnt
|
||||
* know about.
|
||||
* Checks servers that are in the proxy and adds any it doesn't
|
||||
* know about. (and removes any that no longer exist)
|
||||
*
|
||||
* Also creates/edits server groups
|
||||
*/
|
||||
|
||||
@@ -3,6 +3,7 @@ package us.ajg0702.queue.api.players;
|
||||
import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import us.ajg0702.queue.api.server.AdaptedServer;
|
||||
import us.ajg0702.queue.api.util.Handle;
|
||||
|
||||
@@ -76,7 +77,7 @@ public interface AdaptedPlayer extends Handle, Audience {
|
||||
* Gets the player's username
|
||||
* @return the player's username
|
||||
*/
|
||||
String getName();
|
||||
@Nullable String getName();
|
||||
|
||||
/**
|
||||
* Kick a player from the proxy
|
||||
|
||||
@@ -67,4 +67,6 @@ public interface Logic {
|
||||
|
||||
return highest;
|
||||
}
|
||||
|
||||
boolean hasAnyBypass(AdaptedPlayer player, String server);
|
||||
}
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ repositories {
|
||||
}
|
||||
|
||||
allprojects {
|
||||
version = "2.3.1"
|
||||
version = "2.4.0"
|
||||
group = "us.ajg0702"
|
||||
|
||||
plugins.apply("java")
|
||||
|
||||
@@ -1,5 +1,17 @@
|
||||
package us.ajg0702.queue.commands.commands;
|
||||
|
||||
import net.kyori.adventure.audience.MessageType;
|
||||
import net.kyori.adventure.bossbar.BossBar;
|
||||
import net.kyori.adventure.identity.Identified;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import net.kyori.adventure.inventory.Book;
|
||||
import net.kyori.adventure.sound.Sound;
|
||||
import net.kyori.adventure.sound.SoundStop;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentLike;
|
||||
import net.kyori.adventure.title.Title;
|
||||
import net.kyori.adventure.title.TitlePart;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import us.ajg0702.queue.api.commands.ICommandSender;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
|
||||
@@ -32,4 +44,169 @@ public class PlayerSender implements ICommandSender {
|
||||
public AdaptedPlayer getHandle() {
|
||||
return handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull ComponentLike message) {
|
||||
handle.sendMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identified source, @NotNull ComponentLike message) {
|
||||
handle.sendMessage(source, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identity source, @NotNull ComponentLike message) {
|
||||
handle.sendMessage(source, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Component message) {
|
||||
handle.sendMessage(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identified source, @NotNull Component message) {
|
||||
handle.sendMessage(source, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identity source, @NotNull Component message) {
|
||||
handle.sendMessage(source, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull ComponentLike message, @NotNull MessageType type) {
|
||||
handle.sendMessage(message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identified source, @NotNull ComponentLike message, @NotNull MessageType type) {
|
||||
handle.sendMessage(source, message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identity source, @NotNull ComponentLike message, @NotNull MessageType type) {
|
||||
handle.sendMessage(source, message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Component message, @NotNull MessageType type) {
|
||||
handle.sendMessage(message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identified source, @NotNull Component message, @NotNull MessageType type) {
|
||||
handle.sendMessage(source, message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMessage(@NotNull Identity source, @NotNull Component message, @NotNull MessageType type) {
|
||||
handle.sendMessage(source, message, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendActionBar(@NotNull ComponentLike message) {
|
||||
handle.sendActionBar(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendActionBar(@NotNull Component message) {
|
||||
handle.sendActionBar(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListHeader(@NotNull ComponentLike header) {
|
||||
handle.sendPlayerListHeader(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListHeader(@NotNull Component header) {
|
||||
handle.sendPlayerListHeader(header);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListFooter(@NotNull ComponentLike footer) {
|
||||
handle.sendPlayerListFooter(footer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListFooter(@NotNull Component footer) {
|
||||
handle.sendPlayerListFooter(footer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListHeaderAndFooter(@NotNull ComponentLike header, @NotNull ComponentLike footer) {
|
||||
handle.sendPlayerListHeaderAndFooter(header, footer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPlayerListHeaderAndFooter(@NotNull Component header, @NotNull Component footer) {
|
||||
handle.sendPlayerListHeaderAndFooter(header, footer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showTitle(@NotNull Title title) {
|
||||
handle.showTitle(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> void sendTitlePart(@NotNull TitlePart<T> part, @NotNull T value) {
|
||||
handle.sendTitlePart(part, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearTitle() {
|
||||
handle.clearTitle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetTitle() {
|
||||
handle.resetTitle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showBossBar(@NotNull BossBar bar) {
|
||||
handle.showBossBar(bar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideBossBar(@NotNull BossBar bar) {
|
||||
handle.hideBossBar(bar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(@NotNull Sound sound) {
|
||||
handle.playSound(sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(@NotNull Sound sound, double x, double y, double z) {
|
||||
handle.playSound(sound, x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopSound(@NotNull Sound sound) {
|
||||
handle.stopSound(sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void playSound(@NotNull Sound sound, Sound.@NotNull Emitter emitter) {
|
||||
handle.playSound(sound, emitter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopSound(@NotNull SoundStop stop) {
|
||||
handle.stopSound(stop);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openBook(Book.@NotNull Builder book) {
|
||||
handle.openBook(book);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void openBook(@NotNull Book book) {
|
||||
handle.openBook(book);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ public class ManageCommand extends BaseCommand {
|
||||
|
||||
@Override
|
||||
public String getPermission() {
|
||||
return null;
|
||||
return "ajqueue.manage";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -179,6 +179,7 @@ public class EventHandlerImpl implements EventHandler {
|
||||
}
|
||||
}
|
||||
main.getQueueManager().clear(player);
|
||||
QueueCommand.cooldowns.remove(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -246,9 +246,16 @@ public class QueueManagerImpl implements QueueManager {
|
||||
boolean sendInstant = server.isJoinable(player);
|
||||
boolean sendInstantp = list.size() <= 1 && server.isJoinable(player);
|
||||
boolean timeGood = !main.getConfig().getBoolean("check-last-player-sent-time") || server.getLastSentTime() > Math.floor(main.getTimeBetweenPlayers() * 1000);
|
||||
boolean alwaysSendInstantly = main.getConfig().getStringList("send-instantly").contains(server.getName());
|
||||
boolean hasBypass = main.getLogic().hasAnyBypass(player, server.getName());
|
||||
|
||||
if(main.getConfig().getStringList("send-instantly").contains(server.getName()) || (sendInstant && (sendInstantp && timeGood))) {
|
||||
sendPlayers(server);
|
||||
boolean sentInstantly = alwaysSendInstantly || (sendInstant && (sendInstantp && timeGood)) || hasBypass;
|
||||
|
||||
Debug.info("should send instantly (" + sentInstantly + "): " + alwaysSendInstantly + " || (" + sendInstant + " && (" + sendInstantp + " && " + timeGood + ") && " + (!hasBypass) + ")");
|
||||
if(sentInstantly) {
|
||||
if(!hasBypass) {
|
||||
sendPlayers(server);
|
||||
}
|
||||
if(!msgs.isEmpty("status.now-in-empty-queue")) {
|
||||
player.sendMessage(msgs.getComponent("status.now-in-empty-queue",
|
||||
"POS:"+pos,
|
||||
@@ -573,7 +580,7 @@ public class QueueManagerImpl implements QueueManager {
|
||||
if(!server.isOnline()) continue;
|
||||
if(server.getQueue().size() == 0) continue;
|
||||
|
||||
Debug.info("should send instantly: " + !server.isGroup() + " && " + main.getConfig().getBoolean("send-all-when-back-online") + " && " + server.getServers().get(0).justWentOnline());
|
||||
Debug.info("should send when back online: " + !server.isGroup() + " && " + main.getConfig().getBoolean("send-all-when-back-online") + " && " + server.getServers().get(0).justWentOnline());
|
||||
if(!server.isGroup() && main.getConfig().getBoolean("send-all-when-back-online") && server.getServers().get(0).justWentOnline()) {
|
||||
for(QueuePlayer p : server.getQueue()) {
|
||||
|
||||
@@ -590,6 +597,7 @@ public class QueueManagerImpl implements QueueManager {
|
||||
if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue;
|
||||
|
||||
player.sendMessage(msgs.getComponent("status.sending-now", "SERVER:"+server.getAlias()));
|
||||
Debug.info("Calling player.connect for " + player.getName() + "(send when back online)");
|
||||
player.connect(selected);
|
||||
}
|
||||
continue;
|
||||
@@ -673,6 +681,7 @@ public class QueueManagerImpl implements QueueManager {
|
||||
|
||||
|
||||
server.setLastSentTime(System.currentTimeMillis());
|
||||
Debug.info("calling nextPlayer.connect on " + nextPlayer.getName());
|
||||
nextPlayer.connect(selected);
|
||||
selected.addPlayer();
|
||||
Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount());
|
||||
|
||||
@@ -27,4 +27,9 @@ public class FreeLogic implements Logic {
|
||||
public PermissionGetter getPermissionGetter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasAnyBypass(AdaptedPlayer player, String server) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -35,9 +35,11 @@ public class BungeeMethods implements PlatformMethods {
|
||||
public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) {
|
||||
Collection<ProxiedPlayer> networkPlayers = ProxyServer.getInstance().getPlayers();
|
||||
if (networkPlayers != null && !networkPlayers.isEmpty()) {
|
||||
String playerName = player.getName();
|
||||
if(playerName == null) return;
|
||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||
out.writeUTF(channel);
|
||||
out.writeUTF(player.getName());
|
||||
out.writeUTF(playerName);
|
||||
|
||||
for (String s : data) {
|
||||
out.writeUTF(s);
|
||||
@@ -127,7 +129,7 @@ public class BungeeMethods implements PlatformMethods {
|
||||
for (ServerInfo serverInfo : proxyServer.getServers().values()) {
|
||||
boolean found = false;
|
||||
for(BungeeServer sv : new ArrayList<>(serverList)) {
|
||||
if(sv.getHandle().equals(serverInfo)) {
|
||||
if(sv.getHandle().equals(serverInfo) && sv.getName().equals(serverInfo.getName())) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
@@ -140,7 +142,7 @@ public class BungeeMethods implements PlatformMethods {
|
||||
for(BungeeServer sv : new ArrayList<>(serverList)) {
|
||||
boolean found = false;
|
||||
for (ServerInfo serverInfo : proxyServer.getServers().values()) {
|
||||
if(sv.getHandle().equals(serverInfo)) {
|
||||
if(sv.getHandle().equals(serverInfo) && sv.getName().equals(serverInfo.getName())) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
||||
+1
@@ -118,6 +118,7 @@ public class BungeePlayer implements AdaptedPlayer, Audience {
|
||||
|
||||
@Override
|
||||
public String getServerName() {
|
||||
if(handle.getServer() == null) return null;
|
||||
return handle.getServer().getInfo().getName();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ public class BungeeServer implements AdaptedServer {
|
||||
|
||||
private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, @Nullable Throwable e) {
|
||||
long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime();
|
||||
offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE);
|
||||
offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE) / 1000;
|
||||
|
||||
lastOffline = sent;
|
||||
|
||||
|
||||
+3
-1
@@ -41,8 +41,10 @@ public class VelocityMethods implements PlatformMethods {
|
||||
if(player == null) return;
|
||||
Player velocityPlayer = ((VelocityPlayer) player).getHandle();
|
||||
@SuppressWarnings("UnstableApiUsage") ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||
String playerName = player.getName();
|
||||
if(playerName == null) return;
|
||||
out.writeUTF( channel );
|
||||
out.writeUTF(player.getName());
|
||||
out.writeUTF(playerName);
|
||||
for(String s : data) {
|
||||
out.writeUTF( s );
|
||||
}
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ public class VelocityServer implements AdaptedServer {
|
||||
|
||||
private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, Throwable e) {
|
||||
long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime();
|
||||
offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE);
|
||||
offlineTime = (int) Math.min(sent - lastOnline, Integer.MAX_VALUE) / 1000;
|
||||
|
||||
lastOffline = sent;
|
||||
|
||||
|
||||
@@ -37,14 +37,7 @@ public class PremiumLogic implements Logic {
|
||||
QueueLogger logger = main.getLogger();
|
||||
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
|
||||
|
||||
if(
|
||||
player.hasPermission("ajqueue.bypass") ||
|
||||
player.hasPermission("ajqueue.serverbypass."+ queueServer.getName()) ||
|
||||
player.hasPermission("ajqueue.joinfullandbypassserver."+ queueServer.getName()) ||
|
||||
player.hasPermission("ajqueue.joinfullandbypass") ||
|
||||
permissionGetter.hasContextBypass(player, queueServer.getName()) ||
|
||||
(main.isPremium() && main.getLogic().getPermissionGetter().hasUniqueFullBypass(player, queueServer.getName()))
|
||||
) {
|
||||
if(hasAnyBypass(player, queueServer.getName())) {
|
||||
if(debug) {
|
||||
logger.info("[priority] "+player.getName()+" bypass");
|
||||
}
|
||||
@@ -105,4 +98,14 @@ public class PremiumLogic implements Logic {
|
||||
public boolean playerDisconnectedTooLong(QueuePlayer player) {
|
||||
return player.getTimeSinceOnline() > player.getMaxOfflineTime()*1000L;
|
||||
}
|
||||
@Override
|
||||
public boolean hasAnyBypass(AdaptedPlayer player, String server) {
|
||||
return player.hasPermission("ajqueue.bypass") ||
|
||||
player.hasPermission("ajqueue.serverbypass."+ server) ||
|
||||
player.hasPermission("ajqueue.joinfullandbypassserver."+ server) ||
|
||||
player.hasPermission("ajqueue.joinfullandbypass") ||
|
||||
permissionGetter.hasContextBypass(player, server) ||
|
||||
(QueueMain.getInstance().isPremium() && permissionGetter.hasUniqueFullBypass(player, server));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,14 @@ public class Commands implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
|
||||
if(!pl.hasProxy() && pl.getAConfig().getBoolean("check-proxy-response")) {
|
||||
sender.sendMessage(color("&cajQueue must also be installed on the proxy!&7 If it has been installed on the proxy, make sure it loaded correctly and try relogging."));
|
||||
if(sender instanceof Player) pl.sendMessage((Player) sender, "ack", "");
|
||||
sender.sendMessage(
|
||||
color(
|
||||
"&c" +
|
||||
(sender.hasPermission("ajqueue.manage") ? "ajQueue" : "The queue plugin") +
|
||||
" must also be installed on the proxy!&7 If it has been installed on the proxy, make sure it loaded correctly and try again."
|
||||
)
|
||||
);
|
||||
return true;
|
||||
}
|
||||
Player player = null;
|
||||
|
||||
@@ -221,7 +221,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent e) {
|
||||
if(hasProxy) return;
|
||||
Bukkit.getScheduler().runTask(this, () -> sendMessage(e.getPlayer(), "ack", ""));
|
||||
Bukkit.getScheduler().runTaskLater(this, () -> sendMessage(e.getPlayer(), "ack", ""), 5);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
|
||||
Reference in New Issue
Block a user