Merge pull request #26 from ajgeiss0702/dev

2.4.0
This commit is contained in:
ajgeiss0702
2023-04-15 09:38:35 -07:00
committed by GitHub
18 changed files with 245 additions and 24 deletions
+11
View File
@@ -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); String getQueuedName(AdaptedPlayer player);
/** /**
* Checks servers that are in bungeecord and adds any it doesnt * Checks servers that are in the proxy and adds any it doesn't
* know about. * know about. (and removes any that no longer exist)
* *
* Also creates/edits server groups * 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.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.util.Handle; import us.ajg0702.queue.api.util.Handle;
@@ -76,7 +77,7 @@ public interface AdaptedPlayer extends Handle, Audience {
* Gets the player's username * Gets the player's username
* @return the player's username * @return the player's username
*/ */
String getName(); @Nullable String getName();
/** /**
* Kick a player from the proxy * Kick a player from the proxy
@@ -67,4 +67,6 @@ public interface Logic {
return highest; return highest;
} }
boolean hasAnyBypass(AdaptedPlayer player, String server);
} }
+1 -1
View File
@@ -12,7 +12,7 @@ repositories {
} }
allprojects { allprojects {
version = "2.3.1" version = "2.4.0"
group = "us.ajg0702" group = "us.ajg0702"
plugins.apply("java") plugins.apply("java")
@@ -1,5 +1,17 @@
package us.ajg0702.queue.commands.commands; 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.commands.ICommandSender;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
@@ -32,4 +44,169 @@ public class PlayerSender implements ICommandSender {
public AdaptedPlayer getHandle() { public AdaptedPlayer getHandle() {
return handle; 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 @Override
public String getPermission() { public String getPermission() {
return null; return "ajqueue.manage";
} }
@Override @Override
@@ -179,6 +179,7 @@ public class EventHandlerImpl implements EventHandler {
} }
} }
main.getQueueManager().clear(player); main.getQueueManager().clear(player);
QueueCommand.cooldowns.remove(player);
} }
@Override @Override
@@ -246,9 +246,16 @@ public class QueueManagerImpl implements QueueManager {
boolean sendInstant = server.isJoinable(player); boolean sendInstant = server.isJoinable(player);
boolean sendInstantp = list.size() <= 1 && 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 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))) { boolean sentInstantly = alwaysSendInstantly || (sendInstant && (sendInstantp && timeGood)) || hasBypass;
sendPlayers(server);
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")) { if(!msgs.isEmpty("status.now-in-empty-queue")) {
player.sendMessage(msgs.getComponent("status.now-in-empty-queue", player.sendMessage(msgs.getComponent("status.now-in-empty-queue",
"POS:"+pos, "POS:"+pos,
@@ -573,7 +580,7 @@ public class QueueManagerImpl implements QueueManager {
if(!server.isOnline()) continue; if(!server.isOnline()) continue;
if(server.getQueue().size() == 0) 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()) { if(!server.isGroup() && main.getConfig().getBoolean("send-all-when-back-online") && server.getServers().get(0).justWentOnline()) {
for(QueuePlayer p : server.getQueue()) { for(QueuePlayer p : server.getQueue()) {
@@ -590,6 +597,7 @@ public class QueueManagerImpl implements QueueManager {
if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue; if(selected.isFull() && !selected.canJoinFull(p.getPlayer())) continue;
player.sendMessage(msgs.getComponent("status.sending-now", "SERVER:"+server.getAlias())); 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); player.connect(selected);
} }
continue; continue;
@@ -673,6 +681,7 @@ public class QueueManagerImpl implements QueueManager {
server.setLastSentTime(System.currentTimeMillis()); server.setLastSentTime(System.currentTimeMillis());
Debug.info("calling nextPlayer.connect on " + nextPlayer.getName());
nextPlayer.connect(selected); nextPlayer.connect(selected);
selected.addPlayer(); selected.addPlayer();
Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount()); Debug.info(selected.getName()+" player count is now set to "+ selected.getPlayerCount());
@@ -27,4 +27,9 @@ public class FreeLogic implements Logic {
public PermissionGetter getPermissionGetter() { public PermissionGetter getPermissionGetter() {
return null; return null;
} }
@Override
public boolean hasAnyBypass(AdaptedPlayer player, String server) {
return false;
}
} }
@@ -35,9 +35,11 @@ public class BungeeMethods implements PlatformMethods {
public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) { public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) {
Collection<ProxiedPlayer> networkPlayers = ProxyServer.getInstance().getPlayers(); Collection<ProxiedPlayer> networkPlayers = ProxyServer.getInstance().getPlayers();
if (networkPlayers != null && !networkPlayers.isEmpty()) { if (networkPlayers != null && !networkPlayers.isEmpty()) {
String playerName = player.getName();
if(playerName == null) return;
ByteArrayDataOutput out = ByteStreams.newDataOutput(); ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF(channel); out.writeUTF(channel);
out.writeUTF(player.getName()); out.writeUTF(playerName);
for (String s : data) { for (String s : data) {
out.writeUTF(s); out.writeUTF(s);
@@ -127,7 +129,7 @@ public class BungeeMethods implements PlatformMethods {
for (ServerInfo serverInfo : proxyServer.getServers().values()) { for (ServerInfo serverInfo : proxyServer.getServers().values()) {
boolean found = false; boolean found = false;
for(BungeeServer sv : new ArrayList<>(serverList)) { for(BungeeServer sv : new ArrayList<>(serverList)) {
if(sv.getHandle().equals(serverInfo)) { if(sv.getHandle().equals(serverInfo) && sv.getName().equals(serverInfo.getName())) {
found = true; found = true;
break; break;
} }
@@ -140,7 +142,7 @@ public class BungeeMethods implements PlatformMethods {
for(BungeeServer sv : new ArrayList<>(serverList)) { for(BungeeServer sv : new ArrayList<>(serverList)) {
boolean found = false; boolean found = false;
for (ServerInfo serverInfo : proxyServer.getServers().values()) { for (ServerInfo serverInfo : proxyServer.getServers().values()) {
if(sv.getHandle().equals(serverInfo)) { if(sv.getHandle().equals(serverInfo) && sv.getName().equals(serverInfo.getName())) {
found = true; found = true;
break; break;
} }
@@ -118,6 +118,7 @@ public class BungeePlayer implements AdaptedPlayer, Audience {
@Override @Override
public String getServerName() { public String getServerName() {
if(handle.getServer() == null) return null;
return handle.getServer().getInfo().getName(); return handle.getServer().getInfo().getName();
} }
@@ -75,7 +75,7 @@ public class BungeeServer implements AdaptedServer {
private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, @Nullable Throwable e) { private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, @Nullable Throwable e) {
long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); 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; lastOffline = sent;
@@ -41,8 +41,10 @@ public class VelocityMethods implements PlatformMethods {
if(player == null) return; if(player == null) return;
Player velocityPlayer = ((VelocityPlayer) player).getHandle(); Player velocityPlayer = ((VelocityPlayer) player).getHandle();
@SuppressWarnings("UnstableApiUsage") ByteArrayDataOutput out = ByteStreams.newDataOutput(); @SuppressWarnings("UnstableApiUsage") ByteArrayDataOutput out = ByteStreams.newDataOutput();
String playerName = player.getName();
if(playerName == null) return;
out.writeUTF( channel ); out.writeUTF( channel );
out.writeUTF(player.getName()); out.writeUTF(playerName);
for(String s : data) { for(String s : data) {
out.writeUTF( s ); out.writeUTF( s );
} }
@@ -80,7 +80,7 @@ public class VelocityServer implements AdaptedServer {
private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, Throwable e) { private void markOffline(boolean debug, QueueLogger logger, CompletableFuture<AdaptedServerPing> future, long sent, Throwable e) {
long lastOnline = lastSuccessfullPing == null ? 0 : lastSuccessfullPing.getFetchedTime(); 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; lastOffline = sent;
@@ -37,14 +37,7 @@ public class PremiumLogic implements Logic {
QueueLogger logger = main.getLogger(); QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug"); boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if( if(hasAnyBypass(player, queueServer.getName())) {
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(debug) { if(debug) {
logger.info("[priority] "+player.getName()+" bypass"); logger.info("[priority] "+player.getName()+" bypass");
} }
@@ -105,4 +98,14 @@ public class PremiumLogic implements Logic {
public boolean playerDisconnectedTooLong(QueuePlayer player) { public boolean playerDisconnectedTooLong(QueuePlayer player) {
return player.getTimeSinceOnline() > player.getMaxOfflineTime()*1000L; 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 @Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
if(!pl.hasProxy() && pl.getAConfig().getBoolean("check-proxy-response")) { 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; return true;
} }
Player player = null; Player player = null;
@@ -221,7 +221,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
@EventHandler @EventHandler
public void onJoin(PlayerJoinEvent e) { public void onJoin(PlayerJoinEvent e) {
if(hasProxy) return; if(hasProxy) return;
Bukkit.getScheduler().runTask(this, () -> sendMessage(e.getPlayer(), "ack", "")); Bukkit.getScheduler().runTaskLater(this, () -> sendMessage(e.getPlayer(), "ack", ""), 5);
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)