Skip to content

Commit

Permalink
Switched like to 95% to di and fixed some bugs / cleaned up the codebase
Browse files Browse the repository at this point in the history
  • Loading branch information
byPixelTV committed Aug 11, 2024
1 parent 8f4b1b8 commit 0c5ddd6
Show file tree
Hide file tree
Showing 18 changed files with 695 additions and 504 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 30 additions & 9 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
plugins {
kotlin("jvm") version "2.0.0"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("io.github.goooler.shadow") version "8.1.7"
}

group = "de.bypixeltv"
version = "1.0.2"

repositories {
mavenCentral()
maven {
name = "papermc"
url = uri("https://repo.papermc.io/repository/maven-public/")
url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots")
}

mavenCentral()
maven {
url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots")
name = "jitpack"
url = uri("https://jitpack.io")
}
maven {
name = "papermc"
url = uri("https://repo.papermc.io/repository/maven-public/")
}
}

Expand All @@ -24,12 +28,26 @@ dependencies {
// Kotlinx Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0-RC")

compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
implementation("redis.clients:jedis:5.2.0-beta4")
implementation("dev.jorel:commandapi-velocity-shade:9.5.0-SNAPSHOT")
implementation("org.yaml:snakeyaml:2.2")
implementation("org.bstats:bstats-velocity:3.0.2")
annotationProcessor("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")

implementation("dev.jorel:commandapi-velocity-shade:9.6.0-SNAPSHOT")
implementation("jakarta.inject:jakarta.inject-api:2.0.1.MR")

compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")

compileOnly("eu.cloudnetservice.cloudnet:syncproxy:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:bridge:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:driver:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:platform-inject-runtime:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:platform-inject-processor:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:platform-inject-loader:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:platform-inject-api:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:platform-inject-support:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:wrapper-jvm:4.0.0-RC10")
compileOnly("eu.cloudnetservice.cloudnet:common:4.0.0-RC10")
}

