Skip to content

Commit 0a1af8a

Browse files
committed
Added new systems
1 parent 31ff3e2 commit 0a1af8a

25 files changed

Lines changed: 794 additions & 262 deletions

build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@ repositories {
1414
name = 'sonatype'
1515
url = 'https://oss.sonatype.org/content/groups/public/'
1616
}
17+
maven {
18+
name = 'spigotmc-repo'
19+
url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
20+
}
1721
}
1822

1923
dependencies {
2024
compileOnly 'net.md-5:bungeecord-api:1.16-R0.4-SNAPSHOT'
25+
compileOnly 'org.spigotmc:spigot-api:1.16.3-R0.1-SNAPSHOT'
2126
}
2227

2328
processResources {

gradlew

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradlew.bat

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

settings.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +0,0 @@
1-
rootProject.name = 'AdvancedBungeeQueue'

src/main/java/fr/customentity/advancedbungeequeue/AdvancedBungeeQueue.java renamed to src/main/java/fr/customentity/advancedbungeequeue/bungee/AdvancedBungeeQueue.java

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
1-
package fr.customentity.advancedbungeequeue;
2-
3-
import fr.customentity.advancedbungeequeue.command.QueueCommand;
4-
import fr.customentity.advancedbungeequeue.i18n.I18n;
5-
import fr.customentity.advancedbungeequeue.i18n.YamlResourceBundle;
6-
import fr.customentity.advancedbungeequeue.manager.QueueManager;
7-
import net.md_5.bungee.api.ChatColor;
8-
import net.md_5.bungee.api.ChatMessageType;
9-
import net.md_5.bungee.api.ProxyServer;
10-
import net.md_5.bungee.api.Title;
1+
package fr.customentity.advancedbungeequeue.bungee;
2+
3+
import fr.customentity.advancedbungeequeue.bungee.command.QueueCommand;
4+
import fr.customentity.advancedbungeequeue.bungee.i18n.I18n;
5+
import fr.customentity.advancedbungeequeue.bungee.i18n.YamlResourceBundle;
6+
import fr.customentity.advancedbungeequeue.bungee.listener.QueueListener;
7+
import fr.customentity.advancedbungeequeue.bungee.manager.QueueManager;
8+
import fr.customentity.advancedbungeequeue.bungee.socket.SocketManager;
9+
import net.md_5.bungee.api.*;
1110
import net.md_5.bungee.api.chat.TextComponent;
1211
import net.md_5.bungee.api.connection.ProxiedPlayer;
1312
import net.md_5.bungee.api.plugin.Plugin;
1413
import net.md_5.bungee.config.Configuration;
1514
import net.md_5.bungee.config.ConfigurationProvider;
1615
import net.md_5.bungee.config.YamlConfiguration;
1716

18-
import javax.xml.soap.Text;
1917
import java.io.File;
2018
import java.io.IOException;
2119
import java.nio.file.Files;
2220
import java.util.*;
21+
import java.util.concurrent.TimeUnit;
2322

2423
public class AdvancedBungeeQueue extends Plugin {
2524

2625
private QueueManager queueManager;
2726

2827
private File file;
2928
private Configuration configFile;
29+
private SocketManager socketManager;
3030

3131
private I18n i18n;
3232

@@ -37,6 +37,16 @@ public void onEnable() {
3737

3838
this.queueManager = new QueueManager(this);
3939
this.getProxy().getPluginManager().registerCommand(this, new QueueCommand(this));
40+
this.getProxy().getPluginManager().registerListener(this, new QueueListener(this));
41+
42+
this.getProxy().getScheduler().schedule(this, () -> queueManager.getQueues().forEach((serverInfo, queuedPlayers) -> queuedPlayers.forEach(queuedPlayer -> this.sendConfigMessage(queuedPlayer.getProxiedPlayer(), "general.repeating-position-message",
43+
"%all%", queuedPlayers.size() + "",
44+
"%position%", queuedPlayers.indexOf(queuedPlayer) + 1 + "",
45+
"%priority%", queuedPlayer.getPriority().getName()
46+
))), 1, 1, TimeUnit.SECONDS);
47+
48+
this.socketManager = new SocketManager(this);
49+
this.socketManager.initListener();
4050
}
4151

4252
public I18n getI18n() {
@@ -49,7 +59,6 @@ private void saveDefaultConfig() {
4959
this.getDataFolder().mkdirs();
5060

5161
file = new File(this.getDataFolder(), "config.yml");
52-
5362
if (!file.exists()) {
5463
Files.copy(getResourceAsStream("config.yml"), file.toPath());
5564
}
@@ -72,8 +81,7 @@ public QueueManager getQueueManager() {
7281
return queueManager;
7382
}
7483

75-
public void sendConfigMessage(ProxiedPlayer player, String path, String... replace) {
76-
AdvancedBungeeQueue advancedBungeeQueue = (AdvancedBungeeQueue) ProxyServer.getInstance().getPluginManager().getPlugin("AdvancedBungeeQueue");
84+
public void sendConfigMessage(CommandSender sender, String path, String... replace) {
7785
HashMap<String, String> replaced = new HashMap<>();
7886
List<String> replaceList = Arrays.asList(replace);
7987
int index = 0;
@@ -83,22 +91,24 @@ public void sendConfigMessage(ProxiedPlayer player, String path, String... repla
8391
replaced.put(str, replaceList.get(index));
8492
}
8593
Optional<YamlResourceBundle> yamlResourceBundleOptional = i18n.getYamlResourceBundleByLang(getConfigFile().getString("locale"));
86-
if(yamlResourceBundleOptional.isPresent()) {
94+
if (yamlResourceBundleOptional.isPresent()) {
8795
YamlResourceBundle yamlResourceBundle = yamlResourceBundleOptional.get();
8896
List<String> messages = yamlResourceBundle.getYamlConfig().get(path) instanceof List ? yamlResourceBundle.getStringList(path) : Collections.singletonList(yamlResourceBundle.getString(path));
8997

90-
messages.forEach(s -> sendConfigMessage(player, s, replaced));
98+
messages.forEach(s -> sendConfigMessage(sender, s, replaced));
9199
}
92100
}
93101

94-
private void sendConfigMessage(ProxiedPlayer player, String configMessage, HashMap<String, String> replaced) {
95-
String message = ChatColor.translateAlternateColorCodes('&', configMessage.replace("%name%", player.getName()).replace("%prefix%", i18n.getString("prefix")));
102+
private void sendConfigMessage(CommandSender sender, String configMessage, HashMap<String, String> replaced) {
103+
String message = ChatColor.translateAlternateColorCodes('&', configMessage.replace("%name%", sender.getName()).replace("%prefix%", i18n.getString("prefix")));
96104
if (message.isEmpty()) return;
97105

98106
for (Map.Entry<String, String> stringEntry : replaced.entrySet()) {
99107
message = message.replace(stringEntry.getKey(), stringEntry.getValue());
100108
}
101109
if (message.toLowerCase().startsWith("%title%")) {
110+
if(!(sender instanceof ProxiedPlayer))return;
111+
ProxiedPlayer player = (ProxiedPlayer)sender;
102112
Title title = ProxyServer.getInstance().createTitle();
103113

104114
title.fadeIn(0);
@@ -109,11 +119,14 @@ private void sendConfigMessage(ProxiedPlayer player, String configMessage, HashM
109119
String[] splitted = message.split("%subtitle%");
110120
title.title(new TextComponent(splitted[0].replaceAll("(?i)%subtitle%", "").replaceAll("(?i)%title%", "")));
111121
title.subTitle(new TextComponent(splitted[1].replaceAll("(?i)%subtitle%", "").replaceAll("(?i)%title%", "")));
112-
title.send(player);
113122
} else {
114123
title.title(new TextComponent(message.replaceAll("(?i)%title%", "")));
124+
title.subTitle(new TextComponent(""));
115125
}
126+
title.send(player);
116127
} else if (message.toLowerCase().startsWith("%subtitle%")) {
128+
if(!(sender instanceof ProxiedPlayer))return;
129+
ProxiedPlayer player = (ProxiedPlayer)sender;
117130
Title title = ProxyServer.getInstance().createTitle();
118131

119132
title.fadeIn(0);
@@ -125,11 +138,15 @@ private void sendConfigMessage(ProxiedPlayer player, String configMessage, HashM
125138
title.subTitle(new TextComponent(splitted[0].replaceAll("(?i)%subtitle%", "").replaceAll("(?i)%title%", "")));
126139
} else {
127140
title.subTitle(new TextComponent(message.replaceAll("(?i)%subtitle%", "")));
141+
title.title(new TextComponent(""));
128142
}
143+
title.send(player);
129144
} else if (message.toLowerCase().startsWith("%actionbar%")) {
145+
if(!(sender instanceof ProxiedPlayer))return;
146+
ProxiedPlayer player = (ProxiedPlayer)sender;
130147
player.sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(message.replaceAll("(?i)%actionbar%", "")));
131148
} else {
132-
player.sendMessage(new TextComponent(message));
149+
sender.sendMessage(new TextComponent(message));
133150
}
134151
}
135152
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package fr.customentity.advancedbungeequeue.bungee.command;
2+
3+
import fr.customentity.advancedbungeequeue.bungee.AdvancedBungeeQueue;
4+
import net.md_5.bungee.api.CommandSender;
5+
import net.md_5.bungee.api.config.ServerInfo;
6+
import net.md_5.bungee.api.connection.ProxiedPlayer;
7+
import net.md_5.bungee.api.plugin.Command;
8+
9+
public class QueueCommand extends Command {
10+
11+
private AdvancedBungeeQueue plugin;
12+
13+
public QueueCommand(AdvancedBungeeQueue plugin) {
14+
super("queue", null, "advancedbungeequeue");
15+
this.plugin = plugin;
16+
}
17+
18+
@Override
19+
public void execute(CommandSender sender, String[] args) {
20+
if (args.length == 0) {
21+
plugin.sendConfigMessage(sender, "help");
22+
} else {
23+
if (args[0].equalsIgnoreCase("join")) {
24+
if(!sender.hasPermission(plugin.getConfigFile().getString("permissions.join-queue-fr.customentity.advancedbungeequeue.command"))) {
25+
plugin.sendConfigMessage(sender, "commands.no-permission");
26+
return;
27+
}
28+
if (!(sender instanceof ProxiedPlayer)) return;
29+
ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender;
30+
if (args.length != 2) {
31+
plugin.sendConfigMessage(proxiedPlayer, "commands.join.syntax");
32+
return;
33+
}
34+
String serverName = args[1];
35+
ServerInfo serverInfo = plugin.getProxy().getServerInfo(serverName);
36+
if (serverInfo == null) {
37+
plugin.sendConfigMessage(proxiedPlayer, "commands.join.server-doesnt-exist");
38+
return;
39+
}
40+
41+
plugin.getQueueManager().addPlayerInQueue(proxiedPlayer, serverInfo);
42+
} else if(args[0].equalsIgnoreCase("on")) {
43+
if(!sender.hasPermission(plugin.getConfigFile().getString("permissions.on-queue-fr.customentity.advancedbungeequeue.command"))) {
44+
plugin.sendConfigMessage(sender, "commands.no-permission");
45+
return;
46+
}
47+
if(plugin.getQueueManager().isEnabled()) {
48+
plugin.sendConfigMessage(sender, "commands.on.error");
49+
return;
50+
}
51+
plugin.getQueueManager().setEnabled(true);
52+
plugin.sendConfigMessage(sender, "commands.on.success");
53+
} else if(args[0].equalsIgnoreCase("off")) {
54+
if(!sender.hasPermission(plugin.getConfigFile().getString("permissions.off-queue-fr.customentity.advancedbungeequeue.command"))) {
55+
plugin.sendConfigMessage(sender, "commands.no-permission");
56+
return;
57+
}
58+
if(!plugin.getQueueManager().isEnabled()) {
59+
plugin.sendConfigMessage(sender, "commands.off.error");
60+
return;
61+
}
62+
plugin.getQueueManager().setEnabled(false);
63+
plugin.sendConfigMessage(sender, "commands.off.success");
64+
} else if(args[0].equalsIgnoreCase("pause")) {
65+
if(!sender.hasPermission(plugin.getConfigFile().getString("permissions.pause-queue-fr.customentity.advancedbungeequeue.command"))) {
66+
plugin.sendConfigMessage(sender, "commands.no-permission");
67+
return;
68+
}
69+
if(plugin.getQueueManager().isPaused()) {
70+
plugin.sendConfigMessage(sender, "commands.pause.error");
71+
return;
72+
}
73+
plugin.getQueueManager().setPaused(true);
74+
plugin.sendConfigMessage(sender, "commands.pause.success");
75+
}else if(args[0].equalsIgnoreCase("unpause")) {
76+
if(!sender.hasPermission(plugin.getConfigFile().getString("permissions.unpause-queue-fr.customentity.advancedbungeequeue.command"))) {
77+
plugin.sendConfigMessage(sender, "commands.no-permission");
78+
return;
79+
}
80+
if(!plugin.getQueueManager().isPaused()) {
81+
plugin.sendConfigMessage(sender, "commands.unpause.error");
82+
return;
83+
}
84+
plugin.getQueueManager().setPaused(false);
85+
plugin.sendConfigMessage(sender, "commands.unpause.success");
86+
}
87+
}
88+
}
89+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package fr.customentity.advancedbungeequeue.bungee.data;
2+
3+
public class Priority {
4+
5+
private String name;
6+
private int priority;
7+
8+
public Priority(String name, int priority) {
9+
this.name = name;
10+
this.priority = priority;
11+
}
12+
13+
public int getPriority() {
14+
return priority;
15+
}
16+
17+
public String getName() {
18+
return name;
19+
}
20+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package fr.customentity.advancedbungeequeue.bungee.data;
2+
3+
import net.md_5.bungee.api.ProxyServer;
4+
import net.md_5.bungee.api.config.ServerInfo;
5+
import net.md_5.bungee.api.connection.ProxiedPlayer;
6+
7+
import java.util.*;
8+
9+
public class QueuedPlayer {
10+
11+
private static Set<QueuedPlayer> queuedPlayerSet = Collections.synchronizedSet(new HashSet<>());
12+
13+
private UUID uuid;
14+
private ServerInfo targetServer;
15+
private Priority priority;
16+
private boolean connecting = false;
17+
18+
public QueuedPlayer(ProxiedPlayer proxiedPlayer, ServerInfo targetServer, Priority priority) {
19+
this.uuid = proxiedPlayer.getUniqueId();
20+
this.targetServer = targetServer;
21+
this.priority = priority;
22+
}
23+
24+
public void setConnecting(boolean connecting) {
25+
this.connecting = connecting;
26+
}
27+
28+
public boolean isConnecting() {
29+
return connecting;
30+
}
31+
32+
public UUID getUuid() {
33+
return uuid;
34+
}
35+
36+
public ProxiedPlayer getProxiedPlayer() {
37+
return ProxyServer.getInstance().getPlayer(uuid);
38+
}
39+
40+
public ServerInfo getTargetServer() {
41+
return targetServer;
42+
}
43+
44+
public void setTargetServer(ServerInfo targetServer) {
45+
this.targetServer = targetServer;
46+
}
47+
48+
public boolean isWaiting() {
49+
return this.targetServer != null;
50+
}
51+
52+
public Priority getPriority() {
53+
return priority;
54+
}
55+
56+
public static Optional<QueuedPlayer> get(ProxiedPlayer proxiedPlayer) {
57+
for(QueuedPlayer queuedPlayer : queuedPlayerSet) {
58+
if(queuedPlayer.getProxiedPlayer().equals(proxiedPlayer)) {
59+
return Optional.of(queuedPlayer);
60+
}
61+
}
62+
return Optional.empty();
63+
}
64+
65+
public static Optional<QueuedPlayer> get(UUID uuid) {
66+
for(QueuedPlayer queuedPlayer : queuedPlayerSet) {
67+
if(queuedPlayer.getProxiedPlayer().getUniqueId().equals(uuid)) {
68+
return Optional.of(queuedPlayer);
69+
}
70+
}
71+
return Optional.empty();
72+
}
73+
74+
public static Set<QueuedPlayer> getQueuedPlayerSet() {
75+
return queuedPlayerSet;
76+
}
77+
}

0 commit comments

Comments
 (0)