Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions core/common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ dependencies {
compileOnly("com.nexomc:nexo:1.17.0") {
exclude(group = "*", module = "*")
}
compileOnly("net.luckperms:api:5.4")

compileOnly(fileTree("../../lib") {
include("*.jar")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.willfp.libreforge.integrations.huskintegration.husktowns.HuskTownsInt
import com.willfp.libreforge.integrations.jobs.JobsIntegration
import com.willfp.libreforge.integrations.lands.LandsIntegration
import com.willfp.libreforge.integrations.levelledmobs.LevelledMobsIntegration
import com.willfp.libreforge.integrations.luckperms.LuckPermsIntegration
import com.willfp.libreforge.integrations.mcmmo.McMMOIntegration
import com.willfp.libreforge.integrations.modelengine.ModelEngineIntegration
import com.willfp.libreforge.integrations.mythicmobs.MythicMobsIntegration
Expand Down Expand Up @@ -232,7 +233,8 @@ class LibreforgeSpigotPlugin : EcoPlugin() {
IntegrationLoader("EdPrison") { EdPrisonCoreIntegration.load(this) },
IntegrationLoader("MythicMobs") { MythicMobsIntegration.load(this) },
IntegrationLoader("Nexo") { NexoIntegration.load(this) },
IntegrationLoader("Oraxen") { OraxenIntegration.load(this)}
IntegrationLoader("Oraxen") { OraxenIntegration.load(this) },
IntegrationLoader("LuckPerms") { LuckPermsIntegration.load(this) }
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.willfp.libreforge.integrations.luckperms

import com.willfp.eco.core.EcoPlugin
import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.effects.Effects
import com.willfp.libreforge.integrations.LoadableIntegration
import com.willfp.libreforge.integrations.luckperms.impl.ConditionLuckPermHasPermission
import com.willfp.libreforge.integrations.luckperms.impl.EffectLuckPermGivePermission
import net.luckperms.api.LuckPermsProvider
import net.luckperms.api.model.user.User
import org.bukkit.entity.Player

object LuckPermsIntegration : LoadableIntegration {
override fun load(plugin: EcoPlugin) {
Conditions.register(ConditionLuckPermHasPermission)
Effects.register(EffectLuckPermGivePermission)
}

override fun getPluginName(): String {
return "LuckPerms"
}

fun Player.getLuckPermsUser(): User? {
return LuckPermsProvider.get().userManager.getUser(uniqueId)
}

fun User.saveChanges() {
LuckPermsProvider.get().userManager.saveUser(this)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.willfp.libreforge.integrations.luckperms.impl

import com.willfp.eco.core.config.interfaces.Config
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import com.willfp.libreforge.integrations.luckperms.LuckPermsIntegration.getLuckPermsUser
import org.bukkit.entity.Player

object ConditionLuckPermHasPermission : Condition<NoCompileData>("has_permission") {
override val arguments = arguments {
require("permission", "You must specify the permission!")
}

override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false

val user = player.getLuckPermsUser() ?: return false

return user.cachedData.permissionData.checkPermission(config.getString("permission")).asBoolean()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.willfp.libreforge.integrations.luckperms.impl

import com.willfp.eco.core.config.interfaces.Config
import com.willfp.eco.core.map.listMap
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments
import com.willfp.libreforge.effects.Effect
import com.willfp.libreforge.effects.Identifiers
import com.willfp.libreforge.get
import com.willfp.libreforge.integrations.luckperms.LuckPermsIntegration.getLuckPermsUser
import com.willfp.libreforge.integrations.luckperms.LuckPermsIntegration.saveChanges
import net.luckperms.api.node.types.PermissionNode
import org.bukkit.entity.Player
import java.util.UUID

object EffectLuckPermGivePermission : Effect<NoCompileData>("give_permission") {
override val arguments = arguments {
require("permission", "You must specify the permission!")
}

private val permissions = listMap<UUID, GivenPermission>()

override fun onEnable(
dispatcher: Dispatcher<*>,
config: Config,
identifiers: Identifiers,
holder: ProvidedHolder,
compileData: NoCompileData
) {
val player = dispatcher.get<Player>() ?: return
val user = player.getLuckPermsUser() ?: return
val permission = config.getString("permission")

val node = PermissionNode.builder(permission).value(true).build()

permissions[player.uniqueId].add(GivenPermission(node, player.uniqueId))
user.data().add(node)
user.saveChanges()
}

override fun onDisable(dispatcher: Dispatcher<*>, identifiers: Identifiers, holder: ProvidedHolder) {
val player = dispatcher.get<Player>() ?: return
val user = player.getLuckPermsUser() ?: return

val givenPermission = permissions[player.uniqueId]
.firstOrNull { it.uuid == identifiers.uuid } ?: return

permissions[player.uniqueId].remove(givenPermission)
user.data().remove(givenPermission.node)
user.saveChanges()
}

private data class GivenPermission(
val node: PermissionNode,
val uuid: UUID
)
}
1 change: 1 addition & 0 deletions core/common/src/main/resources/plugin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ softdepend:
- CustomFishing
- Lands
- EdPrison
- LuckPerms

commands:
lrcdb:
Expand Down