progress
This commit is contained in:
@@ -3,7 +3,9 @@ package us.ajg0702.queue.common;
|
||||
import org.spongepowered.configurate.ConfigurateException;
|
||||
import us.ajg0702.queue.api.*;
|
||||
import us.ajg0702.queue.api.server.ServerBuilder;
|
||||
import us.ajg0702.queue.logic.LogicGetter;
|
||||
import us.ajg0702.queue.api.util.QueueLogger;
|
||||
import us.ajg0702.queue.common.utils.LogConverter;
|
||||
import us.ajg0702.queue.logic.LogicGetterImpl;
|
||||
import us.ajg0702.utils.common.Config;
|
||||
import us.ajg0702.utils.common.Messages;
|
||||
|
||||
@@ -12,10 +14,13 @@ import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class QueueMain {
|
||||
|
||||
private static QueueMain instance;
|
||||
public static QueueMain getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private double timeBetweenPlayers;
|
||||
public double getTimeBetweenPlayers() {
|
||||
@@ -54,8 +59,8 @@ public class QueueMain {
|
||||
return platformMethods;
|
||||
}
|
||||
|
||||
private final Logger logger;
|
||||
public Logger getLogger() {
|
||||
private final QueueLogger logger;
|
||||
public QueueLogger getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
@@ -104,7 +109,18 @@ public class QueueMain {
|
||||
private final File dataFolder;
|
||||
|
||||
|
||||
public QueueMain(Logger logger, PlatformMethods platformMethods, File dataFolder) {
|
||||
public QueueMain(QueueLogger logger, PlatformMethods platformMethods, File dataFolder) {
|
||||
|
||||
if(instance != null) {
|
||||
try {
|
||||
throw new Exception("ajQueue QueueMain is being initialized when there is already one! Still initializing it, but this can cause issues.");
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
instance = this;
|
||||
|
||||
|
||||
this.logger = logger;
|
||||
this.platformMethods = platformMethods;
|
||||
this.dataFolder = dataFolder;
|
||||
@@ -112,7 +128,7 @@ public class QueueMain {
|
||||
constructMessages();
|
||||
|
||||
try {
|
||||
config = new Config(dataFolder, logger);
|
||||
config = new Config(dataFolder, new LogConverter(logger));
|
||||
} catch (ConfigurateException e) {
|
||||
logger.warning("Unable to load config:");
|
||||
e.printStackTrace();
|
||||
@@ -123,8 +139,8 @@ public class QueueMain {
|
||||
|
||||
queueManager = new QueueManagerImpl(this);
|
||||
|
||||
logic = new LogicGetter().constructLogic();
|
||||
aliasManager = new LogicGetter().constructAliasManager(config);
|
||||
logic = new LogicGetterImpl().constructLogic();
|
||||
aliasManager = new LogicGetterImpl().constructAliasManager(config);
|
||||
|
||||
taskManager.rescheduleTasks();
|
||||
|
||||
@@ -196,6 +212,6 @@ public class QueueMain {
|
||||
d.put("max-tries-reached", "&cUnable to connect to {SERVER}. Max retries reached.");
|
||||
d.put("auto-queued", "&aYou've been auto-queued for {SERVER} because you were kicked.");
|
||||
|
||||
messages = new Messages(dataFolder, logger, d);
|
||||
messages = new Messages(dataFolder, new LogConverter(logger), d);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ 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.players.QueuePlayerImpl;
|
||||
import us.ajg0702.queue.common.queues.QueueServerImpl;
|
||||
import us.ajg0702.utils.bungee.BungeeUtils;
|
||||
import us.ajg0702.utils.common.Messages;
|
||||
import us.ajg0702.utils.common.TimeUtils;
|
||||
@@ -31,7 +32,39 @@ public class QueueManagerImpl implements QueueManager {
|
||||
serverBuilderFuture.thenRunAsync(() -> {
|
||||
try {
|
||||
servers = serverBuilderFuture.get().buildServers();
|
||||
// TODO: groups
|
||||
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;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
@@ -81,7 +114,8 @@ public class QueueManagerImpl implements QueueManager {
|
||||
} else {
|
||||
int priority = player.hasPermission("ajqueue.priority") ||
|
||||
player.hasPermission("ajqueue.serverpriority."+server.getName()) ? 1 : 0;
|
||||
queuePlayer = new QueuePlayerImpl(player, server, priority);
|
||||
int maxOfflineTime = player.hasPermission("ajqueue.stayqueued") ? 60 : 0;
|
||||
queuePlayer = new QueuePlayerImpl(player, server, priority, maxOfflineTime);
|
||||
if(
|
||||
priority == 1 &&
|
||||
server.getQueue().size() > 0
|
||||
@@ -180,7 +214,9 @@ public class QueueManagerImpl implements QueueManager {
|
||||
|
||||
@Override
|
||||
public String getQueuedName(AdaptedPlayer player) {
|
||||
return getSingleServer(player).getName();
|
||||
QueueServer server = getSingleServer(player);
|
||||
if(server == null) return main.getMessages().getString("placeholders.queued.none");
|
||||
return server.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -367,6 +403,12 @@ public class QueueManagerImpl implements QueueManager {
|
||||
}
|
||||
|
||||
for(QueueServer server : sendingServers) {
|
||||
for(QueuePlayer queuePlayer : server.getQueue()) {
|
||||
if(queuePlayer.getPlayer() != null) continue;
|
||||
if(main.getLogic().playerDisconnectedTooLong(queuePlayer)) {
|
||||
server.removePlayer(queuePlayer);
|
||||
}
|
||||
}
|
||||
if(!server.isOnline()) continue;
|
||||
if(server.getQueue().size() == 0) continue;
|
||||
|
||||
|
||||
@@ -18,7 +18,9 @@ public class QueuePlayerImpl implements QueuePlayer {
|
||||
private final UUID uuid;
|
||||
private final String name;
|
||||
|
||||
public QueuePlayerImpl(AdaptedPlayer player, QueueServer server, int highestPriority) {
|
||||
private final int maxOfflineTime;
|
||||
|
||||
public QueuePlayerImpl(AdaptedPlayer player, QueueServer server, int highestPriority, int maxOfflineTime) {
|
||||
this.player = player;
|
||||
this.server = server;
|
||||
|
||||
@@ -26,6 +28,8 @@ public class QueuePlayerImpl implements QueuePlayer {
|
||||
|
||||
uuid = player.getUniqueId();
|
||||
name = player.getName();
|
||||
|
||||
this.maxOfflineTime = maxOfflineTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,6 +88,11 @@ public class QueuePlayerImpl implements QueuePlayer {
|
||||
return System.currentTimeMillis()-leaveTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxOfflineTime() {
|
||||
return maxOfflineTime;
|
||||
}
|
||||
|
||||
|
||||
private long leaveTime = 0;
|
||||
public void setLeaveTime(long leaveTime) {
|
||||
|
||||
@@ -244,12 +244,12 @@ public class QueueServerImpl implements QueueServer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void addPlayer(QueuePlayer player) {
|
||||
public void addPlayer(QueuePlayer player) {
|
||||
addPlayer(player, -1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPlayer(QueuePlayer player, int position) {
|
||||
public synchronized void addPlayer(QueuePlayer player, int position) {
|
||||
if(!player.getQueueServer().equals(this) || queue.contains(player)) return;
|
||||
if(position > 0) {
|
||||
queue.add(position, player);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package us.ajg0702.queue.common.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import us.ajg0702.queue.api.util.QueueLogger;
|
||||
|
||||
import java.util.logging.LogRecord;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class LogConverter extends Logger {
|
||||
private final QueueLogger logger;
|
||||
public LogConverter(QueueLogger logger) {
|
||||
super("ajqueue-convert", null);
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(@NotNull LogRecord logRecord) {
|
||||
String message = logRecord.getMessage();
|
||||
switch(logRecord.getLevel().getName()) {
|
||||
case "OFF":
|
||||
break;
|
||||
case "SEVERE":
|
||||
logger.error(message);
|
||||
case "WARNING":
|
||||
logger.warn(message);
|
||||
case "INFO":
|
||||
logger.info(message);
|
||||
default:
|
||||
logger.info(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,6 @@ public class FreeLogic implements Logic {
|
||||
|
||||
@Override
|
||||
public boolean playerDisconnectedTooLong(QueuePlayer player) {
|
||||
return true;
|
||||
return 60000L < player.getTimeSinceOnline();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import us.ajg0702.queue.api.AliasManager;
|
||||
import us.ajg0702.queue.api.Logic;
|
||||
import us.ajg0702.utils.common.Config;
|
||||
|
||||
public class LogicGetter implements us.ajg0702.queue.api.LogicGetter {
|
||||
public class LogicGetterImpl implements us.ajg0702.queue.api.LogicGetter {
|
||||
|
||||
@Override
|
||||
public Logic constructLogic() {
|
||||
Reference in New Issue
Block a user