diff --git a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/PermissionList.java b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/PermissionList.java index 3626926..84c340d 100644 --- a/common/src/main/java/us/ajg0702/queue/commands/commands/manage/PermissionList.java +++ b/common/src/main/java/us/ajg0702/queue/commands/commands/manage/PermissionList.java @@ -51,6 +51,7 @@ public class PermissionList extends SubCommand { sender.sendMessage(Component.text("no permission handler")); return; } + permissions.forEach(s -> { if(!s.toLowerCase(Locale.ROOT).contains("ajqueue")) return; sender.sendMessage(Component.text(s)); diff --git a/platforms/bungeecord/build.gradle.kts b/platforms/bungeecord/build.gradle.kts index 2271fe3..136f1e8 100644 --- a/platforms/bungeecord/build.gradle.kts +++ b/platforms/bungeecord/build.gradle.kts @@ -24,6 +24,8 @@ dependencies { implementation("net.kyori:adventure-platform-bungeecord:4.0.0-SNAPSHOT") compileOnly("net.kyori:adventure-text-serializer-plain:4.0.0-SNAPSHOT") + implementation("org.bstats:bstats-bungeecord:2.2.1") + implementation(project(":common")) implementation(project(":api")) } diff --git a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java index 519dfb5..a55b795 100644 --- a/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java +++ b/platforms/bungeecord/src/main/java/us/ajg0702/queue/platforms/bungeecord/BungeeQueue.java @@ -8,6 +8,8 @@ import net.md_5.bungee.api.event.*; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; +import org.bstats.bungeecord.Metrics; +import org.bstats.charts.SimplePie; import org.checkerframework.checker.nullness.qual.NonNull; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.api.util.QueueLogger; @@ -61,6 +63,11 @@ public class BungeeQueue extends Plugin implements Listener { getProxy().getPluginManager().registerListener(this, this); + + Metrics metrics = new Metrics(this, 7404); + + metrics.addCustomChart(new SimplePie("premium", () -> String.valueOf(main.getLogic().isPremium()))); + metrics.addCustomChart(new SimplePie("implementation", () -> main.getPlatformMethods().getImplementationName())); } private static BungeeAudiences adventure; diff --git a/platforms/velocity/build.gradle.kts b/platforms/velocity/build.gradle.kts index 0b51e4e..48d296f 100644 --- a/platforms/velocity/build.gradle.kts +++ b/platforms/velocity/build.gradle.kts @@ -21,6 +21,8 @@ dependencies { annotationProcessor("com.velocitypowered:velocity-api:3.0.0") compileOnly("net.kyori:adventure-text-minimessage:4.0.0-SNAPSHOT") + implementation("org.bstats:bstats-velocity:2.2.1") + implementation(project(":common")) implementation(project(":api")) } diff --git a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java index d4f0e27..b1b1696 100644 --- a/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java +++ b/platforms/velocity/src/main/java/us/ajg0702/queue/platforms/velocity/VelocityQueue.java @@ -15,6 +15,8 @@ import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import net.kyori.adventure.text.Component; +import org.bstats.charts.SimplePie; +import org.bstats.velocity.Metrics; import org.slf4j.Logger; import us.ajg0702.queue.api.commands.IBaseCommand; import us.ajg0702.queue.commands.BaseCommand; @@ -50,12 +52,16 @@ public class VelocityQueue { final File dataFolder; + private final Metrics.Factory metricsFactory; + @Inject - public VelocityQueue(ProxyServer proxyServer, Logger logger, @DataDirectory Path dataFolder) { + public VelocityQueue(ProxyServer proxyServer, Logger logger, @DataDirectory Path dataFolder, Metrics.Factory metricsFactory) { this.proxyServer = proxyServer; this.logger = new VelocityLogger(logger); this.dataFolder = dataFolder.toFile(); + + this.metricsFactory = metricsFactory; } List commands; @@ -90,6 +96,12 @@ public class VelocityQueue { new VelocityCommand(main, (BaseCommand) command) ); } + + + Metrics metrics = metricsFactory.make(this, 7404); + + metrics.addCustomChart(new SimplePie("premium", () -> String.valueOf(main.getLogic().isPremium()))); + metrics.addCustomChart(new SimplePie("implementation", () -> main.getPlatformMethods().getImplementationName())); } @Subscribe @@ -126,6 +138,7 @@ public class VelocityQueue { main.getEventHandler().onPlayerLeave(new VelocityPlayer(e.getPlayer())); } + @SuppressWarnings("SimplifyOptionalCallChains") @Subscribe public void onKick(KickedFromServerEvent e) { if(!e.getPlayer().getCurrentServer().isPresent()) return; // if the player is kicked on initial join, we dont care diff --git a/premium/build.gradle.kts b/premium/build.gradle.kts index 4189b2a..f6e9ee7 100644 --- a/premium/build.gradle.kts +++ b/premium/build.gradle.kts @@ -26,6 +26,8 @@ dependencies { compileOnly("net.kyori:adventure-api:4.8.1") + compileOnly(fileTree(mapOf("dir" to "../libs", "include" to listOf("*.jar")))) + compileOnly("net.luckperms:api:5.0") } 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 aec11b2..cadc613 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 @@ -4,6 +4,7 @@ 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 us.ajg0702.queue.logic.permissions.hooks.UltraPermissionsHook; import java.util.*; @@ -15,7 +16,8 @@ public class PermissionGetter { public PermissionGetter(QueueMain main) { hooks = Arrays.asList( new BuiltIn(main), - new LuckPermsHook(main) + new LuckPermsHook(main), + new UltraPermissionsHook(main) ); } @@ -30,6 +32,7 @@ public class PermissionGetter { selected = hook; } } + main.getLogger().info("Using "+selected.getName()+" for permissions."); return selected; } diff --git a/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java new file mode 100644 index 0000000..259bfa8 --- /dev/null +++ b/premium/src/main/java/us/ajg0702/queue/logic/permissions/hooks/UltraPermissionsHook.java @@ -0,0 +1,44 @@ +package us.ajg0702.queue.logic.permissions.hooks; + +import me.TechsCode.UltraPermissions.UltraPermissions; +import me.TechsCode.UltraPermissions.UltraPermissionsAPI; +import me.TechsCode.UltraPermissions.storage.objects.User; +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; +import java.util.Optional; + +@SuppressWarnings("SimplifyOptionalCallChains") +public class UltraPermissionsHook implements PermissionHook { + + private final QueueMain main; + public UltraPermissionsHook(QueueMain main) { + this.main = main; + } + + @Override + public String getName() { + return "UltraPermissions"; + } + + @Override + public boolean canUse() { + return main.getPlatformMethods().hasPlugin("UltraPermissions"); + } + + @Override + public List getPermissions(AdaptedPlayer player) { + UltraPermissionsAPI ultraPermissionsAPI = UltraPermissions.getAPI(); + + Optional userOptional = ultraPermissionsAPI.getUsers().uuid(player.getUniqueId()); + if(!userOptional.isPresent()) return new ArrayList<>(); + User user = userOptional.get(); + + List permissions = new ArrayList<>(); + user.getPermissions().bungee().forEach(permission -> permissions.add(permission.getName())); + return permissions; + } +}