diff --git a/gradle.properties b/gradle.properties index 771d92d..d0f5dd9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ group = io.github.4drian3d -version = 4.0.4 +version = 4.0.5-SNAPSHOT description = AuthMeReloaded Support for Velocity url = https://modrinth.com/plugin/authmevelocity id = authmevelocity diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1bcad0e..2e9b673 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,6 +18,7 @@ geantyref = "1.3.13" indra = "3.1.2" runtask = "2.1.0" vpacketevents = "1.1.0" +luckperms = "5.4" # Test versions assertj = "3.24.2" @@ -38,6 +39,7 @@ libby-velocity = { group = "net.byteflux", name = "libby-velocity", version.ref miniplaceholders = { group = "io.github.miniplaceholders", name = "miniplaceholders-api", version.ref = "miniplaceholders" } vpacketevents = { group = "io.github.4drian3d", name = "vpacketevents-api", version.ref = "vpacketevents" } +luckperms = { module = "net.luckperms:api", version.ref = "luckperms" } fastlogin-velocity = { group = "com.github.games647", name = "fastlogin.velocity", version.ref = "fastlogin" } bstats-velocity = { group = "org.bstats", name = "bstats-velocity", version.ref = "bstats" } diff --git a/velocity/build.gradle.kts b/velocity/build.gradle.kts index f4629ff..693f9d6 100644 --- a/velocity/build.gradle.kts +++ b/velocity/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { compileOnly(libs.miniplaceholders) compileOnly(libs.fastlogin.velocity) compileOnly(libs.vpacketevents) + compileOnly(libs.luckperms) implementation(projects.authmevelocityCommon) implementation(projects.authmevelocityApiVelocity) diff --git a/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMeVelocityPlugin.java b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMeVelocityPlugin.java index bdeb871..a950323 100644 --- a/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMeVelocityPlugin.java +++ b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMeVelocityPlugin.java @@ -39,6 +39,8 @@ import io.github._4drian3d.authmevelocity.common.LibsManager; import io.github._4drian3d.authmevelocity.common.configuration.ConfigurationContainer; import io.github._4drian3d.authmevelocity.common.configuration.ProxyConfiguration; import io.github._4drian3d.authmevelocity.velocity.commands.AuthMeCommand; +import io.github._4drian3d.authmevelocity.velocity.hooks.AuthMeContexts; +import io.github._4drian3d.authmevelocity.velocity.hooks.AuthMePlaceholders; import io.github._4drian3d.authmevelocity.velocity.listener.Listener; import io.github._4drian3d.authmevelocity.velocity.listener.compat.FastLoginListener; import io.github._4drian3d.authmevelocity.velocity.listener.connection.DisconnectListener; @@ -83,6 +85,10 @@ import java.util.stream.Stream; @Dependency( id = "vpacketevents", optional = true + ), + @Dependency( + id = "luckperms", + optional = true ) } ) @@ -162,6 +168,10 @@ public final class AuthMeVelocityPlugin implements AuthMeVelocityAPI { injector.getInstance(CompletionPacketListener.class).register(); } + if (pluginManager.isLoaded("luckperms")) { + this.injector.getInstance(AuthMeContexts.class).register(); + } + injector.getInstance(AuthMeCommand.class).register(); this.sendInfoMessage(); diff --git a/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMeContexts.java b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMeContexts.java new file mode 100644 index 0000000..5cb3a64 --- /dev/null +++ b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMeContexts.java @@ -0,0 +1,40 @@ +package io.github._4drian3d.authmevelocity.velocity.hooks; + +import com.google.inject.Inject; +import com.velocitypowered.api.proxy.Player; +import io.github._4drian3d.authmevelocity.velocity.AuthMeVelocityPlugin; +import net.luckperms.api.LuckPerms; +import net.luckperms.api.LuckPermsProvider; +import net.luckperms.api.context.ContextCalculator; +import net.luckperms.api.context.ContextConsumer; +import net.luckperms.api.context.ContextSet; +import net.luckperms.api.context.ImmutableContextSet; +import org.checkerframework.checker.nullness.qual.NonNull; + +public final class AuthMeContexts implements ContextCalculator { + @Inject + private AuthMeVelocityPlugin plugin; + + @Override + public void calculate(final @NonNull Player target, final @NonNull ContextConsumer consumer) { + consumer.accept(ImmutableContextSet.builder() + .add("logged", Boolean.toString(plugin.isLogged(target))) + .add("isInAuthServer", Boolean.toString(plugin.isInAuthServer(target))) + .build()); + } + + @Override + public @NonNull ContextSet estimatePotentialContexts() { + return ImmutableContextSet.builder() + .add("logged", "true") + .add("logged", "false") + .add("isInAuthServer", "true") + .add("isInAuthServer", "false") + .build(); + } + + public void register() { + final LuckPerms luckPerms = LuckPermsProvider.get(); + luckPerms.getContextManager().registerCalculator(this); + } +} diff --git a/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMePlaceholders.java b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMePlaceholders.java similarity index 92% rename from velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMePlaceholders.java rename to velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMePlaceholders.java index 6a60b0e..707ddbb 100644 --- a/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/AuthMePlaceholders.java +++ b/velocity/src/main/java/io/github/_4drian3d/authmevelocity/velocity/hooks/AuthMePlaceholders.java @@ -15,24 +15,25 @@ * along with this program. If not, see . */ -package io.github._4drian3d.authmevelocity.velocity; +package io.github._4drian3d.authmevelocity.velocity.hooks; import com.google.inject.Inject; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; +import io.github._4drian3d.authmevelocity.velocity.AuthMeVelocityPlugin; import io.github.miniplaceholders.api.Expansion; import net.kyori.adventure.text.minimessage.tag.Tag; import static io.github.miniplaceholders.api.utils.Components.FALSE_COMPONENT; import static io.github.miniplaceholders.api.utils.Components.TRUE_COMPONENT; -final class AuthMePlaceholders { +public final class AuthMePlaceholders { @Inject private AuthMeVelocityPlugin plugin; @Inject private ProxyServer proxyServer; - Expansion getExpansion() { + public Expansion getExpansion() { return Expansion.builder("authme") .filter(Player.class) // Logged Placeholders