Skip to content

Commit

Permalink
feature: more rank information and fix rank conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
98ping committed Jun 16, 2023
1 parent 0cfa5f2 commit ef08a37
Show file tree
Hide file tree
Showing 12 changed files with 67 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -220,15 +220,15 @@ data class GameProfile(
}

fun getCurrentRank(): Rank? {
var currentGrant: Rank? = RankService.findFirstAvailableDefaultRank()
val currentGrant: Rank? = RankService.findFirstAvailableDefaultRank()

val filteredRank = RankGrantService.getFromCache(uuid).filter {
it.expirable.isActive()
}.sortedBy { it.getGrantable().weight }.reversed().firstOrNull()

if (filteredRank == null
||
filteredRank.getGrantable().weight < currentGrant!!.weight
filteredRank.getGrantable().weight < (currentGrant?.weight ?: 0)
)
{
return currentGrant
Expand Down
9 changes: 8 additions & 1 deletion spigot/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ repositories {
url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/'
}

maven {
url = 'https://libraries.minecraft.net'
}


maven {
name = "gravemc-repo"
url = "https://repo.gravemc.net/releases/"
Expand All @@ -17,13 +22,15 @@ repositories {
dependencies {
implementation project(":commons")

compileOnly 'org.spigotmc:spigot:1.8.8-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT'
implementation "co.aikar:acf-paper:0.5.1-SNAPSHOT"
implementation "net.kyori:adventure-api:4.11.0"
compileOnly 'me.clip:placeholderapi:2.11.2'
compileOnly "com.github.MilkBowl:VaultAPI:1.7"
implementation "club.minnced:discord-webhooks:0.8.2"
compileOnly 'net.luckperms:api:5.4'
compileOnly 'net.md-5:bungeecord-api:1.19-R0.1-SNAPSHOT'
compileOnly 'com.mojang:authlib:1.5.21'

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ class AlchemistSpigotPlugin : JavaPlugin() {

lateinit var globalServer: UniqueServer
lateinit var commandManager: PaperCommandManager
val conversationFactory = ConversationFactory(this)

override fun onEnable() {
saveDefaultConfig()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class GenericRankCommands : BaseCommand() {
sender.sendMessage(Chat.format("&7&m--------------------------"))
sender.sendMessage(Chat.format("&eLoaded Ranks &7(" + RankService.getValues().size + ")"))
for (rank in RankService.getRanksInOrder()) {
val message = rank.color + rank.displayName + " &f[Priority: " + rank.weight + "]"
val message = rank.color + rank.displayName + " &f[Priority: " + rank.weight + "] &7(" + rank.id + ")"

sender.sendMessage(Chat.format(message))
}
Expand Down Expand Up @@ -202,6 +202,15 @@ class GenericRankCommands : BaseCommand() {
sender.sendMessage(Chat.format("&aUpdated the permissions of &f" + rank.color + rank.displayName))
}

"default" -> {
rank.default = arg.toBoolean()
RankService.save(rank)
AsynchronousRedisSender.send(RefreshRankPacket())

sender.sendMessage(Chat.format("&aUpdated the default status of &f" + rank.color + rank.displayName))
}


"staff" -> {
rank.staff = arg.toBoolean()
RankService.save(rank)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ltd.matrixstudios.alchemist.convert

import org.bukkit.entity.Player

/**
* Class created on 6/13/2023
Expand All @@ -9,5 +11,5 @@ package ltd.matrixstudios.alchemist.convert
*/
interface IRankConverter {

fun convert()
fun convert(player: Player)
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,9 @@ class LuckPermsConverterCommand : BaseCommand() {

@CommandAlias("convertluckperms")
@CommandPermission("alchemist.owner")
fun convert(sender: CommandSender) {
if (sender !is Player) {
sender.sendMessage(Chat.format("&cYou must be in console to execute this"))
return
}

fun convert(sender: Player) {
if (Bukkit.getPluginManager().isPluginEnabled("LuckPerms")) {
LuckpermsRankConverter.convert()
LuckpermsRankConverter.convert(sender)
} else {
sender.sendMessage(Chat.format("&cYou must be running &aLuck&2Perms &cto execute this!"))
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package ltd.matrixstudios.alchemist.convert.luckperms

import ltd.matrixstudios.alchemist.AlchemistSpigotPlugin
import ltd.matrixstudios.alchemist.convert.IRankConverter
import ltd.matrixstudios.alchemist.models.ranks.Rank
import ltd.matrixstudios.alchemist.service.ranks.RankService
Expand All @@ -9,6 +10,8 @@ import net.luckperms.api.model.group.Group
import net.luckperms.api.query.QueryOptions
import org.bukkit.Bukkit
import org.bukkit.ChatColor
import org.bukkit.entity.Player
import org.bukkit.scheduler.BukkitRunnable

/**
* Class created on 6/13/2023
Expand All @@ -18,14 +21,14 @@ import org.bukkit.ChatColor
* @website https://solo.to/redis
*/
object LuckpermsRankConverter : IRankConverter {
override fun convert() {
override fun convert(player: Player) {
val provider = Bukkit.getServicesManager().getRegistration(LuckPerms::class.java).provider

if (provider != null) {

val weightedGroups = provider.groupManager.loadedGroups.sortedByDescending { group -> group.weight.orElse(0) }

Chat.sendConsoleMessage(Chat.format("&aDiscovered ${weightedGroups.size} groups"))
player.sendMessage(Chat.format("&aDiscovered ${weightedGroups.size} groups"))

val rankToGroup = hashMapOf<Rank, Group>()

Expand All @@ -37,7 +40,7 @@ object LuckpermsRankConverter : IRankConverter {
orderIndex, ArrayList<String>().also{ arrayList -> arrayList.addAll(group.nodes.map { it.key }) },
arrayListOf(),
group.cachedData.getMetaData(QueryOptions.defaultContextualOptions()).prefix ?: "",
getLastColors(group.cachedData.getMetaData(QueryOptions.defaultContextualOptions()).prefix ?: "")
getLastColors(group.cachedData.getMetaData(QueryOptions.defaultContextualOptions()).prefix ?: "&f")
)

rankToGroup[rank] = group
Expand Down Expand Up @@ -67,7 +70,7 @@ object LuckpermsRankConverter : IRankConverter {
}


Chat.sendConsoleMessage(Chat.format("&aSaved ${rankToGroup.size} ranks"))
player.sendMessage(Chat.format("&aSaved ${rankToGroup.size} ranks"))

// apply ranks to users from their groups
provider.userManager.uniqueUsers.thenAcceptAsync { userSet ->
Expand All @@ -78,11 +81,21 @@ object LuckpermsRankConverter : IRankConverter {
// check if a rank by an id of the user's primary group exists
if (rank != null) {

Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "nmgrant ${user.uniqueId} ${user.primaryGroup} perm Rank Conversion (LuckPerms)")
object : BukkitRunnable() {
override fun run() {
Bukkit.dispatchCommand(
Bukkit.getConsoleSender(),
"nmgrant ${user.uniqueId} ${user.primaryGroup} perm Rank Conversion (LuckPerms)"
)
}
}.runTask(AlchemistSpigotPlugin.instance)
}
}
}
}

player.sendMessage(Chat.format("&e&lCAUTION! &cYou may need to set a default rank because Alchemist cannot directly identify"))
player.sendMessage(Chat.format("&cwhich rank should be default. Do this by executing /rank module <rank> default <boolean>"))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import ltd.matrixstudios.alchemist.util.Chat
import org.bukkit.command.CommandSender
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import java.util.UUID

@CommandAlias("friend|friends")
class FriendCommands : BaseCommand() {
Expand All @@ -27,7 +28,6 @@ class FriendCommands : BaseCommand() {
sender.sendMessage(Chat.format("&e/friend list"))
sender.sendMessage(Chat.format("&7&m-------------------------"))
}

@Subcommand("add")
@CommandCompletion("@gameprofile")
fun add(player: Player, @Name("target") gameProfile: GameProfile) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package ltd.matrixstudios.alchemist.friends.filter

import com.mysql.jdbc.TimeUtil
import ltd.matrixstudios.alchemist.models.profile.GameProfile
import java.util.concurrent.TimeUnit

enum class FriendFilter(val displayName: String)
{
ALL("All"), ONLINE("Online Friends"), OFFLINE("Offline Friends"), YOUR_SERVER("Your Server"), RECENTLY_JOINED("Recently Joined");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ import java.util.logging.Level
object BukkitProfileAdaptation
{

val lockedPlayers = mutableListOf<UUID>()

fun loadAllPreLoginEvents()
{
BukkitPreLoginConnection.registerNewCallback { event ->
Expand Down
25 changes: 21 additions & 4 deletions spigot/src/main/kotlin/ltd/matrixstudios/alchemist/util/Chat.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
package ltd.matrixstudios.alchemist.util

import net.md_5.bungee.api.ChatColor
import org.bukkit.Bukkit
import org.bukkit.ChatColor
import org.bukkit.DyeColor
import java.util.regex.Matcher
import java.util.regex.Pattern


object Chat {

@JvmStatic
fun format(string: String) : String {
return ChatColor.translateAlternateColorCodes('&', string)
fun format(message: String): String {
val HEX_PATTERN: Pattern = Pattern.compile("&#(\\w{5}[0-9a-f])")
val matcher: Matcher = HEX_PATTERN.matcher(message)
val buffer = StringBuffer()
while (matcher.find()) {
try {
matcher.appendReplacement(
buffer,
ChatColor.of("#" + matcher.group(1)).toString()
)
} catch (e: NoSuchMethodError) {
return message
}
}
return ChatColor.translateAlternateColorCodes('&', matcher.appendTail(buffer).toString())
}

fun sendConsoleMessage(line: String) {
Expand All @@ -34,7 +49,9 @@ object Chat {
if (str.contains("&a")) return DyeColor.LIME
if (str.contains("&b")) return DyeColor.LIGHT_BLUE
if (str.contains("&d")) return DyeColor.PINK
return if (str.contains("&e")) DyeColor.YELLOW else DyeColor.WHITE
if (str.contains("&e")) return DyeColor.YELLOW

return DyeColor.WHITE
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ltd.matrixstudios.alchemist.vault.permission

import ltd.matrixstudios.alchemist.AlchemistSpigotPlugin
import ltd.matrixstudios.alchemist.models.ranks.Rank
import ltd.matrixstudios.alchemist.service.expirable.RankGrantService
import ltd.matrixstudios.alchemist.service.profiles.ProfileGameService
import ltd.matrixstudios.alchemist.service.ranks.RankService
Expand Down Expand Up @@ -103,7 +104,7 @@ class VaultPermissionExtension : Permission() {
override fun getPrimaryGroup(p0: String?, p1: String?): String {
val profile = ProfileGameService.byUsername(p1!!.toLowerCase()) ?: return "Unknown"

return profile.getCurrentRank()!!.displayName
return profile.getCurrentRank()?.displayName ?: return "Unknown"
}

override fun getGroups(): Array<String> {
Expand Down

0 comments on commit ef08a37

Please sign in to comment.