premium logic finished
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -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;
|
||||||
|
|||||||
-1
@@ -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;
|
||||||
|
|||||||
@@ -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 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;
|
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,30 +135,24 @@ 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<String, String>();
|
playerCache = new HashMap<>();
|
||||||
}
|
}
|
||||||
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, new Runnable() {
|
Bukkit.getScheduler().runTask(plugin, () -> playerCache.remove(playerCache.keySet().toArray()[0]));
|
||||||
public void run() {
|
|
||||||
playerCache.remove(playerCache.keySet().toArray()[0]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
String resp = parsePlaceholder(player, identifier);
|
String resp = parsePlaceholder(player, identifier);
|
||||||
if(resp == null) return;
|
if(resp == null) return;
|
||||||
playerCache.put(identifier, resp);
|
playerCache.put(identifier, resp);
|
||||||
responseCache.put(player, playerCache);
|
responseCache.put(player, playerCache);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -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;
|
||||||
String msg = "";
|
StringBuilder msg = new StringBuilder();
|
||||||
for(Player p : queuebatch.keySet()) {
|
for(Player p : queuebatch.keySet()) {
|
||||||
if(p == null || !p.isOnline()) continue;
|
if(p == null || !p.isOnline()) continue;
|
||||||
msg += p.getName()+":"+queuebatch.get(p)+",";
|
msg.append(p.getName()).append(":").append(queuebatch.get(p)).append(",");
|
||||||
}
|
}
|
||||||
if(msg.length() > 1) {
|
if(msg.length() > 1) {
|
||||||
msg = msg.substring(0, msg.length()-1);
|
msg = new StringBuilder(msg.substring(0, msg.length() - 1));
|
||||||
}
|
}
|
||||||
queuebatch.clear();
|
queuebatch.clear();
|
||||||
sendMessage("massqueue", msg);
|
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+"");
|
||||||
|
|||||||
@@ -13,17 +13,14 @@ 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");
|
||||||
|
|||||||
Reference in New Issue
Block a user