sourceSets {
Expand All @@ -46,7 +64,7 @@ sourceSets {
tasks {
compileJava {
options.encoding = "UTF-8"
options.release.set(17)
options.release.set(21)
}

named("compileKotlin", org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask::class.java)
Expand All @@ -57,9 +75,12 @@ tasks {

shadowJar {
relocate("org.bstats", "de.bypixeltv.redivelocity.metrics")
dependencies {
exclude(dependency("eu.cloudnetservice.cloudnet:.*"))
}
}
}

kotlin {
jvmToolchain(17)
jvmToolchain(21)
}
105 changes: 58 additions & 47 deletions src/main/kotlin/de/bypixeltv/redivelocity/RediVelocity.kt
Original file line number Diff line number Diff line change
@@ -1,41 +1,52 @@
package de.bypixeltv.redivelocity

import com.google.inject.Inject
import com.velocitypowered.api.event.Subscribe
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent
import com.velocitypowered.api.plugin.Plugin
import com.velocitypowered.api.proxy.ProxyServer
import de.bypixeltv.redivelocity.commands.RediVelocityCommand
import de.bypixeltv.redivelocity.config.ConfigLoader
import de.bypixeltv.redivelocity.listeners.*
import de.bypixeltv.redivelocity.managers.RedisController
import de.bypixeltv.redivelocity.managers.UpdateManager
import de.bypixeltv.redivelocity.utils.CloudNetUtils
import de.bypixeltv.redivelocity.utils.ProxyIdGenerator
import dev.jorel.commandapi.CommandAPI
import dev.jorel.commandapi.CommandAPIVelocityConfig
import jakarta.inject.Inject
import jakarta.inject.Provider
import jakarta.inject.Singleton
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bstats.velocity.Metrics

@Plugin(id = "redivelocity", name = "RediVelocity", version = "1.0.2", authors = ["byPixelTV"], description = "A Velocity plugin that sends Redis messages if a player joins the network, switches servers, or leaves the network.", url = "https://bypixeltv.de")
class RediVelocity @Inject constructor(val proxy: ProxyServer, private val metricsFactory: Metrics.Factory) {
@Singleton
class RediVelocity @Inject constructor(
private val proxy: ProxyServer,
private val metricsFactory: Metrics.Factory,
private val proxyIdGenerator: ProxyIdGenerator,
private val updateManager: UpdateManager,
private val rediVelocityCommandProvider: Provider<RediVelocityCommand>
) {

init {
CommandAPI.onLoad(CommandAPIVelocityConfig(proxy, this).silentLogs(true).verboseOutput(true))
}

private var redisController: RedisController? = null
private val configLoader: ConfigLoader = ConfigLoader("plugins/redivelocity/config.yml").apply { load() }
private val config = configLoader.config
private val miniMessages = MiniMessage.miniMessage()


private var jsonFormat: String = "false"
private var jsonFormat: String = config?.jsonFormat.toString()
private var proxyId: String = ""
private lateinit var redisController: RedisController

fun getProxyId(): String {
return proxyId
}

fun getRedisController(): RedisController {
return redisController
}

fun sendLogs(message: String) {
this.proxy.consoleCommandSource.sendMessage(miniMessages.deserialize("<grey>[<aqua>RediVelocity</aqua>]</grey> <yellow>$message</yellow>"))
}
Expand All @@ -47,32 +58,32 @@ class RediVelocity @Inject constructor(val proxy: ProxyServer, private val metri
@Suppress("UNUSED")
@Subscribe
fun onProxyInitialization(event: ProxyInitializeEvent) {
metricsFactory.make(this, 22365)
CommandAPI.onEnable()
event.toString()

// Load config and create RedisController
configLoader.load()
val config = configLoader.config
redisController = config?.let { RedisController(this, it) }
jsonFormat = config?.jsonFormat.toString()

redisController = RedisController(this, config!!)

metricsFactory.make(this, 22365)
CommandAPI.onEnable()
event.toString()

// Generate new proxy id
do {
proxyId = config?.let { ProxyIdGenerator(redisController!!, it).generateProxyId() }.toString()
val rvProxiesList = redisController!!.getList("rv-proxies")
var rvProxiesListFormatted = rvProxiesList?.joinToString()
if (rvProxiesListFormatted?.isEmpty() == true) {
rvProxiesListFormatted = "No proxies are connected"
proxyId = if (config.cloudnet.enabled) {
if (config.cloudnet.cloudnetUseServiceId) {
CloudNetUtils().getServicename()
} else {
proxyIdGenerator.generate()
}
this.sendLogs("Generated proxy ID: $proxyId")
this.sendLogs("Connected proxies: ${rvProxiesListFormatted ?: "No proxies are connected"}")// Add logging
} while (rvProxiesList?.contains(proxyId) == true)

redisController!!.addToList("rv-proxies", arrayOf(proxyId))
redisController!!.setHashField("rv-proxy-players", proxyId, 0.toString())
if (redisController!!.getString("rv-global-playercount") == null) {
redisController!!.setString("rv-global-playercount", 0.toString())
} else {
proxyIdGenerator.generate()
}

redisController.addToList("rv-proxies", arrayOf(proxyId))
redisController.setHashField("rv-proxy-players", proxyId, 0.toString())
if (redisController.getString("rv-global-playercount") == null) {
redisController.setString("rv-global-playercount", 0.toString())
}
this.sendLogs("Creating new Proxy with ID: $proxyId")
val version = proxy.pluginManager.getPlugin("redivelocity").get().description.version.toString()
Expand All @@ -83,37 +94,37 @@ class RediVelocity @Inject constructor(val proxy: ProxyServer, private val metri
this.sendLogs("https://github.com/byPixelTV/RediVelocity/issues")
}

UpdateManager(this, proxy).checkForUpdate()
updateManager.checkForUpdate()

// Register listeners
proxy.eventManager.register(this, ServerSwitchListener(this, redisController!!, config!!))
proxy.eventManager.register(this, PostLoginListener(this, redisController!!, config, proxyId, proxy))
proxy.eventManager.register(this, DisconnectListener(this, redisController!!, config, proxyId))
proxy.eventManager.register(this, ProxyPingListener(proxy, redisController!!))
proxy.eventManager.register(this, ServerSwitchListener(this, config))
proxy.eventManager.register(this, PostLoginListener(this, config))
proxy.eventManager.register(this, DisconnectListener(this, config))

if (config.playerCountSync) {
proxy.eventManager.register(this, ProxyPingListener(this))
}

// Register commands
RediVelocityCommand(this, proxy, redisController!!, config)
rediVelocityCommandProvider.get().register()
}

@Suppress("UNUSED")
@Subscribe
fun onProxyShutdown(event: ProxyShutdownEvent) {
event.toString()
redisController!!.removeFromListByValue("rv-proxies", proxyId)
redisController!!.deleteHashField("rv-proxy-players", proxyId)
redisController!!.deleteHash("rv-players-name")
redisController!!.deleteHash("rv-$proxyId-servers-servers")
redisController!!.deleteHash("rv-$proxyId-servers-players")
redisController!!.deleteHash("rv-$proxyId-servers-playercount")
redisController!!.deleteHash("rv-$proxyId-servers-address")
redisController.removeFromListByValue("rv-proxies", proxyId)
redisController.deleteHashField("rv-proxy-players", proxyId)
redisController.deleteHash("rv-players-name")
redisController.deleteHash("rv-$proxyId-servers-servers")
redisController.deleteHash("rv-$proxyId-servers-players")
redisController.deleteHash("rv-$proxyId-servers-playercount")
redisController.deleteHash("rv-$proxyId-servers-address")
// Check if any proxies are still connected if not, delete the hash
if (redisController!!.getList("proxies")?.isEmpty() == true) {
redisController!!.deleteHash("rv-proxy-players")
redisController!!.deleteString("rv-global-playercount")
}
if (redisController != null) {
redisController!!.shutdown()
if (redisController.getList("proxies")?.isEmpty() == true) {
redisController.deleteHash("rv-proxy-players")
redisController.deleteString("rv-global-playercount")
}
redisController.shutdown()
}

}
Loading

0 comments on commit 0c5ddd6

Please sign in to comment.