almost done :)
This commit is contained in:
@@ -50,6 +50,7 @@ public class ListCommand extends BaseCommand {
|
||||
public void execute(ICommandSender sender, String[] args) {
|
||||
if(!checkPermission(sender)) return;
|
||||
|
||||
|
||||
AdaptedPlayer spp = null;
|
||||
if(sender.isPlayer()) {
|
||||
spp = main.getPlatformMethods().senderToPlayer(sender);
|
||||
|
||||
@@ -1,17 +1,22 @@
|
||||
package us.ajg0702.queue.common;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||
import us.ajg0702.queue.api.EventHandler;
|
||||
import us.ajg0702.queue.api.commands.IBaseCommand;
|
||||
import us.ajg0702.queue.api.players.AdaptedPlayer;
|
||||
import us.ajg0702.queue.api.players.QueuePlayer;
|
||||
import us.ajg0702.queue.api.queues.QueueServer;
|
||||
import us.ajg0702.queue.api.server.AdaptedServer;
|
||||
import us.ajg0702.queue.commands.commands.PlayerSender;
|
||||
import us.ajg0702.queue.common.players.QueuePlayerImpl;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class EventHandlerImpl implements EventHandler {
|
||||
|
||||
@@ -91,7 +96,6 @@ public class EventHandlerImpl implements EventHandler {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayerJoin(AdaptedPlayer player) {
|
||||
ImmutableList<QueuePlayer> queues = main.getQueueManager().findPlayerInQueues(player);
|
||||
@@ -109,5 +113,84 @@ public class EventHandlerImpl implements EventHandler {
|
||||
for(QueuePlayer queuePlayer : queues) {
|
||||
((QueuePlayerImpl) queuePlayer).setLeaveTime(System.currentTimeMillis());
|
||||
}
|
||||
main.getQueueManager().clear(player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerJoinServer(AdaptedPlayer player) {
|
||||
ImmutableList<QueuePlayer> alreadyqueued = main.getQueueManager().findPlayerInQueues(player);
|
||||
for(QueuePlayer queuePlayer : alreadyqueued) {
|
||||
QueueServer server = queuePlayer.getQueueServer();
|
||||
int pos = queuePlayer.getPosition();
|
||||
if((pos <= 1 && server.getServerNames().contains(player.getServerName())) || main.getConfig().getBoolean("remove-player-on-server-switch")) {
|
||||
server.removePlayer(player);
|
||||
server.setLastSentTime(System.currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
String serverName = player.getServerName();
|
||||
List<String> svs = main.getConfig().getStringList("queue-servers");
|
||||
for(String s : svs) {
|
||||
if(!s.contains(":")) continue;
|
||||
String[] parts = s.split(":");
|
||||
String from = parts[0];
|
||||
String to = parts[1];
|
||||
if(from.equalsIgnoreCase(serverName)) {
|
||||
main.getQueueManager().addToQueue(player, to);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServerKick(AdaptedPlayer player, AdaptedServer from, Component reason, boolean moving) {
|
||||
|
||||
if(!player.isConnected()) return;
|
||||
|
||||
String plainReason = PlainTextComponentSerializer.plainText().serialize(reason);
|
||||
|
||||
if(!moving && main.getConfig().getBoolean("send-fail-debug")) {
|
||||
main.getLogger().warning("Failed to send "+player.getName()+" to "+from.getName()+". Kicked with reason: "+plainReason);
|
||||
}
|
||||
|
||||
ImmutableList<QueueServer> queuedServers = main.getQueueManager().getPlayerQueues(player);
|
||||
if(!queuedServers.contains(main.getQueueManager().findServer(from.getName())) && main.getConfig().getBoolean("auto-add-to-queue-on-kick")) {
|
||||
|
||||
List<String> reasons = main.getConfig().getStringList("auto-add-kick-reasons");
|
||||
boolean shouldqueue = false;
|
||||
for(String kickReason : reasons) {
|
||||
if(plainReason.toLowerCase().contains(kickReason.toLowerCase())) {
|
||||
shouldqueue = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(shouldqueue || reasons.isEmpty()) {
|
||||
main.getTaskManager().runLater(() -> {
|
||||
if(!player.isConnected()) return;
|
||||
|
||||
String toName = from.getName();
|
||||
player.sendMessage(main.getMessages().getComponent("auto-queued", "SERVER:"+toName));
|
||||
main.getQueueManager().addToQueue(player, toName);
|
||||
}, (long) (main.getConfig().getDouble("auto-add-to-queue-on-kick-delay")*1000), TimeUnit.MILLISECONDS);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
for(QueueServer server : queuedServers) {
|
||||
if(!(server.getServerNames().contains(from.getName()))) continue;
|
||||
QueuePlayer queuePlayer = server.findPlayer(player);
|
||||
if(queuePlayer.getPosition() != 1) continue;
|
||||
List<String> kickReasons = main.getConfig().getStringList("kick-reasons");
|
||||
|
||||
for(String kickReason : kickReasons) {
|
||||
if(plainReason.toLowerCase().contains(kickReason.toLowerCase())) {
|
||||
server.removePlayer(queuePlayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import us.ajg0702.utils.common.TimeUtils;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class QueueManagerImpl implements QueueManager {
|
||||
|
||||
@@ -27,47 +28,12 @@ public class QueueManagerImpl implements QueueManager {
|
||||
this.main = main;
|
||||
this.msgs = main.getMessages();
|
||||
|
||||
CompletableFuture<ServerBuilder> serverBuilderFuture = main.getFutureServerBuilder();
|
||||
serverBuilderFuture.thenRunAsync(() -> {
|
||||
try {
|
||||
servers = serverBuilderFuture.get().buildServers();
|
||||
List<String> groupsRaw = main.getConfig().getStringList("server-groups");
|
||||
for(String groupRaw : groupsRaw) {
|
||||
if(groupRaw.isEmpty()) {
|
||||
main.getLogger().warning("Empty group string! If you dont want server groups, set server-groups like this: server-groups: []");
|
||||
continue;
|
||||
}
|
||||
int delay = main.getConfig().getBoolean("wait-to-load-servers") ? main.getConfig().getInt("wait-to-load-servers-delay") : 0;
|
||||
|
||||
String groupName = groupRaw.split(":")[0];
|
||||
String[] serversRaw = groupRaw.split(":")[1].split(",");
|
||||
|
||||
if(main.getServerBuilder().getServer(groupName) != null) {
|
||||
main.getLogger().warning("The name of a group ('"+groupName+"') cannot be the same as the name of a server!");
|
||||
continue;
|
||||
}
|
||||
|
||||
List<AdaptedServer> groupServers = new ArrayList<>();
|
||||
|
||||
for(String serverRaw : serversRaw) {
|
||||
AdaptedServer si = main.getServerBuilder().getServer(serverRaw);
|
||||
if(si == null) {
|
||||
main.getLogger().warning("Could not find server named '"+serverRaw+"' in servergroup '"+groupName+"'!");
|
||||
continue;
|
||||
}
|
||||
groupServers.add(si);
|
||||
}
|
||||
|
||||
if(groupServers.size() == 0) {
|
||||
main.getLogger().warning("Server group '"+groupName+"' has no servers! Ignoring it.");
|
||||
continue;
|
||||
}
|
||||
|
||||
servers.add(new QueueServerImpl(groupName, main, groupServers));
|
||||
}
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
main.getTaskManager().runLater(() -> {
|
||||
CompletableFuture<ServerBuilder> serverBuilderFuture = main.getFutureServerBuilder();
|
||||
serverBuilderFuture.thenRunAsync(this::reloadServers);
|
||||
}, delay, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -261,7 +227,7 @@ public class QueueManagerImpl implements QueueManager {
|
||||
continue;
|
||||
}
|
||||
|
||||
this.servers.add(main.getServerBuilder().buildGroup(groupName, groupServers));
|
||||
this.servers.add(new QueueServerImpl(groupName, main, groupServers));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -515,4 +481,9 @@ public class QueueManagerImpl implements QueueManager {
|
||||
}
|
||||
return ImmutableList.copyOf(srs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear(AdaptedPlayer player) {
|
||||
sendingNowAntiSpam.remove(player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,6 +109,10 @@ public class TaskManager {
|
||||
return scheduleAtFixedRate(executor, command, 0, period, unit);
|
||||
}
|
||||
|
||||
public ScheduledFuture<?> runLater(Runnable runnable, long delay, TimeUnit unit) {
|
||||
return executor.schedule(runnable, delay, unit);
|
||||
}
|
||||
|
||||
|
||||
private ScheduledFuture<?> scheduleAtFixedRate(ScheduledExecutorService executor, Runnable command, long initialDelay, long period, TimeUnit unit) {
|
||||
return executor.scheduleAtFixedRate(() -> {
|
||||
|
||||
Reference in New Issue
Block a user