From 15fd7f61ad994d08e845872146f872ab513f9ce2 Mon Sep 17 00:00:00 2001 From: ajgeiss0702 Date: Wed, 28 Jul 2021 14:25:05 -0700 Subject: [PATCH] premium logic finished --- .../us/ajg0702/queue/api/PlatformMethods.java | 10 ++- .../queue/api/players/AdaptedPlayer.java | 3 + .../queue/api/players/QueuePlayer.java | 2 +- .../commands/listqueues/ListCommand.java | 2 +- .../queue/commands/commands/manage/Pause.java | 1 - .../queue/commands/commands/manage/Send.java | 2 - .../queue/common/EventHandlerImpl.java | 2 +- .../queue/common/QueueManagerImpl.java | 1 - .../us/ajg0702/queue/common/TaskManager.java | 4 +- .../us/ajg0702/queue/logic/FreeLogic.java | 2 +- .../platforms/velocity/VelocityMethods.java | 12 +++- .../velocity/players/VelocityPlayer.java | 6 ++ .../velocity/server/VelocityServer.java | 1 - premium/build.gradle.kts | 8 +++ .../ajg0702/queue/logic/LogicGetterImpl.java | 3 +- .../us/ajg0702/queue/logic/PremiumLogic.java | 25 ++++++-- .../logic/permissions/PermissionGetter.java | 64 +++++++++++++++++-- .../logic/permissions/PermissionHook.java | 11 ++++ .../logic/permissions/hooks/BuiltIn.java | 34 ++++++++++ .../permissions/hooks/LuckPermsHook.java | 51 +++++++++++++++ .../us/ajg0702/queue/spigot/Commands.java | 6 +- .../java/us/ajg0702/queue/spigot/Config.java | 6 +- .../us/ajg0702/queue/spigot/Placeholders.java | 53 ++++++--------- .../spigot/QueueScoreboardActivator.java | 5 +- .../us/ajg0702/queue/spigot/SpigotMain.java | 33 +++++----- .../ajg0702/queue/spigot/utils/ActionBar.java | 11 ++-- 26 files changed, 267 insertions(+), 91 deletions(-) create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltIn.java create mode 100644 premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java diff --git a/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java b/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java index 51f118a..8cd0433 100644 --- a/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java +++ b/api/src/main/java/us/ajg0702/queue/api/PlatformMethods.java @@ -3,8 +3,6 @@ package us.ajg0702.queue.api; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.commands.ICommandSender; 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; @@ -34,6 +32,14 @@ public interface PlatformMethods { List getServerNames(); + String getImplementationName(); List 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); } diff --git a/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java b/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java index 6a8ced7..7e725e4 100644 --- a/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java +++ b/api/src/main/java/us/ajg0702/queue/api/players/AdaptedPlayer.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.server.AdaptedServer; import us.ajg0702.queue.api.util.Handle; +import java.util.List; import java.util.UUID; /** @@ -70,4 +71,6 @@ public interface AdaptedPlayer extends Handle, Audience { * @return the player's username */ String getName(); + + List getPermissions(); } diff --git a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java index ed5d6e9..7008553 100644 --- a/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java +++ b/api/src/main/java/us/ajg0702/queue/api/players/QueuePlayer.java @@ -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. - * @return + * @return the max number of seconds this player can be offline before being removed from the queue */ int getMaxOfflineTime(); } diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/listqueues/ListCommand.java b/common/src/main/java/us/ajg0702/queue/commands/commands/listqueues/ListCommand.java index 8c83202..1c6f35f 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/listqueues/ListCommand.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/listqueues/ListCommand.java @@ -68,7 +68,7 @@ public class ListCommand extends BaseCommand { m = m.append(Component.text("\n")); m = m.append(main.getMessages().getComponent("commands.listqueues.format", "COLOR:" + main.getMessages().color(color), - "NAME:" + s.getName(), + "NAME:" + s.getAlias(), "COUNT:" + s.getQueue().size(), "STATUS:" + s.getStatusString(spp) )); diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java index d25575c..1813c3d 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Pause.java @@ -1,7 +1,6 @@ package us.ajg0702.queue.commands.commands.manage; import com.google.common.collect.ImmutableList; -import net.kyori.adventure.text.Component; import us.ajg0702.queue.api.commands.ICommandSender; import us.ajg0702.queue.api.queues.QueueServer; import us.ajg0702.queue.commands.SubCommand; diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Send.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Send.java index 37cc4bf..1eea23e 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Send.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/Send.java @@ -4,14 +4,12 @@ import com.google.common.collect.ImmutableList; import net.kyori.adventure.text.Component; import us.ajg0702.queue.api.commands.ICommandSender; 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.commands.SubCommand; import us.ajg0702.queue.common.QueueMain; import us.ajg0702.utils.common.Messages; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class Send extends SubCommand { diff --git a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java index b200990..1853b32 100644 --- a/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/EventHandlerImpl.java @@ -15,7 +15,7 @@ import java.io.IOException; public class EventHandlerImpl implements EventHandler { - QueueMain main; + final QueueMain main; public EventHandlerImpl(QueueMain main) { this.main = main; } diff --git a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java index 350b604..07cb3cf 100644 --- a/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java +++ b/common/src/main/java/us/ajg0702/queue/common/QueueManagerImpl.java @@ -9,7 +9,6 @@ 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; diff --git a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java index 04bc2b9..f972ea1 100644 --- a/common/src/main/java/us/ajg0702/queue/common/TaskManager.java +++ b/common/src/main/java/us/ajg0702/queue/common/TaskManager.java @@ -50,7 +50,7 @@ public class TaskManager { updateTask = scheduleAtFixedRate(updateExecutor, main.getQueueManager()::updateServers, - 0L, + 500L, (long) (Math.max(main.getTimeBetweenPlayers(), 2)*1000L), TimeUnit.MILLISECONDS ); @@ -88,7 +88,7 @@ public class TaskManager { sendTask.cancel(false); } if(updateTask != null && !updateTask.isCancelled()) { - updateTask.cancel(false); + updateTask.cancel(true); } if(messageTask != null && !messageTask.isCancelled()) { messageTask.cancel(false); diff --git a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java index 948da26..fbfe2d3 100644 --- a/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java +++ b/common/src/main/java/us/ajg0702/queue/logic/FreeLogic.java @@ -18,6 +18,6 @@ public class FreeLogic implements Logic { @Override public boolean playerDisconnectedTooLong(QueuePlayer player) { - return 60000L < player.getTimeSinceOnline(); + return player.getMaxOfflineTime() < player.getTimeSinceOnline(); } } diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java index 784f943..9882ad4 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityMethods.java @@ -38,7 +38,7 @@ public class VelocityMethods implements PlatformMethods { public void sendPluginMessage(AdaptedPlayer player, String channel, String... data) { if(player == null) return; Player velocityPlayer = ((VelocityPlayer) player).getHandle(); - ByteArrayDataOutput out = ByteStreams.newDataOutput(); + @SuppressWarnings("UnstableApiUsage") ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF( channel ); out.writeUTF(player.getName()); for(String s : data) { @@ -109,8 +109,18 @@ public class VelocityMethods implements PlatformMethods { return names; } + @Override + public String getImplementationName() { + return "velocity"; + } + @Override public List getCommands() { return plugin.commands; } + + @Override + public boolean hasPlugin(String pluginName) { + return proxyServer.getPluginManager().getPlugin(pluginName.toLowerCase(Locale.ROOT)).isPresent(); + } } diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java index 0d72b6d..e266045 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/players/VelocityPlayer.java @@ -10,6 +10,7 @@ import org.jetbrains.annotations.NotNull; import us.ajg0702.queue.api.players.AdaptedPlayer; import us.ajg0702.queue.api.server.AdaptedServer; +import java.util.List; import java.util.Optional; import java.util.UUID; @@ -70,6 +71,11 @@ public class VelocityPlayer implements AdaptedPlayer, Audience { return handle.getUsername(); } + @Override + public List getPermissions() { + throw new IllegalStateException("AdaptedPlayer#getPermissions cannot be used on velocity"); + } + @Override public Player getHandle() { return handle; diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java index 5d0eac1..c43333c 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/server/VelocityServer.java @@ -10,7 +10,6 @@ import us.ajg0702.queue.api.server.AdaptedServerPing; import us.ajg0702.queue.platforms.velocity.players.VelocityPlayer; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts index 59952ae..8d76ba5 100644 --- a/premium/build.gradle.kts +++ b/premium/build.gradle.kts @@ -9,6 +9,8 @@ group = "us.ajg0702.queue" repositories { mavenCentral() maven { url = uri("https://repo.ajg0702.us") } + maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } + } dependencies { @@ -22,6 +24,12 @@ dependencies { compileOnly("us.ajg0702:ajUtils:1.1.6") compileOnly("net.kyori:adventure-api:4.8.1") + + compileOnly("net.luckperms:api:5.0") +} + +tasks.shadowJar { + archiveFileName.set("${baseName}-${version}.${extension}") } publishing { diff --git a/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java index 2bb3814..3cc1a27 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/LogicGetterImpl.java @@ -3,12 +3,13 @@ package us.ajg0702.queue.logic; import us.ajg0702.queue.api.AliasManager; import us.ajg0702.queue.api.Logic; import us.ajg0702.queue.api.LogicGetter; +import us.ajg0702.queue.common.QueueMain; import us.ajg0702.utils.common.Config; public class LogicGetterImpl implements LogicGetter { @Override public Logic constructLogic() { - return new PremiumLogic(); + return new PremiumLogic(QueueMain.getInstance()); } @Override diff --git a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java index cd6df55..bd94188 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/PremiumLogic.java @@ -11,6 +11,12 @@ import us.ajg0702.queue.common.players.QueuePlayerImpl; import us.ajg0702.queue.logic.permissions.PermissionGetter; public class PremiumLogic implements Logic { + + private final PermissionGetter permissionGetter; + public PremiumLogic(QueueMain main) { + permissionGetter = new PermissionGetter(main); + } + @Override public boolean isPremium() { return true; @@ -18,27 +24,34 @@ public class PremiumLogic implements Logic { @Override public QueuePlayer priorityLogic(QueueServer server, AdaptedPlayer player) { - int maxOfflineTime = PermissionGetter.getMaxOfflineTime(player); + int maxOfflineTime = permissionGetter.getMaxOfflineTime(player); 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(debug) { + logger.info("[priority] "+player.getName()+" bypass"); + } QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, Integer.MAX_VALUE, maxOfflineTime); server.addPlayer(queuePlayer, 0); main.getQueueManager().sendPlayers(server); return queuePlayer; } - int priority = PermissionGetter.getPriority(player); - int serverPriority = PermissionGetter.getServerPriotity(server.getName(), player); + int priority = permissionGetter.getPriority(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); QueuePlayer queuePlayer = new QueuePlayerImpl(player, server, highestPriority, maxOfflineTime); - QueueLogger logger = main.getLogger(); - boolean debug = main.getConfig().getBoolean("priority-queue-debug"); - if(debug) { logger.info("[priority] "+player.getName()+" highestPriority: "+highestPriority); logger.info("[priority] "+player.getName()+" priority: "+priority); diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java index 4b5140b..aec11b2 100644 --- a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionGetter.java @@ -1,20 +1,70 @@ package us.ajg0702.queue.logic.permissions; 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 { - //TODO: all of this + private final List hooks; - public static int getMaxOfflineTime(AdaptedPlayer player) { - return -1; + private QueueMain main; + public PermissionGetter(QueueMain main) { + hooks = Arrays.asList( + new BuiltIn(main), + new LuckPermsHook(main) + ); } - public static int getPriority(AdaptedPlayer player) { - return -1; + private PermissionHook selected; + 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) { - return -1; + public int getMaxOfflineTime(AdaptedPlayer player) { + 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 perms = getSelected().getPermissions(player); + Iterator 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())); } } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java new file mode 100644 index 0000000..b9b7e97 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/PermissionHook.java @@ -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 getPermissions(AdaptedPlayer player); +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltIn.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltIn.java new file mode 100644 index 0000000..289d046 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/BuiltIn.java @@ -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 getPermissions(AdaptedPlayer player) { + if(main.getPlatformMethods().getImplementationName().equals("velocity")) { + return new ArrayList<>(); + } + return player.getPermissions(); + } +} diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java new file mode 100644 index 0000000..f7b9c53 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/LuckPermsHook.java @@ -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 getPermissions(AdaptedPlayer player) { + LuckPerms api = LuckPermsProvider.get(); + + User user = api.getUserManager().getUser(player.getUniqueId()); + + assert user != null; + SortedSet nodes = user.resolveDistinctInheritedNodes(QueryOptions.defaultContextualOptions()); + + List perms = new ArrayList<>(); + + for (Node node : nodes) { + if (!node.getType().equals(NodeType.PERMISSION)) continue; + if (!node.getValue()) continue; + perms.add(node.getKey()); + } + + return perms; + } +} diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java index 30f0db3..c4a0368 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Commands.java @@ -6,16 +6,17 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; public class Commands implements CommandExecutor { - SpigotMain pl; + final SpigotMain pl; public Commands(SpigotMain pl) { this.pl = pl; } @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; if(sender instanceof Player) { player = (Player) sender; @@ -51,6 +52,7 @@ public class Commands implements CommandExecutor { if(pl.config.getBoolean("send-queue-commands-in-batches")) { pl.queuebatch.put(player, srvname); } else { + assert player != null; pl.sendMessage(player, "queue", srvname); } diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Config.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Config.java index 47226de..b1eafb6 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Config.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Config.java @@ -9,10 +9,10 @@ import java.io.PrintWriter; import java.nio.file.Files; public class Config { - File f; - YamlConfiguration yml; + final File f; + final YamlConfiguration yml; - JavaPlugin pl; + final JavaPlugin pl; public boolean getBoolean(String key) { diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java b/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java index cecb7a4..3d3dbdc 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/Placeholders.java @@ -14,7 +14,7 @@ import java.util.Iterator; */ public class Placeholders extends PlaceholderExpansion { - private SpigotMain plugin; + private final SpigotMain plugin; /** * Since we register the expansion inside our own plugin, we @@ -89,7 +89,7 @@ public class Placeholders extends PlaceholderExpansion { return plugin.getDescription().getVersion(); } - HashMap> responseCache = new HashMap<>(); + final HashMap> responseCache = new HashMap<>(); public void cleanCache() { Iterator it = responseCache.keySet().iterator(); @@ -135,31 +135,25 @@ public class Placeholders extends PlaceholderExpansion { } } - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - public void run() { - HashMap playerCache; - if(responseCache.containsKey(player)) { - playerCache = responseCache.get(player); - } else { - playerCache = new HashMap(); - } - if(playerCache.size() > 75) { - try { - playerCache.remove(playerCache.keySet().toArray()[0]); - } catch(ConcurrentModificationException e) { - 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); - } - }); + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + HashMap playerCache; + if(responseCache.containsKey(player)) { + playerCache = responseCache.get(player); + } else { + playerCache = new HashMap<>(); + } + if(playerCache.size() > 75) { + try { + playerCache.remove(playerCache.keySet().toArray()[0]); + } catch(ConcurrentModificationException e) { + Bukkit.getScheduler().runTask(plugin, () -> playerCache.remove(playerCache.keySet().toArray()[0])); + } + } + String resp = parsePlaceholder(player, identifier); + if(resp == null) return; + playerCache.put(identifier, resp); + responseCache.put(player, playerCache); + }); if(responseCache.containsKey(player)) { @@ -189,23 +183,18 @@ public class Placeholders extends PlaceholderExpansion { private String parsePlaceholder(Player player, String identifier) { if(identifier.equalsIgnoreCase("queued")) { plugin.sendMessage(player, "queuename", ""); - return null; } if(identifier.equalsIgnoreCase("position")) { plugin.sendMessage(player, "position", ""); - return null; } if(identifier.equalsIgnoreCase("of")) { plugin.sendMessage(player, "positionof", ""); - return null; } if(identifier.equalsIgnoreCase("inqueue")) { plugin.sendMessage(player, "inqueue", ""); - return null; } if(identifier.matches("queuedfor_*.*")) { plugin.sendMessage(player, "queuedfor", identifier.split("_")[1]); - return null; } diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/QueueScoreboardActivator.java b/spigot/src/main/java/us/ajg0702/queue/spigot/QueueScoreboardActivator.java index 9c621b0..46ba47f 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/QueueScoreboardActivator.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/QueueScoreboardActivator.java @@ -3,11 +3,12 @@ package us.ajg0702.queue.spigot; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; public class QueueScoreboardActivator extends Event { private static final HandlerList HANDLERS = new HandlerList(); - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return HANDLERS; } @@ -15,7 +16,7 @@ public class QueueScoreboardActivator extends Event { return HANDLERS; } - Player ply; + final Player ply; public QueueScoreboardActivator(Player p) { this.ply = p; diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java index 23d3284..79366b6 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/SpigotMain.java @@ -11,10 +11,10 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.messaging.PluginMessageListener; import org.jetbrains.annotations.NotNull; -import us.ajg0702.queue.spigot.utils.VersionSupport; import java.util.HashMap; +@SuppressWarnings("UnstableApiUsage") public class SpigotMain extends JavaPlugin implements PluginMessageListener,Listener { boolean papi = false; @@ -22,6 +22,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List Config config; + @SuppressWarnings("ConstantConditions") public void onEnable() { getServer().getMessenger().registerIncomingPluginChannel(this, "ajqueue:tospigot", this); getServer().getMessenger().registerOutgoingPluginChannel(this, "ajqueue:toproxy"); @@ -39,20 +40,18 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List getLogger().info("Registered PlaceholderAPI placeholders"); } - Bukkit.getScheduler().runTaskTimer(this, new Runnable() { - public void run() { - if(Bukkit.getOnlinePlayers().size() <= 0 || queuebatch.size() <= 0) return; - String msg = ""; - for(Player p : queuebatch.keySet()) { - if(p == null || !p.isOnline()) continue; - msg += p.getName()+":"+queuebatch.get(p)+","; - } - if(msg.length() > 1) { - msg = msg.substring(0, msg.length()-1); - } - queuebatch.clear(); - sendMessage("massqueue", msg); + Bukkit.getScheduler().runTaskTimer(this, () -> { + if(Bukkit.getOnlinePlayers().size() <= 0 || queuebatch.size() <= 0) return; + StringBuilder msg = new StringBuilder(); + for(Player p : queuebatch.keySet()) { + if(p == null || !p.isOnline()) continue; + msg.append(p.getName()).append(":").append(queuebatch.get(p)).append(","); } + if(msg.length() > 1) { + msg = new StringBuilder(msg.substring(0, msg.length() - 1)); + } + queuebatch.clear(); + sendMessage("massqueue", msg.toString()); }, 2*20, 20); config = new Config(this); @@ -60,10 +59,10 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List getLogger().info("Spigot side enabled! v"+getDescription().getVersion()); } - HashMap queuebatch = new HashMap<>(); + final HashMap queuebatch = new HashMap<>(); @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; ByteArrayDataInput in = ByteStreams.newDataInput(message); @@ -133,7 +132,7 @@ public class SpigotMain extends JavaPlugin implements PluginMessageListener,List if(p == null) return; if(!p.isOnline()) return; - int number = Integer.valueOf(in.readUTF()); + int number = Integer.parseInt(in.readUTF()); HashMap phs = placeholders.responseCache.get(p); if(phs == null) phs = new HashMap<>(); phs.put("queuedfor_"+queuename, number+""); diff --git a/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java b/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java index eab8c59..acc3c60 100644 --- a/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java +++ b/spigot/src/main/java/us/ajg0702/queue/spigot/utils/ActionBar.java @@ -12,18 +12,15 @@ import java.lang.reflect.Method; * */ 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.isOnline()) return; - - version = Bukkit.getServer().getClass().getPackage().getName(); + + String version = Bukkit.getServer().getClass().getPackage().getName(); 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 { Class craftPlayerClass = Class.forName("org.bukkit.craftbukkit." + version + ".entity.CraftPlayer");