From ab7b04bd8c423bd97bf67f23a8c4c5dfdce95389 Mon Sep 17 00:00:00 2001 From: Syrent Date: Sat, 5 Nov 2022 15:49:47 +0330 Subject: [PATCH] Add vanish placeholders --- gradle.properties | 2 +- .../spigot/VelocityVanishSpigot.kt | 1 + .../spigot/bridge/BukkitBridgeManager.kt | 7 ++ .../spigot/hook/DependencyManager.kt | 3 +- .../spigot/hook/PlaceholderAPIHook.kt | 74 ++++++++++++++++++- .../velocityvanish/velocity/VelocityVanish.kt | 5 +- .../velocity/bridge/VelocityBridgeManager.kt | 21 ++++-- src/main/resources/velocity-plugin.json | 2 +- 8 files changed, 99 insertions(+), 16 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2821dfc2..50c0e4d9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version=3.4.0 +version=3.5.0 plugin-name=VelocityVanish \ No newline at end of file diff --git a/src/main/java/ir/syrent/velocityvanish/spigot/VelocityVanishSpigot.kt b/src/main/java/ir/syrent/velocityvanish/spigot/VelocityVanishSpigot.kt index a4e75e87..69586b3d 100644 --- a/src/main/java/ir/syrent/velocityvanish/spigot/VelocityVanishSpigot.kt +++ b/src/main/java/ir/syrent/velocityvanish/spigot/VelocityVanishSpigot.kt @@ -29,6 +29,7 @@ class VelocityVanishSpigot : RUoMPlugin() { lateinit var vanishManager: VanishManager private set + val proxyPlayers = mutableMapOf>() val vanishedNames = mutableSetOf() override fun onEnable() { diff --git a/src/main/java/ir/syrent/velocityvanish/spigot/bridge/BukkitBridgeManager.kt b/src/main/java/ir/syrent/velocityvanish/spigot/bridge/BukkitBridgeManager.kt index 8f55a09c..17727b34 100644 --- a/src/main/java/ir/syrent/velocityvanish/spigot/bridge/BukkitBridgeManager.kt +++ b/src/main/java/ir/syrent/velocityvanish/spigot/bridge/BukkitBridgeManager.kt @@ -37,6 +37,13 @@ class BukkitBridgeManager( plugin.vanishedNames.clear() plugin.vanishedNames.addAll(vanishedPlayers.map { it.asString }) } + "Players" -> { + val servers = messageJson["servers"].asJsonObject + plugin.proxyPlayers.clear() + for (server in servers.keySet()) { + plugin.proxyPlayers[server] = servers[server].asJsonArray.map { it.asString }.toList() + } + } else -> { Ruom.warn("Unsupported plugin message received from internal channel: $type") } diff --git a/src/main/java/ir/syrent/velocityvanish/spigot/hook/DependencyManager.kt b/src/main/java/ir/syrent/velocityvanish/spigot/hook/DependencyManager.kt index e7c08dc8..8fda3a48 100644 --- a/src/main/java/ir/syrent/velocityvanish/spigot/hook/DependencyManager.kt +++ b/src/main/java/ir/syrent/velocityvanish/spigot/hook/DependencyManager.kt @@ -1,5 +1,6 @@ package ir.syrent.velocityvanish.spigot.hook +import ir.syrent.velocityvanish.spigot.VelocityVanishSpigot import ir.syrent.velocityvanish.spigot.storage.Settings object DependencyManager { @@ -28,7 +29,7 @@ object DependencyManager { this.register() proCosmeticsHook = this } - PlaceholderAPIHook("PlaceholderAPI").apply { + PlaceholderAPIHook(VelocityVanishSpigot.instance, "PlaceholderAPI").apply { this.register() placeholderAPIHook = this } diff --git a/src/main/java/ir/syrent/velocityvanish/spigot/hook/PlaceholderAPIHook.kt b/src/main/java/ir/syrent/velocityvanish/spigot/hook/PlaceholderAPIHook.kt index fce34136..de17c679 100644 --- a/src/main/java/ir/syrent/velocityvanish/spigot/hook/PlaceholderAPIHook.kt +++ b/src/main/java/ir/syrent/velocityvanish/spigot/hook/PlaceholderAPIHook.kt @@ -1,11 +1,81 @@ package ir.syrent.velocityvanish.spigot.hook -class PlaceholderAPIHook constructor(name: String) : Dependency(name) { +import ir.syrent.velocityvanish.spigot.VelocityVanishSpigot +import ir.syrent.velocityvanish.spigot.ruom.Ruom +import ir.syrent.velocityvanish.spigot.storage.Settings +import me.clip.placeholderapi.expansion.PlaceholderExpansion +import org.bukkit.OfflinePlayer + +class PlaceholderAPIHook constructor(plugin: VelocityVanishSpigot, name: String) : Dependency(name) { + + init { + if (exists) { + VanishExpansion(plugin).register() + } + } override fun features(): List { return mutableListOf( - "Access to all placeholders in all plugin messages." + "Access to all placeholders in all plugin messages.", + "Add plugin placeholders like %velocityvanish_online_total% to PlaceholderAPI." ) } + class VanishExpansion( + private val plugin: VelocityVanishSpigot + ) : PlaceholderExpansion() { + override fun getIdentifier(): String { + return Ruom.getPlugin().description.name.lowercase() + } + + override fun getAuthor(): String { + return Ruom.getPlugin().description.authors.joinToString(", ") + } + + override fun getVersion(): String { + return Ruom.getPlugin().description.version + } + + override fun persist(): Boolean { + return true + } + + override fun canRegister(): Boolean { + return true + } + + override fun onRequest(player: OfflinePlayer, params: String): String? { + if (params.equals("vanished", true)) { + return if (plugin.vanishedNames.contains(player.name)) "true" else "false" + } + + if (params.equals("count", true)) { + return plugin.vanishedNames.size.toString() + } + + if (params.startsWith("online_")) { + val type = params.substring(7) + + return if (type.equals("here", true)) { + Ruom.getOnlinePlayers().filter { !plugin.vanishedNames.contains(it.name) }.size.toString() + } else if (type.equals("total", true)) { + val players = mutableListOf() + for (serverPlayers in plugin.proxyPlayers.values.filter { it.isNotEmpty() }) { + players.addAll(serverPlayers) + } + players.filter { !plugin.vanishedNames.contains(it) }.size.toString() + } else { + if (!Settings.velocitySupport) { + warning("Plugin trying to get online players from other servers but Velocity support is disabled.") + Ruom.getOnlinePlayers().filter { !plugin.vanishedNames.contains(it.name) }.size.toString() + } else { + (plugin.proxyPlayers[type.lowercase()]?.filter { !plugin.vanishedNames.contains(it) }?.size ?: 0).toString() + } + } + } + + return null + } + } + } \ No newline at end of file diff --git a/src/main/java/ir/syrent/velocityvanish/velocity/VelocityVanish.kt b/src/main/java/ir/syrent/velocityvanish/velocity/VelocityVanish.kt index 7fbd6478..6158fbdc 100644 --- a/src/main/java/ir/syrent/velocityvanish/velocity/VelocityVanish.kt +++ b/src/main/java/ir/syrent/velocityvanish/velocity/VelocityVanish.kt @@ -57,11 +57,10 @@ class VelocityVanish @Inject constructor( VRuom.runAsync({ for (registeredServer in getServer().allServers) { if (registeredServer.playersConnected.isNotEmpty()) { - for (player in registeredServer.playersConnected) { - bridgeManager.sendVanishedPlayers(registeredServer) - } + bridgeManager.sendVanishedPlayers(registeredServer) } } + bridgeManager.sendProxyPlayers() }, 0, TimeUnit.SECONDS, 1, TimeUnit.SECONDS) } diff --git a/src/main/java/ir/syrent/velocityvanish/velocity/bridge/VelocityBridgeManager.kt b/src/main/java/ir/syrent/velocityvanish/velocity/bridge/VelocityBridgeManager.kt index a762cd55..6fdb695c 100644 --- a/src/main/java/ir/syrent/velocityvanish/velocity/bridge/VelocityBridgeManager.kt +++ b/src/main/java/ir/syrent/velocityvanish/velocity/bridge/VelocityBridgeManager.kt @@ -13,14 +13,6 @@ class VelocityBridgeManager( private val bridge: VelocityBridge ) { - fun sendVanishedPlayers(name: String) { - val messageJson = JsonObject() - messageJson.addProperty("type", "Vanish") - messageJson.addProperty("name", name) - - sendPluginMessage(messageJson) - } - fun sendVanishedPlayers(server: RegisteredServer) { val messageJson = JsonObject() messageJson.addProperty("type", "Vanish") @@ -30,6 +22,19 @@ class VelocityBridgeManager( sendPluginMessage(messageJson, server) } + fun sendProxyPlayers() { + val messageJson = JsonObject() + messageJson.addProperty("type", "Players") + + val jsonObject = JsonObject() + for (registeredServer in VRuom.getServer().allServers) { + jsonObject.add(registeredServer.serverInfo.name.lowercase(), GsonUtils.get().toJsonTree(registeredServer.playersConnected.map { it.username }).asJsonArray) + messageJson.add("servers", jsonObject) + + sendPluginMessage(messageJson) + } + } + private fun sendPluginMessage(messageJson: JsonObject) { val byteArrayInputStream = ByteStreams.newDataOutput() byteArrayInputStream.writeUTF(GsonUtils.get().toJson(messageJson)) diff --git a/src/main/resources/velocity-plugin.json b/src/main/resources/velocity-plugin.json index db37541c..24487f38 100644 --- a/src/main/resources/velocity-plugin.json +++ b/src/main/resources/velocity-plugin.json @@ -1 +1 @@ -{"id":"velocityvanish","name":"VelocityVanish","version":"3.4.0","description":"Vanish plugin for velocity servers","url":"syrent.ir","authors":["Syrent"],"dependencies":[],"main":"ir.syrent.velocityvanish.velocity.VelocityVanish"} \ No newline at end of file +{"id":"velocityvanish","name":"VelocityVanish","version":"3.5.0","description":"Vanish plugin for velocity servers","url":"syrent.ir","authors":["Syrent"],"dependencies":[],"main":"ir.syrent.velocityvanish.velocity.VelocityVanish"} \ No newline at end of file