2.5.0 & 2.5.1

This commit is contained in:
ajgeiss0702
2020-07-05 13:18:49 -07:00
parent c71f7e70c2
commit 31d595e713
9 changed files with 239 additions and 64 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
<groupId>us.ajg0702</groupId> <groupId>us.ajg0702</groupId>
<artifactId>ajQueue</artifactId> <artifactId>ajQueue</artifactId>
<name>ajQueue</name> <name>ajQueue</name>
<version>1.5.0</version> <version>1.5.1</version>
<build> <build>
<resources> <resources>
<resource> <resource>
+1 -1
View File
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>us.ajg0702</groupId> <groupId>us.ajg0702</groupId>
<artifactId>ajQueue</artifactId> <artifactId>ajQueue</artifactId>
<version>1.5.0</version> <version>1.5.1</version>
<name>ajQueue</name> <name>ajQueue</name>
<repositories> <repositories>
@@ -0,0 +1,11 @@
package us.ajg0702.queue;
public class AliasManager {
public AliasManager(Main pl) {}
public String getAlias(String server) {
return server;
}
public String getServer(String alias) {
return alias;
}
}
@@ -6,6 +6,8 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
public class Logic { public class Logic {
static boolean isp = false;
public static void priorityLogic(List<ProxiedPlayer> list, String s, ProxiedPlayer p) {} public static void priorityLogic(List<ProxiedPlayer> list, String s, ProxiedPlayer p) {}
} }
+36 -34
View File
@@ -44,6 +44,8 @@ public class Main extends Plugin implements Listener {
MoveCommand moveCommand; MoveCommand moveCommand;
public AliasManager aliases;
@Override @Override
public void onEnable() { public void onEnable() {
plugin = this; plugin = this;
@@ -51,7 +53,7 @@ public class Main extends Plugin implements Listener {
LinkedHashMap<String, String> d = new LinkedHashMap<>(); LinkedHashMap<String, String> d = new LinkedHashMap<>();
d.put("status.offline.base", "&cThe server you are queued for is {STATUS}. &7You are in position &f{POS}&7 of &f{LEN}&7."); d.put("status.offline.base", "&c{SERVER} is {STATUS}. &7You are in position &f{POS}&7 of &f{LEN}&7.");
d.put("status.offline.offline", "offline"); d.put("status.offline.offline", "offline");
d.put("status.offline.restarting", "restarting"); d.put("status.offline.restarting", "restarting");
@@ -92,12 +94,18 @@ public class Main extends Plugin implements Listener {
d.put("placeholders.queued.none", "None"); d.put("placeholders.queued.none", "None");
d.put("placeholders.position.none", "None"); d.put("placeholders.position.none", "None");
d.put("commands.leave.more-args", "&cPlease specify which queue you want to leave! &7You are in these queues: {QUEUES}");
d.put("commands.leave.queues-list-format", "&f{NAME}&7, ");
d.put("commands.leave.not-queued", "&cYou are not queued for that server! &7You are in these queues: {QUEUES}");
msgs = BungeeMessages.getInstance(this, d); msgs = BungeeMessages.getInstance(this, d);
//msgs = BungeeMessages.getInstance(this); //msgs = BungeeMessages.getInstance(this);
config = new BungeeConfig(this); config = new BungeeConfig(this);
checkConfig(); checkConfig();
aliases = new AliasManager(this);
moveCommand = new MoveCommand(this); moveCommand = new MoveCommand(this);
this.getProxy().getPluginManager().registerCommand(this, moveCommand); this.getProxy().getPluginManager().registerCommand(this, moveCommand);
this.getProxy().getPluginManager().registerCommand(this, new ManageCommand(this)); this.getProxy().getPluginManager().registerCommand(this, new ManageCommand(this));
@@ -110,12 +118,7 @@ public class Main extends Plugin implements Listener {
timeBetweenPlayers = config.getInt("wait-time"); timeBetweenPlayers = config.getInt("wait-time");
try { isp = Logic.isp;
Class.forName("us.ajg0702.queue.Logic");
isp = true;
} catch(ClassNotFoundException e) {
isp = false;
}
man = Manager.getInstance(this); man = Manager.getInstance(this);
@@ -158,13 +161,11 @@ public class Main extends Plugin implements Listener {
@EventHandler @EventHandler
public void moveServer(ServerSwitchEvent e) { public void moveServer(ServerSwitchEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
Server alreadyqueued = man.findPlayerInQueue(p); List<Server> alreadyqueued = man.findPlayerInQueue(p);
if(alreadyqueued != null) { for(Server ser : alreadyqueued) {
List<ProxiedPlayer> queue = alreadyqueued.getQueue(); List<ProxiedPlayer> queue = ser.getQueue();
int pos = queue.indexOf(p); int pos = queue.indexOf(p);
if(pos == 0) { if((pos == 0 && p.getServer().getInfo().equals(ser.getInfo())) || config.getBoolean("remove-player-on-server-switch")) {
queue.remove(p);
} else if(config.getBoolean("remove-player-on-server-switch")) {
queue.remove(p); queue.remove(p);
} }
} }
@@ -185,8 +186,8 @@ public class Main extends Plugin implements Listener {
@EventHandler @EventHandler
public void onLeave(PlayerDisconnectEvent e) { public void onLeave(PlayerDisconnectEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
Server server = man.findPlayerInQueue(p); List<Server> servers = man.findPlayerInQueue(p);
if(server != null) { for(Server server : servers) {
server.getQueue().remove(p); server.getQueue().remove(p);
} }
} }
@@ -194,24 +195,25 @@ public class Main extends Plugin implements Listener {
@EventHandler @EventHandler
public void onFailedMove(ServerKickEvent e) { public void onFailedMove(ServerKickEvent e) {
ProxiedPlayer p = e.getPlayer(); ProxiedPlayer p = e.getPlayer();
Server server = man.findPlayerInQueue(p); List<Server> queuedServers = man.findPlayerInQueue(p);
if(server == null) return; for(Server server : queuedServers) {
if(!(e.getKickedFrom().equals(server.getInfo()))) return; if(!(e.getKickedFrom().equals(server.getInfo()))) continue;
if(server.getQueue().indexOf(p) != 0) return; if(server.getQueue().indexOf(p) != 0) continue;
List<String> kickreasons = config.getStringList("kick-reasons"); List<String> kickreasons = config.getStringList("kick-reasons");
boolean hasReason = false; boolean hasReason = false;
//getLogger().info(e.getKickReasonComponent()); //getLogger().info(e.getKickReasonComponent());
for(String reason : kickreasons) { for(String reason : kickreasons) {
for(BaseComponent b : e.getKickReasonComponent()) { for(BaseComponent b : e.getKickReasonComponent()) {
if(b.toPlainText().toLowerCase().contains(reason)) { if(b.toPlainText().toLowerCase().contains(reason)) {
hasReason = true; hasReason = true;
break; break;
}
} }
if(hasReason) break;
} }
if(hasReason) break; if(!hasReason) continue;
server.getQueue().remove(p);
} }
if(!hasReason) return;
server.getQueue().remove(p);
} }
@@ -234,10 +236,10 @@ public class Main extends Plugin implements Listener {
} }
if(subchannel.equals("queuename")) { if(subchannel.equals("queuename")) {
BungeeUtils.sendCustomData(player, "queuename", man.getQueuedName(player)); BungeeUtils.sendCustomData(player, "queuename", aliases.getAlias(man.getQueuedName(player)));
} }
if(subchannel.equals("position")) { if(subchannel.equals("position")) {
Server server = man.findPlayerInQueue(player); Server server = man.getSingleServer(player);
String pos = msgs.get("placeholders.position.none"); String pos = msgs.get("placeholders.position.none");
if(server != null) { if(server != null) {
pos = server.getQueue().indexOf(player)+1+""; pos = server.getQueue().indexOf(player)+1+"";
@@ -245,7 +247,7 @@ public class Main extends Plugin implements Listener {
BungeeUtils.sendCustomData(player, "position", pos); BungeeUtils.sendCustomData(player, "position", pos);
} }
if(subchannel.equals("positionof")) { if(subchannel.equals("positionof")) {
Server server = man.findPlayerInQueue(player); Server server = man.getSingleServer(player);
String pos = msgs.get("placeholders.position.none"); String pos = msgs.get("placeholders.position.none");
if(server != null) { if(server != null) {
pos = server.getQueue().size()+""; pos = server.getQueue().size()+"";
@@ -253,7 +255,7 @@ public class Main extends Plugin implements Listener {
BungeeUtils.sendCustomData(player, "positionof", pos); BungeeUtils.sendCustomData(player, "positionof", pos);
} }
if(subchannel.equals("inqueue")) { if(subchannel.equals("inqueue")) {
Server server = man.findPlayerInQueue(player); Server server = man.getSingleServer(player);
BungeeUtils.sendCustomData(player, "inqueue", (server != null)+""); BungeeUtils.sendCustomData(player, "inqueue", (server != null)+"");
} }
+107 -22
View File
@@ -112,16 +112,41 @@ public class Manager {
} }
/** /**
* Get the name of the server the player is queued for * Get the name of the server the player is queued for.
* If multiple servers are queued for, it will use the multi-server-queue-pick option in the config
* @param p The player * @param p The player
* @return The name of the server, the placeholder none message if not queued * @return The name of the server, the placeholder none message if not queued
*/ */
public String getQueuedName(ProxiedPlayer p) { public String getQueuedName(ProxiedPlayer p) {
Server queued = findPlayerInQueue(p); List<Server> queued = findPlayerInQueue(p);
if(queued == null) { if(queued.size() <= 0) {
return msgs.get("placeholders.queued.none"); return msgs.get("placeholders.queued.none");
} }
return queued.getName(); Server selected = queued.get(0);
if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) {
selected = queued.get(queued.size()-1);
}
return selected.getName();
}
/**
* Get a single server the player is queued for. Depends on the multi-server-queue-pick option in the config
* @param p The player
* @return The server that was chosen that the player is queued for.
*/
public Server getSingleServer(ProxiedPlayer p) {
List<Server> queued = findPlayerInQueue(p);
if(queued.size() <= 0) {
return null;
}
Server selected = queued.get(0);
if(pl.config.getString("multi-server-queue-pick").equalsIgnoreCase("last")) {
selected = queued.get(queued.size()-1);
}
return selected;
} }
@@ -147,7 +172,60 @@ public class Manager {
*/ */
public void sendActionBars() { public void sendActionBars() {
if(!pl.getConfig().getBoolean("send-actionbar")) return; if(!pl.getConfig().getBoolean("send-actionbar")) return;
for(Server s : servers) {
for(ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) {
Server s = this.getSingleServer(p);
if(s == null) continue;
List<ProxiedPlayer> plys = s.getQueue();
int pos = plys.indexOf(p)+1;
if(pos == 0) {
plys.remove(p);
continue;
}
int len = plys.size();
if(!s.isOnline() || s.isFull() || !s.canAccess(p)) {
String status = msgs.get("status.offline.restarting");
if(s.getOfflineTime() > pl.config.getInt("offline-time")) {
status = msgs.get("status.offline.offline");
}
if(!s.canAccess(p)) {
status = msgs.get("status.offline.restricted");
}
BungeeUtils.sendCustomData(p, "actionbar", msgs.get("spigot.actionbar.offline")
.replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName()))
.replaceAll("\\{STATUS\\}", status)+";time="+pl.timeBetweenPlayers);
} else {
int time = pos*pl.timeBetweenPlayers;
int min = (int) Math.floor((time) / (60));
int sec = (int) Math.floor((time % (60)));
String timeStr;
if(min <= 0) {
timeStr = msgs.get("format.time.secs")
.replaceAll("\\{m\\}", "0")
.replaceAll("\\{s\\}", sec+"");
} else {
timeStr = msgs.get("format.time.mins")
.replaceAll("\\{m\\}", min+"")
.replaceAll("\\{s\\}", sec+"");
}
BungeeUtils.sendCustomData(p, "actionbar", msgs.get("spigot.actionbar.online")
.replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName()))
.replaceAll("\\{TIME\\}", timeStr)+";time="+pl.timeBetweenPlayers);
}
}
/*for(Server s : servers) {
int ot = s.getOfflineTime(); int ot = s.getOfflineTime();
List<ProxiedPlayer> plys = s.getQueue(); List<ProxiedPlayer> plys = s.getQueue();
Iterator<ProxiedPlayer> it = plys.iterator(); Iterator<ProxiedPlayer> it = plys.iterator();
@@ -199,7 +277,7 @@ public class Manager {
.replaceAll("\\{TIME\\}", timeStr)+";time="+pl.timeBetweenPlayers); .replaceAll("\\{TIME\\}", timeStr)+";time="+pl.timeBetweenPlayers);
} }
} }
} }*/
} }
/** /**
@@ -238,7 +316,7 @@ public class Manager {
.replaceAll("\\{STATUS\\}", status) .replaceAll("\\{STATUS\\}", status)
.replaceAll("\\{POS\\}", pos+"") .replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"") .replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{SERVER\\}", s.getName()) .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName()))
)); ));
} else { } else {
int time = pos*pl.timeBetweenPlayers; int time = pos*pl.timeBetweenPlayers;
@@ -259,7 +337,7 @@ public class Manager {
.replaceAll("\\{POS\\}", pos+"") .replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"") .replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{TIME\\}", timeStr) .replaceAll("\\{TIME\\}", timeStr)
.replaceAll("\\{SERVER\\}", s.getName()) .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s.getName()))
)); ));
} }
@@ -326,7 +404,7 @@ public class Manager {
if(s.getQueue().size() <= 0) continue; if(s.getQueue().size() <= 0) continue;
if(s.isFull() && !nextplayer.hasPermission("ajqueue.joinfull")) continue; if(s.isFull() && !nextplayer.hasPermission("ajqueue.joinfull")) continue;
nextplayer.sendMessage(Main.formatMessage(msgs.get("status.sending-now").replaceAll("\\{SERVER\\}", name))); nextplayer.sendMessage(Main.formatMessage(msgs.get("status.sending-now").replaceAll("\\{SERVER\\}", pl.aliases.getAlias(name))));
nextplayer.connect(s.getInfo()); nextplayer.connect(s.getInfo());
} }
} }
@@ -348,14 +426,18 @@ public class Manager {
return; return;
} }
Server beforeQueue = findPlayerInQueue(p); List<Server> beforeQueues = findPlayerInQueue(p);
if(beforeQueue != null) { if(beforeQueues.size() > 0) {
if(beforeQueue.equals(server)) { if(beforeQueues.contains(server)) {
p.sendMessage(msgs.getBC("errors.already-queued")); p.sendMessage(msgs.getBC("errors.already-queued"));
return; return;
} }
p.sendMessage(msgs.getBC("status.left-last-queue")); if(!pl.config.getBoolean("allow-multiple-queues")) {
beforeQueue.getQueue().remove(p); p.sendMessage(msgs.getBC("status.left-last-queue"));
for(Server ser : beforeQueues) {
ser.getQueue().remove(p);
}
}
} }
List<ProxiedPlayer> list = server.getQueue(); List<ProxiedPlayer> list = server.getQueue();
@@ -396,33 +478,36 @@ public class Manager {
msgs.get("status.now-in-empty-queue") msgs.get("status.now-in-empty-queue")
.replaceAll("\\{POS\\}", pos+"") .replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"") .replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{SERVER\\}", s) .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s))
)); ));
} else { } else {
p.sendMessage(Main.formatMessage( p.sendMessage(Main.formatMessage(
msgs.get("status.now-in-queue") msgs.get("status.now-in-queue")
.replaceAll("\\{POS\\}", pos+"") .replaceAll("\\{POS\\}", pos+"")
.replaceAll("\\{LEN\\}", len+"") .replaceAll("\\{LEN\\}", len+"")
.replaceAll("\\{SERVER\\}", s) .replaceAll("\\{SERVER\\}", pl.aliases.getAlias(s))
)); ));
} }
BungeeUtils.sendCustomData(p, "position", pos+""); BungeeUtils.sendCustomData(p, "position", pos+"");
BungeeUtils.sendCustomData(p, "positionof", len+""); BungeeUtils.sendCustomData(p, "positionof", len+"");
BungeeUtils.sendCustomData(p, "queuename", s); BungeeUtils.sendCustomData(p, "queuename", pl.aliases.getAlias(s));
BungeeUtils.sendCustomData(p, "inqueue", "true"); BungeeUtils.sendCustomData(p, "inqueue", "true");
} }
/** /**
* Finds which server the player is queued for * Finds which servers the player is queued for
* @param p The player to search for * @param p The player to search for
* @return The server the player is queued for. Null if not in a queue * @return The servers the player is queued for.
*/ */
public Server findPlayerInQueue(ProxiedPlayer p) { public List<Server> findPlayerInQueue(ProxiedPlayer p) {
List<Server> srs = new ArrayList<>();
for(Server s : servers) { for(Server s : servers) {
if(s.getQueue().contains(p)) return s; if(s.getQueue().contains(p)) {
srs.add(s);
}
} }
return null; return srs;
} }
public Server getServer(String name) { public Server getServer(String name) {
+10 -1
View File
@@ -7,13 +7,16 @@ import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ServerPing; import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import us.ajg0702.utils.bungee.BungeeConfig;
public class Server { public class Server {
String name; String name;
ServerInfo info; ServerInfo info;
BungeeConfig config;
public Server(String name, ServerInfo info) { public Server(String name, ServerInfo info) {
this.name = name; this.name = name;
this.info = info; this.info = info;
config = Manager.getInstance().pl.config;
update(); update();
} }
@@ -70,8 +73,14 @@ public class Server {
public int getOfflineTime() { public int getOfflineTime() {
return offlineTime; return offlineTime;
} }
long lastOffline = 0;
public boolean isOnline() { public boolean isOnline() {
if(System.currentTimeMillis()-lastOffline <= (config.getInt("wait-after-online")*1000) && online) {
return false;
}
if(!online) {
lastOffline = System.currentTimeMillis();
}
return online; return online;
} }
public boolean isFull() { public boolean isFull() {
@@ -1,5 +1,7 @@
package us.ajg0702.queue.commands; package us.ajg0702.queue.commands;
import java.util.List;
import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.Command;
@@ -23,11 +25,47 @@ public class LeaveCommand extends Command {
sender.sendMessage(msgs.getBC("errors.player-only")); sender.sendMessage(msgs.getBC("errors.player-only"));
return; return;
} }
Manager man = Manager.getInstance();
ProxiedPlayer p = (ProxiedPlayer) sender; ProxiedPlayer p = (ProxiedPlayer) sender;
Server server = Manager.getInstance().findPlayerInQueue((ProxiedPlayer) sender); List<Server> servers = man.findPlayerInQueue(p);
if(server != null) {
server.getQueue().remove(p);
p.sendMessage(msgs.getBC("commands.leave-queue", "SERVER:"+server.getName())); if(servers.size() == 1) {
servers.get(0).getQueue().remove(p);
p.sendMessage(msgs.getBC("commands.leave-queue", "SERVER:"+plugin.aliases.getAlias(servers.get(0).getName())));
return;
} }
if(args.length <= 0) {
p.sendMessage(msgs.getBC("commands.leave.more-args", "QUEUES:"+getQueueList(servers)));
return;
}
String leaving = args[0];
Server leavingsrv = man.getServer(leaving);
if(leavingsrv == null) {
p.sendMessage(msgs.getBC("commands.leave.not-queued", "QUEUES:"+getQueueList(servers)));
return;
}
if(leavingsrv.getQueue().indexOf(p) == -1) {
p.sendMessage(msgs.getBC("commands.leave.not-queued", "QUEUES:"+getQueueList(servers)));
return;
}
leavingsrv.getQueue().remove(p);
p.sendMessage(msgs.getBC("commands.leave-queue", "SERVER:"+plugin.aliases.getAlias(leavingsrv.getName())));
}
private String getQueueList(List<Server> servers) {
String queueList = "";
for(Server server : servers) {
queueList += msgs.get("commands.leave.queues-list-format").replaceAll("\\{NAME\\}", server.getName());
}
if(queueList.length() > 2) {
queueList = queueList.substring(0, queueList.length()-2);
}
return queueList;
} }
} }
+29 -1
View File
@@ -1,5 +1,5 @@
# Dont touch this number please # Dont touch this number please
config-version: 8 config-version: 11
# The time the server will wait between sending people in the queue # The time the server will wait between sending people in the queue
# Default: 5 # Default: 5
@@ -60,3 +60,31 @@ reload-servers-interval: 0
# If enabled, players will be required to have the permission ajqueue.queue.<server> # If enabled, players will be required to have the permission ajqueue.queue.<server>
# Default: false # Default: false
require-permission: false require-permission: false
# Should we let players join more than one queue?
# If enabled, players will be able to be in multiple queues at once.
# Default: true
allow-multiple-queues: true
# If the player is queued for multiple servers, which server should we pick to use in things like placeholders and actionbars
# Options are first and last
# Default: last
multi-server-queue-pick: last
# THIS FEATURE IS ONLY AVAILABLE ON ajQueuePlus (https://www.spigotmc.org/resources/ajqueueplus.79123/)
# This will show players a different name than the actual bungeecord server name
# for example, instead of showing players "event-a", this option can make it appear as "Event A"
# With this example, you would use this: - "event-a:Event A"
# Note that currently players still have to use the normal names in queue commands and leave commands
server-aliases:
- "event-a:Event A"
# How long should we wait after a server is online before sending players?
# The server will still show up as offline or restarting until this amount of time after its up
# Meant to let your server 'cool down' after lag from starting up
# In seconds
# Default: 1
wait-after-online: 1