Skip to content

Commit 31ff3e2

Browse files
committed
Add priority system
1 parent a350655 commit 31ff3e2

2 files changed

Lines changed: 49 additions & 23 deletions

File tree

src/main/java/fr/customentity/advancedbungeequeue/data/QueuedPlayer.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.customentity.advancedbungeequeue.data;
22

3-
import net.md_5.bungee.api.ChatColor;
43
import net.md_5.bungee.api.config.ServerInfo;
54
import net.md_5.bungee.api.connection.ProxiedPlayer;
65

@@ -12,14 +11,12 @@ public class QueuedPlayer {
1211

1312
private ProxiedPlayer proxiedPlayer;
1413
private ServerInfo targetServer;
14+
private int priority;
1515

16-
public QueuedPlayer(ProxiedPlayer proxiedPlayer) {
17-
this(proxiedPlayer, null);
18-
}
19-
20-
public QueuedPlayer(ProxiedPlayer proxiedPlayer, ServerInfo targetServer) {
16+
public QueuedPlayer(ProxiedPlayer proxiedPlayer, ServerInfo targetServer, int priority) {
2117
this.proxiedPlayer = proxiedPlayer;
2218
this.targetServer = targetServer;
19+
this.priority = priority;
2320

2421
queuedPlayerSet.add(this);
2522
}
@@ -41,14 +38,19 @@ public boolean isWaiting() {
4138
return this.targetServer != null;
4239
}
4340

41+
public int getPriority() {
42+
return priority;
43+
}
44+
4445
public static QueuedPlayer get(ProxiedPlayer proxiedPlayer) {
4546
for(QueuedPlayer queuedPlayer : queuedPlayerSet) {
4647
if(queuedPlayer.getProxiedPlayer().equals(proxiedPlayer)) {
4748
return queuedPlayer;
4849
}
4950
}
50-
return new QueuedPlayer(proxiedPlayer);
51+
return null;
5152
}
53+
5254
public static Set<QueuedPlayer> getQueuedPlayerSet() {
5355
return queuedPlayerSet;
5456
}

src/main/java/fr/customentity/advancedbungeequeue/manager/QueueManager.java

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
import net.md_5.bungee.api.connection.ProxiedPlayer;
88
import net.md_5.bungee.api.event.ServerConnectEvent;
99

10+
import java.util.ArrayList;
11+
import java.util.Collections;
12+
import java.util.List;
1013
import java.util.Queue;
1114
import java.util.concurrent.*;
1215

1316
public class QueueManager {
1417

1518
private AdvancedBungeeQueue plugin;
1619

17-
private ConcurrentHashMap<ServerInfo, Queue<QueuedPlayer>> queue;
20+
private ConcurrentHashMap<ServerInfo, List<QueuedPlayer>> queue;
1821
private ScheduledExecutorService scheduledExecutorService;
1922
private boolean queueRunning = true;
2023

@@ -24,7 +27,7 @@ public QueueManager(AdvancedBungeeQueue plugin) {
2427
this.scheduledExecutorService = new ScheduledThreadPoolExecutor(plugin.getConfigFile().getInt("thread-pool-size"));
2528

2629
this.loadServersQueue();
27-
for(ServerInfo serverInfo : queue.keySet()) {
30+
for (ServerInfo serverInfo : queue.keySet()) {
2831
this.scheduledExecutorService.scheduleAtFixedRate(new ConnectRunnable(plugin, serverInfo), this.plugin.getConfigFile().getLong("queue-speed"), this.plugin.getConfigFile().getLong("queue-speed"), TimeUnit.MILLISECONDS);
2932
}
3033
}
@@ -34,32 +37,53 @@ public boolean isQueueRunning() {
3437
}
3538

3639
public void addPlayerInQueue(ProxiedPlayer proxiedPlayer, ServerInfo serverInfo) {
37-
if(plugin.getConfigFile().getStringList("default-servers").stream().noneMatch(s -> proxiedPlayer.getServer().getInfo().getName().contains(s))) {
40+
if (plugin.getConfigFile().getStringList("default-servers").stream().noneMatch(s -> proxiedPlayer.getServer().getInfo().getName().contains(s))) {
3841
return;
3942
}
40-
if(proxiedPlayer.hasPermission(plugin.getConfigFile().getString("permissions.bypass"))) {
43+
if (proxiedPlayer.hasPermission(plugin.getConfigFile().getString("permissions.bypass"))) {
4144
proxiedPlayer.connect(serverInfo);
4245
return;
4346
}
44-
Queue<QueuedPlayer> queuedPlayers = queue.get(serverInfo);
45-
QueuedPlayer queuedPlayer = QueuedPlayer.get(proxiedPlayer);
46-
if(queuedPlayer.isWaiting())return;
47+
List<QueuedPlayer> queuedPlayers = queue.get(serverInfo);
48+
if (this.plugin.getConfigFile().getBoolean("use-same-queue")) queuedPlayers = queue.values().stream().findFirst().get();
49+
if(queuedPlayers == null)return;
50+
51+
QueuedPlayer queuedPlayer = new QueuedPlayer(proxiedPlayer, serverInfo, getPriority(proxiedPlayer));
52+
if (queuedPlayer.isWaiting()) return;
4753
queuedPlayer.setTargetServer(serverInfo);
48-
queuedPlayers.add(queuedPlayer);
49-
queue.put(serverInfo, queuedPlayers);
54+
55+
for(QueuedPlayer player : queuedPlayers) {
56+
if(player.getPriority() <= queuedPlayer.getPriority()) {
57+
queuedPlayers.add(queuedPlayers.indexOf(player), queuedPlayer);
58+
}
59+
}
60+
}
61+
62+
public int getPriority(ProxiedPlayer proxiedPlayer) {
63+
for(String str : plugin.getConfigFile().getSection("priorities").getKeys()) {
64+
if(proxiedPlayer.hasPermission("advancedbungeequeue.priority." + str)) return plugin.getConfigFile().getInt("priorities." + str);
65+
}
66+
return plugin.getConfigFile().getInt("priorities.default", 0);
67+
}
68+
69+
public int getPlayerPosition(ProxiedPlayer proxiedPlayer) {
70+
QueuedPlayer queuedPlayer = QueuedPlayer.get(proxiedPlayer);
71+
if (queue.get(queuedPlayer.getTargetServer()) != null)
72+
return queue.get(queuedPlayer.getTargetServer()).indexOf(queuedPlayer) + 1;
73+
return -1;
5074
}
5175

5276
public void setQueueRunning(boolean queueRunning) {
5377
this.queueRunning = queueRunning;
5478
}
5579

5680
public void connectNextPlayers(ServerInfo serverInfo) {
57-
for(int i = 0; i < plugin.getConfigFile().getInt("player-amount"); i++) {
58-
Queue<QueuedPlayer> queuedPlayers = queue.get(serverInfo);
59-
QueuedPlayer queuedPlayer = queuedPlayers.peek();
60-
if(queuedPlayer == null)continue;
81+
for (int i = 0; i < plugin.getConfigFile().getInt("player-amount"); i++) {
82+
List<QueuedPlayer> queuedPlayers = queue.get(serverInfo);
83+
QueuedPlayer queuedPlayer = queuedPlayers.get(0);
84+
if (queuedPlayer == null) continue;
6185
queuedPlayer.getProxiedPlayer().connect(serverInfo, (result, error) -> {
62-
if(result) {
86+
if (result) {
6387
queuedPlayers.remove(queuedPlayer);
6488
} else {
6589

@@ -72,13 +96,13 @@ public void loadServersQueue() {
7296
for (String servers : this.plugin.getConfigFile().getStringList("queued-servers")) {
7397
ServerInfo serverInfo = this.plugin.getProxy().getServerInfo(servers);
7498
if (serverInfo != null) {
75-
queue.putIfAbsent(serverInfo, new ConcurrentLinkedQueue<>());
99+
queue.putIfAbsent(serverInfo, Collections.synchronizedList(new ArrayList<>()));
76100
if (!this.plugin.getConfigFile().getBoolean("use-same-queue")) break;
77101
}
78102
}
79103
}
80104

81-
public ConcurrentHashMap<ServerInfo, Queue<QueuedPlayer>> getQueues() {
105+
public ConcurrentHashMap<ServerInfo, List<QueuedPlayer>> getQueues() {
82106
return queue;
83107
}
84108
}

0 commit comments

Comments
 (0)