1+ package com.kruthers.gamemode4core.events
2+
3+ import com.kruthers.gamemode4core.Gamemode4Core
4+ import net.kyori.adventure.text.Component
5+ import net.luckperms.api.LuckPerms
6+ import net.luckperms.api.event.node.NodeAddEvent
7+ import net.luckperms.api.event.node.NodeRemoveEvent
8+ import net.luckperms.api.model.user.User
9+ import net.luckperms.api.node.Node
10+ import net.luckperms.api.node.NodeType
11+ import net.luckperms.api.node.types.InheritanceNode
12+ import org.bukkit.Bukkit
13+ import org.bukkit.event.EventHandler
14+
15+ class PermissionEvent (val plugin : Gamemode4Core , perms : LuckPerms ) {
16+
17+ init {
18+ val eventBus = perms.eventBus
19+
20+ eventBus.subscribe(NodeAddEvent ::class .java, this ::onNodeAddEvent)
21+ }
22+
23+ private fun onNodeAddEvent (event : NodeAddEvent ) {
24+ val target = event.target
25+ if (event.isUser && target is User ) {
26+ val node = event.node
27+ if (node.type == NodeType .INHERITANCE && node is InheritanceNode ) {
28+ if (this .plugin.config.getStringList(" donor_tagging.groups" ).contains(node.groupName)) {
29+ val uuid = target.uniqueId
30+ val player = Bukkit .getOfflinePlayer(uuid)
31+ if (player.isOnline && player.player != null ) {
32+ player.player!! .scoreboardTags.add(this .plugin.config.getString(" donor_tagging.tag" )? : " donor" )
33+ }
34+ }
35+ }
36+ }
37+ }
38+
39+ private fun onNodeRemoveEvent (event : NodeRemoveEvent ) {
40+ val target = event.target
41+ if (event.isUser && target is User ) {
42+ val node = event.node
43+ if (node.type == NodeType .INHERITANCE && node is InheritanceNode ) {
44+ val groups = this .plugin.config.getStringList(" donor_tagging.groups" )
45+ if (groups.contains(node.groupName)) {
46+ val uuid = target.uniqueId
47+ val player = Bukkit .getOfflinePlayer(uuid)
48+ if (player.isOnline && player.player != null ) {
49+ var stillDonor = false
50+ // check if they still have any other donor roles
51+ target.getInheritedGroups(target.queryOptions).forEach { group ->
52+ if (! stillDonor && groups.contains(group.name)) stillDonor = true
53+ }
54+
55+ // if they have no donor roles, remove the donor tag
56+ if (! stillDonor) player.player!! .scoreboardTags.remove(this .plugin.config.getString(" donor_tagging.tag" )? : " donor" )
57+ }
58+ }
59+ }
60+ }
61+ }
62+
63+
64+ }
0 commit comments