premium logic finished

This commit is contained in:
ajgeiss0702
2021-07-28 14:25:05 -07:00
parent a88a142348
commit 15fd7f61ad
26 changed files with 267 additions and 91 deletions
@@ -3,8 +3,6 @@ package us.ajg0702.queue.api;
import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.commands.IBaseCommand;
import us.ajg0702.queue.api.commands.ICommandSender; import us.ajg0702.queue.api.commands.ICommandSender;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.players.QueuePlayer;
import us.ajg0702.queue.api.queues.QueueServer;
import java.util.List; import java.util.List;
@@ -34,6 +32,14 @@ public interface PlatformMethods {
List<String> getServerNames(); List<String> getServerNames();
String getImplementationName();
List<IBaseCommand> getCommands(); List<IBaseCommand> getCommands();
/**
* Checks if a plugin is installed
* @param pluginName The name of the plugin to check for (case in-sensitive)
* @return if the plugin is on the server
*/
boolean hasPlugin(String pluginName);
} }
@@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull;
import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.util.Handle; import us.ajg0702.queue.api.util.Handle;
import java.util.List;
import java.util.UUID; import java.util.UUID;
/** /**
@@ -70,4 +71,6 @@ public interface AdaptedPlayer extends Handle, Audience {
* @return the player's username * @return the player's username
*/ */
String getName(); String getName();
List<String> getPermissions();
} }
@@ -65,7 +65,7 @@ public interface QueuePlayer {
/** /**
* Gets the max number of seconds this player is allowed to be offline before getting removed from the queue. * Gets the max number of seconds this player is allowed to be offline before getting removed from the queue.
* @return * @return the max number of seconds this player can be offline before being removed from the queue
*/ */
int getMaxOfflineTime(); int getMaxOfflineTime();
} }
@@ -68,7 +68,7 @@ public class ListCommand extends BaseCommand {
m = m.append(Component.text("\n")); m = m.append(Component.text("\n"));
m = m.append(main.getMessages().getComponent("commands.listqueues.format", m = m.append(main.getMessages().getComponent("commands.listqueues.format",
"COLOR:" + main.getMessages().color(color), "COLOR:" + main.getMessages().color(color),
"NAME:" + s.getName(), "NAME:" + s.getAlias(),
"COUNT:" + s.getQueue().size(), "COUNT:" + s.getQueue().size(),
"STATUS:" + s.getStatusString(spp) "STATUS:" + s.getStatusString(spp)
)); ));
@@ -1,7 +1,6 @@
package us.ajg0702.queue.commands.commands.manage; package us.ajg0702.queue.commands.commands.manage;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import net.kyori.adventure.text.Component;
import us.ajg0702.queue.api.commands.ICommandSender; import us.ajg0702.queue.api.commands.ICommandSender;
import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.commands.SubCommand; import us.ajg0702.queue.commands.SubCommand;
@@ -4,14 +4,12 @@ import com.google.common.collect.ImmutableList;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import us.ajg0702.queue.api.commands.ICommandSender; import us.ajg0702.queue.api.commands.ICommandSender;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.queues.QueueServer;
import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.commands.SubCommand; import us.ajg0702.queue.commands.SubCommand;
import us.ajg0702.queue.common.QueueMain; import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.utils.common.Messages; import us.ajg0702.utils.common.Messages;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class Send extends SubCommand { public class Send extends SubCommand {
@@ -15,7 +15,7 @@ import java.io.IOException;
public class EventHandlerImpl implements EventHandler { public class EventHandlerImpl implements EventHandler {
QueueMain main; final QueueMain main;
public EventHandlerImpl(QueueMain main) { public EventHandlerImpl(QueueMain main) {
this.main = main; this.main = main;
} }
@@ -9,7 +9,6 @@ import us.ajg0702.queue.api.server.AdaptedServer;
import us.ajg0702.queue.api.server.ServerBuilder; import us.ajg0702.queue.api.server.ServerBuilder;
import us.ajg0702.queue.common.players.QueuePlayerImpl; import us.ajg0702.queue.common.players.QueuePlayerImpl;
import us.ajg0702.queue.common.queues.QueueServerImpl; import us.ajg0702.queue.common.queues.QueueServerImpl;
import us.ajg0702.utils.bungee.BungeeUtils;
import us.ajg0702.utils.common.Messages; import us.ajg0702.utils.common.Messages;
import us.ajg0702.utils.common.TimeUtils; import us.ajg0702.utils.common.TimeUtils;
@@ -50,7 +50,7 @@ public class TaskManager {
updateTask = scheduleAtFixedRate(updateExecutor, updateTask = scheduleAtFixedRate(updateExecutor,
main.getQueueManager()::updateServers, main.getQueueManager()::updateServers,
0L, 500L,
(long) (Math.max(main.getTimeBetweenPlayers(), 2)*1000L), (long) (Math.max(main.getTimeBetweenPlayers(), 2)*1000L),
TimeUnit.MILLISECONDS TimeUnit.MILLISECONDS
); );
@@ -88,7 +88,7 @@ public class TaskManager {
sendTask.cancel(false); sendTask.cancel(false);
} }
if(updateTask != null && !updateTask.isCancelled()) { if(updateTask != null && !updateTask.isCancelled()) {
updateTask.cancel(false); updateTask.cancel(true);
} }
if(messageTask != null && !messageTask.isCancelled()) { if(messageTask != null && !messageTask.isCancelled()) {
messageTask.cancel(false); messageTask.cancel(false);
@@ -18,6 +18,6 @@ public class FreeLogic implements Logic {
@Override @Override
public boolean playerDisconnectedTooLong(QueuePlayer player) { public boolean playerDisconnectedTooLong(QueuePlayer player) {
return 60000L < player.getTimeSinceOnline(); return player.getMaxOfflineTime() < player.getTimeSinceOnline();
} }
} }
@@ -38,7 +38,7 @@ public class VelocityMethods implements PlatformMethods {
public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) { public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) {
if(player == null) return; if(player == null) return;
Player velocityPlayer = ((VelocityPlayer) player).getHandle(); Player velocityPlayer = ((VelocityPlayer) player).getHandle();
ByteArrayDataOutput out = ByteStreams.newDataOutput(); @SuppressWarnings("UnstableApiUsage") ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF( channel ); out.writeUTF( channel );
out.writeUTF(player.getName()); out.writeUTF(player.getName());
for(String s : data) { for(String s : data) {
@@ -109,8 +109,18 @@ public class VelocityMethods implements PlatformMethods {
return names; return names;
} }
@Override
public String getImplementationName() {
return "velocity";
}
@Override @Override
public List<IBaseCommand> getCommands() { public List<IBaseCommand> getCommands() {
return plugin.commands; return plugin.commands;
} }
@Override
public boolean hasPlugin(String pluginName) {
return proxyServer.getPluginManager().getPlugin(pluginName.toLowerCase(Locale.ROOT)).isPresent();
}
} }
@@ -10,6 +10,7 @@ import org.jetbrains.annotations.NotNull;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.server.AdaptedServer;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
@@ -70,6 +71,11 @@ public class VelocityPlayer implements AdaptedPlayer, Audience {
return handle.getUsername(); return handle.getUsername();
} }
@Override
public List<String> getPermissions() {
throw new IllegalStateException("AdaptedPlayer#getPermissions cannot be used on velocity");
}
@Override @Override
public Player getHandle() { public Player getHandle() {
return handle; return handle;
@@ -10,7 +10,6 @@ import us.ajg0702.queue.api.server.AdaptedServerPing;
import us.ajg0702.queue.platforms.velocity.players.VelocityPlayer; import us.ajg0702.queue.platforms.velocity.players.VelocityPlayer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
+8
View File
@@ -9,6 +9,8 @@ group = "us.ajg0702.queue"
repositories { repositories {
mavenCentral() mavenCentral()
maven { url = uri("https://repo.ajg0702.us") } maven { url = uri("https://repo.ajg0702.us") }
maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") }
} }
dependencies { dependencies {
@@ -22,6 +24,12 @@ dependencies {
compileOnly("us.ajg0702:ajUtils:1.1.6") compileOnly("us.ajg0702:ajUtils:1.1.6")
compileOnly("net.kyori:adventure-api:4.8.1") compileOnly("net.kyori:adventure-api:4.8.1")
compileOnly("net.luckperms:api:5.0")
}
tasks.shadowJar {
archiveFileName.set("${baseName}-${version}.${extension}")
} }
publishing { publishing {
@@ -3,12 +3,13 @@ package us.ajg0702.queue.logic;
import us.ajg0702.queue.api.AliasManager; import us.ajg0702.queue.api.AliasManager;
import us.ajg0702.queue.api.Logic; import us.ajg0702.queue.api.Logic;
import us.ajg0702.queue.api.LogicGetter; import us.ajg0702.queue.api.LogicGetter;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.utils.common.Config; import us.ajg0702.utils.common.Config;
public class LogicGetterImpl implements LogicGetter { public class LogicGetterImpl implements LogicGetter {
@Override @Override
public Logic constructLogic() { public Logic constructLogic() {
return new PremiumLogic(); return new PremiumLogic(QueueMain.getInstance());
} }
@Override @Override
@@ -11,6 +11,12 @@ import us.ajg0702.queue.common.players.QueuePlayerImpl;
import us.ajg0702.queue.logic.permissions.PermissionGetter; import us.ajg0702.queue.logic.permissions.PermissionGetter;
public class PremiumLogic implements Logic { public class PremiumLogic implements Logic {
private final PermissionGetter permissionGetter;
public PremiumLogic(QueueMain main) {
permissionGetter = new PermissionGetter(main);
}
@Override @Override
public boolean isPremium() { public boolean isPremium() {
return true; return true;
@@ -18,27 +24,34 @@ public class PremiumLogic implements Logic {
@Override @Override
public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) { public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) {
int maxOfflineTime = PermissionGetter.getMaxOfflineTime(player); int maxOfflineTime = permissionGetter.getMaxOfflineTime(player);
QueueMain main = QueueMain.getInstance(); QueueMain main = QueueMain.getInstance();
QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if(player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName())) { if(player.hasPermission("ajqueue.bypass") || player.hasPermission("ajqueue.serverbypass."+server.getName())) {
if(debug) {
logger.info("[priority] "+player.getName()+" bypass");
}
QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, Integer.MAX_VALUE, maxOfflineTime); QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, Integer.MAX_VALUE, maxOfflineTime);
server.addPlayer(queuePlayer, 0); server.addPlayer(queuePlayer, 0);
main.getQueueManager().sendPlayers(server); main.getQueueManager().sendPlayers(server);
return queuePlayer; return queuePlayer;
} }
int priority = PermissionGetter.getPriority(player); int priority = permissionGetter.getPriority(player);
int serverPriority = PermissionGetter.getServerPriotity(server.getName(), player); int serverPriority = permissionGetter.getServerPriotity(server.getName(), player);
if(debug) {
logger.info("[priority] Using "+permissionGetter.getSelected().getName()+" for permissions");
}
int highestPriority = Math.max(priority, serverPriority); int highestPriority = Math.max(priority, serverPriority);
QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, highestPriority, maxOfflineTime); QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, highestPriority, maxOfflineTime);
QueueLogger logger = main.getLogger();
boolean debug = main.getConfig().getBoolean("priority-queue-debug");
if(debug) { if(debug) {
logger.info("[priority] "+player.getName()+" highestPriority: "+highestPriority); logger.info("[priority] "+player.getName()+" highestPriority: "+highestPriority);
logger.info("[priority] "+player.getName()+" priority: "+priority); logger.info("[priority] "+player.getName()+" priority: "+priority);
@@ -1,20 +1,70 @@
package us.ajg0702.queue.logic.permissions; package us.ajg0702.queue.logic.permissions;
import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.hooks.BuiltIn;
import us.ajg0702.queue.logic.permissions.hooks.LuckPermsHook;
import java.util.*;
public class PermissionGetter { public class PermissionGetter {
//TODO: all of this private final List<PermissionHook> hooks;
public static int getMaxOfflineTime(AdaptedPlayer player) { private QueueMain main;
return -1; public PermissionGetter(QueueMain main) {
hooks = Arrays.asList(
new BuiltIn(main),
new LuckPermsHook(main)
);
} }
public static int getPriority(AdaptedPlayer player) { private PermissionHook selected;
return -1; public PermissionHook getSelected() {
if(selected != null) return selected;
if(hooks == null) {
throw new IllegalStateException("Hooks are not initialized yet!");
}
for(PermissionHook hook : hooks) {
if(hook.canUse()) {
selected = hook;
}
}
return selected;
} }
public static int getServerPriotity(String server, AdaptedPlayer player) { public int getMaxOfflineTime(AdaptedPlayer player) {
return -1; return getHighestPermission(player, "ajqueue.stayqueued.");
}
public int getPriority(AdaptedPlayer player) {
return getHighestPermission(player, "ajqueue.priority.");
}
public int getServerPriotity(String server, AdaptedPlayer player) {
return getHighestPermission(player, "ajqueue.serverpriority."+server+".");
}
private int getHighestPermission(AdaptedPlayer player, String prefix) {
if(getSelected() == null) {
return -1;
}
List<String> perms = getSelected().getPermissions(player);
Iterator<String> it = perms.iterator();
String highestPerm = prefix+"0";
while(it.hasNext()) {
String perm = it.next();
if(!perm.startsWith(prefix)) continue;
if(highestPerm.isEmpty()) {
highestPerm = perm;
continue;
}
int level = Integer.parseInt(perm.substring(prefix.length()));
int highestlevel = Integer.parseInt(highestPerm.substring(prefix.length()));
if(level > highestlevel) {
highestPerm = perm;
}
}
return Integer.parseInt(highestPerm.substring(prefix.length()));
} }
} }
@@ -0,0 +1,11 @@
package us.ajg0702.queue.logic.permissions;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import java.util.List;
public interface PermissionHook {
String getName();
boolean canUse();
List<String> getPermissions(AdaptedPlayer player);
}
@@ -0,0 +1,34 @@
package us.ajg0702.queue.logic.permissions.hooks;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.PermissionHook;
import java.util.ArrayList;
import java.util.List;
public class BuiltIn implements PermissionHook {
private final QueueMain main;
public BuiltIn(QueueMain main) {
this.main = main;
}
@Override
public String getName() {
return "Built-In";
}
@Override
public boolean canUse() {
return true;
}
@Override
public List<String> getPermissions(AdaptedPlayer player) {
if(main.getPlatformMethods().getImplementationName().equals("velocity")) {
return new ArrayList<>();
}
return player.getPermissions();
}
}
@@ -0,0 +1,51 @@
package us.ajg0702.queue.logic.permissions.hooks;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeType;
import net.luckperms.api.query.QueryOptions;
import us.ajg0702.queue.api.players.AdaptedPlayer;
import us.ajg0702.queue.common.QueueMain;
import us.ajg0702.queue.logic.permissions.PermissionHook;
import java.util.*;
public class LuckPermsHook implements PermissionHook {
private final QueueMain main;
public LuckPermsHook(QueueMain main) {
this.main = main;
}
@Override
public String getName() {
return "LuckPerms";
}
@Override
public boolean canUse() {
return main.getPlatformMethods().hasPlugin("LuckPerms");
}
@Override
public List<String> getPermissions(AdaptedPlayer player) {
LuckPerms api = LuckPermsProvider.get();
User user = api.getUserManager().getUser(player.getUniqueId());
assert user != null;
SortedSet<Node> nodes = user.resolveDistinctInheritedNodes(QueryOptions.defaultContextualOptions());
List<String> perms = new ArrayList<>();
for (Node node : nodes) {
if (!node.getType().equals(NodeType.PERMISSION)) continue;
if (!node.getValue()) continue;
perms.add(node.getKey());
}
return perms;
}
}
@@ -6,16 +6,17 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
public class Commands implements CommandExecutor { public class Commands implements CommandExecutor {
SpigotMain pl; final SpigotMain pl;
public Commands(SpigotMain pl) { public Commands(SpigotMain pl) {
this.pl = pl; this.pl = pl;
} }
@Override @Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
Player player = null; Player player = null;
if(sender instanceof Player) { if(sender instanceof Player) {
player = (Player) sender; player = (Player) sender;
@@ -51,6 +52,7 @@ public class Commands implements CommandExecutor {
if(pl.config.getBoolean("send-queue-commands-in-batches")) { if(pl.config.getBoolean("send-queue-commands-in-batches")) {
pl.queuebatch.put(player, srvname); pl.queuebatch.put(player, srvname);
} else { } else {
assert player != null;
pl.sendMessage(player, "queue", srvname); pl.sendMessage(player, "queue", srvname);
} }
@@ -9,10 +9,10 @@ import java.io.PrintWriter;
import java.nio.file.Files; import java.nio.file.Files;
public class Config { public class Config {
File f; final File f;
YamlConfiguration yml; final YamlConfiguration yml;
JavaPlugin pl; final JavaPlugin pl;
public boolean getBoolean(String key) { public boolean getBoolean(String key) {
@@ -14,7 +14,7 @@ import java.util.Iterator;
*/ */
public class Placeholders extends PlaceholderExpansion { public class Placeholders extends PlaceholderExpansion {
private SpigotMain plugin; private final SpigotMain plugin;
/** /**
* Since we register the expansion inside our own plugin, we * Since we register the expansion inside our own plugin, we
@@ -89,7 +89,7 @@ public class Placeholders extends PlaceholderExpansion {
return plugin.getDescription().getVersion(); return plugin.getDescription().getVersion();
} }
HashMap<Player, HashMap<String, String>> responseCache = new HashMap<>(); final HashMap<Player, HashMap<String, String>> responseCache = new HashMap<>();
public void cleanCache() { public void cleanCache() {
Iterator<Player> it = responseCache.keySet().iterator(); Iterator<Player> it = responseCache.keySet().iterator();
@@ -135,31 +135,25 @@ public class Placeholders extends PlaceholderExpansion {
} }
} }
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
public void run() { HashMap<String, String> playerCache;
HashMap<String, String> playerCache; if(responseCache.containsKey(player)) {
if(responseCache.containsKey(player)) { playerCache = responseCache.get(player);
playerCache = responseCache.get(player); } else {
} else { playerCache = new HashMap<>();
playerCache = new HashMap<String, String>(); }
} if(playerCache.size() > 75) {
if(playerCache.size() > 75) { try {
try { playerCache.remove(playerCache.keySet().toArray()[0]);
playerCache.remove(playerCache.keySet().toArray()[0]); } catch(ConcurrentModificationException e) {
} catch(ConcurrentModificationException e) { Bukkit.getScheduler().runTask(plugin, () -> playerCache.remove(playerCache.keySet().toArray()[0]));
Bukkit.getScheduler().runTask(plugin, new Runnable() { }
public void run() { }
playerCache.remove(playerCache.keySet().toArray()[0]); String resp = parsePlaceholder(player, identifier);
} if(resp == null) return;
}); playerCache.put(identifier, resp);
} responseCache.put(player, playerCache);
} });
String resp = parsePlaceholder(player, identifier);
if(resp == null) return;
playerCache.put(identifier, resp);
responseCache.put(player, playerCache);
}
});
if(responseCache.containsKey(player)) { if(responseCache.containsKey(player)) {
@@ -189,23 +183,18 @@ public class Placeholders extends PlaceholderExpansion {
private String parsePlaceholder(Player player, String identifier) { private String parsePlaceholder(Player player, String identifier) {
if(identifier.equalsIgnoreCase("queued")) { if(identifier.equalsIgnoreCase("queued")) {
plugin.sendMessage(player, "queuename", ""); plugin.sendMessage(player, "queuename", "");
return null;
} }
if(identifier.equalsIgnoreCase("position")) { if(identifier.equalsIgnoreCase("position")) {
plugin.sendMessage(player, "position", ""); plugin.sendMessage(player, "position", "");
return null;
} }
if(identifier.equalsIgnoreCase("of")) { if(identifier.equalsIgnoreCase("of")) {
plugin.sendMessage(player, "positionof", ""); plugin.sendMessage(player, "positionof", "");
return null;
} }
if(identifier.equalsIgnoreCase("inqueue")) { if(identifier.equalsIgnoreCase("inqueue")) {
plugin.sendMessage(player, "inqueue", ""); plugin.sendMessage(player, "inqueue", "");
return null;
} }
if(identifier.matches("queuedfor_*.*")) { if(identifier.matches("queuedfor_*.*")) {
plugin.sendMessage(player, "queuedfor", identifier.split("_")[1]); plugin.sendMessage(player, "queuedfor", identifier.split("_")[1]);
return null;
} }
@@ -3,11 +3,12 @@ package us.ajg0702.queue.spigot;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class QueueScoreboardActivator extends Event { public class QueueScoreboardActivator extends Event {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
public HandlerList getHandlers() { public @NotNull HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@@ -15,7 +16,7 @@ public class QueueScoreboardActivator extends Event {
return HANDLERS; return HANDLERS;
} }
Player ply; final Player ply;
public QueueScoreboardActivator(Player p) { public QueueScoreboardActivator(Player p) {
this.ply = p; this.ply = p;
@@ -11,10 +11,10 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.plugin.messaging.PluginMessageListener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import us.ajg0702.queue.spigot.utils.VersionSupport;
import java.util.HashMap; import java.util.HashMap;
@SuppressWarnings("UnstableApiUsage")
public class SpigotMain extends JavaPlugin implements PluginMessageListener,Listener { public class SpigotMain extends JavaPlugin implements PluginMessageListener,Listener {
boolean papi = false; boolean papi = false;
@@ -22,6 +22,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
Config config; Config config;
@SuppressWarnings("ConstantConditions")
public void onEnable() { public void onEnable() {
getServer().getMessenger().registerIncomingPluginChannel(this, "ajqueue:tospigot", this); getServer().getMessenger().registerIncomingPluginChannel(this, "ajqueue:tospigot", this);
getServer().getMessenger().registerOutgoingPluginChannel(this, "ajqueue:toproxy"); getServer().getMessenger().registerOutgoingPluginChannel(this, "ajqueue:toproxy");
@@ -39,20 +40,18 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
getLogger().info("Registered PlaceholderAPI placeholders"); getLogger().info("Registered PlaceholderAPI placeholders");
} }
Bukkit.getScheduler().runTaskTimer(this, new Runnable() { Bukkit.getScheduler().runTaskTimer(this, () -> {
public void run() { if(Bukkit.getOnlinePlayers().size() <= 0 || queuebatch.size() <= 0) return;
if(Bukkit.getOnlinePlayers().size() <= 0 || queuebatch.size() <= 0) return; StringBuilder msg = new StringBuilder();
String msg = ""; for(Player p : queuebatch.keySet()) {
for(Player p : queuebatch.keySet()) { if(p == null || !p.isOnline()) continue;
if(p == null || !p.isOnline()) continue; msg.append(p.getName()).append(":").append(queuebatch.get(p)).append(",");
msg += p.getName()+":"+queuebatch.get(p)+",";
}
if(msg.length() > 1) {
msg = msg.substring(0, msg.length()-1);
}
queuebatch.clear();
sendMessage("massqueue", msg);
} }
if(msg.length() > 1) {
msg = new StringBuilder(msg.substring(0, msg.length() - 1));
}
queuebatch.clear();
sendMessage("massqueue", msg.toString());
}, 2*20, 20); }, 2*20, 20);
config = new Config(this); config = new Config(this);
@@ -60,10 +59,10 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
getLogger().info("Spigot side enabled! v"+getDescription().getVersion()); getLogger().info("Spigot side enabled! v"+getDescription().getVersion());
} }
HashMap<Player, String> queuebatch = new HashMap<>(); final HashMap<Player, String> queuebatch = new HashMap<>();
@Override @Override
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) { public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte[] message) {
if (!channel.equals("ajqueue:tospigot")) return; if (!channel.equals("ajqueue:tospigot")) return;
ByteArrayDataInput in = ByteStreams.newDataInput(message); ByteArrayDataInput in = ByteStreams.newDataInput(message);
@@ -133,7 +132,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List
if(p == null) return; if(p == null) return;
if(!p.isOnline()) return; if(!p.isOnline()) return;
int number = Integer.valueOf(in.readUTF()); int number = Integer.parseInt(in.readUTF());
HashMap<String, String> phs = placeholders.responseCache.get(p); HashMap<String, String> phs = placeholders.responseCache.get(p);
if(phs == null) phs = new HashMap<>(); if(phs == null) phs = new HashMap<>();
phs.put("queuedfor_"+queuename, number+""); phs.put("queuedfor_"+queuename, number+"");
@@ -12,18 +12,15 @@ import java.lang.reflect.Method;
* *
*/ */
public class ActionBar { public class ActionBar {
private static String version;
private static boolean old;
public static void send(Player player, String message) { public static void send(Player player, String message) {
if(player == null) return; if(player == null) return;
if(!player.isOnline()) return; if(!player.isOnline()) return;
version = Bukkit.getServer().getClass().getPackage().getName(); String version = Bukkit.getServer().getClass().getPackage().getName();
version = version.substring(version.lastIndexOf(".") + 1); version = version.substring(version.lastIndexOf(".") + 1);
old = version.equalsIgnoreCase("v1_8_R1") || version.startsWith("v1_7_"); boolean old = version.equalsIgnoreCase("v1_8_R1") || version.startsWith("v1_7_");
try { try {
Class<?> craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer"); Class<?> craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");