diff --git a/.gitignore b/.gitignore index b63da45..bcc07bc 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ bin/ ### VS Code ### .vscode/ +.idea/ ### Mac OS ### .DS_Store \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 11277d3..f86177b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,6 +23,10 @@ allprojects { maven("https://libraries.minecraft.net") maven("https://repo.papermc.io/repository/maven-public") maven("https://repo.simplecloud.app/snapshots") + maven("https://repo.waterdog.dev/releases/") + maven("https://repo.waterdog.dev/snapshots/") + maven("https://repo.opencollab.dev/maven-releases/") + maven("https://repo.opencollab.dev/maven-snapshots/") } } @@ -117,6 +121,10 @@ subprojects { mergeServiceFiles() archiveFileName.set("${project.name}.jar") + dependencies { + include(project(":connection-shared")) + } + val externalRelocatePath = "app.simplecloud.external" relocate("kotlinx", "${externalRelocatePath}.kotlinx") relocate("io", "${externalRelocatePath}.io") diff --git a/connection-waterdog/build.gradle.kts b/connection-waterdog/build.gradle.kts new file mode 100644 index 0000000..aee1f2b --- /dev/null +++ b/connection-waterdog/build.gradle.kts @@ -0,0 +1,4 @@ +dependencies { + api(project(":connection-shared")) + compileOnly(libs.waterdog) +} \ No newline at end of file diff --git a/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/JoinHandler.kt b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/JoinHandler.kt new file mode 100644 index 0000000..6942cb6 --- /dev/null +++ b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/JoinHandler.kt @@ -0,0 +1,21 @@ +package app.simplecloud.plugin.connection.waterdog + +import app.simplecloud.plugin.connection.shared.ServerConnectionPlugin +import dev.waterdog.waterdogpe.ProxyServer +import dev.waterdog.waterdogpe.network.connection.handler.IJoinHandler +import dev.waterdog.waterdogpe.network.serverinfo.ServerInfo +import dev.waterdog.waterdogpe.player.ProxiedPlayer + +class JoinHandler( + private val server: ProxyServer, + private val serverConnection: ServerConnectionPlugin +) : IJoinHandler { + override fun determineServer(player: ProxiedPlayer): ServerInfo { + val serverConnectionInfoName = serverConnection.getServerNameForLogin(player) + if (serverConnectionInfoName == null) { + player.disconnect(serverConnection.config.fallbackConnectionsConfig.noTargetConnectionFoundMessage) + } + + return server.getServerInfo(serverConnectionInfoName) + } +} \ No newline at end of file diff --git a/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/ReconnectHandler.kt b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/ReconnectHandler.kt new file mode 100644 index 0000000..366af19 --- /dev/null +++ b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/ReconnectHandler.kt @@ -0,0 +1,16 @@ +package app.simplecloud.plugin.connection.waterdog + +import app.simplecloud.plugin.connection.shared.ServerConnectionPlugin +import dev.waterdog.waterdogpe.ProxyServer +import dev.waterdog.waterdogpe.network.connection.handler.IReconnectHandler +import dev.waterdog.waterdogpe.network.serverinfo.ServerInfo +import dev.waterdog.waterdogpe.player.ProxiedPlayer + +class ReconnectHandler( + private val server: ProxyServer, + private val serverConnection: ServerConnectionPlugin +) : IReconnectHandler { + override fun getFallbackServer(proxiedPlayer: ProxiedPlayer, serverInfo: ServerInfo, s: String): ServerInfo? { + return server.getServerInfo(serverConnection.getServerNameForLogin(proxiedPlayer)) + } +} \ No newline at end of file diff --git a/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/WaterdogServerConnectionPlugin.kt b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/WaterdogServerConnectionPlugin.kt new file mode 100644 index 0000000..e805ceb --- /dev/null +++ b/connection-waterdog/src/main/kotlin/app/simplecloud/plugin/connection/waterdog/WaterdogServerConnectionPlugin.kt @@ -0,0 +1,29 @@ +package app.simplecloud.plugin.connection.waterdog + +import app.simplecloud.plugin.connection.shared.ServerConnectionPlugin +import app.simplecloud.plugin.connection.shared.server.ServerConnectionInfo +import dev.waterdog.waterdogpe.player.ProxiedPlayer +import dev.waterdog.waterdogpe.plugin.Plugin + +class WaterdogServerConnectionPlugin : Plugin() { + private lateinit var serverConnection: ServerConnectionPlugin + override fun onEnable() { + + + serverConnection = ServerConnectionPlugin( + dataFolder.toPath(), + { + proxy.servers.map { + ServerConnectionInfo( + it.serverName, + it.players.size + ) + } + }, + { player, permission -> player.hasPermission(permission) } + ) + + proxy.reconnectHandler = ReconnectHandler(proxy, serverConnection) + proxy.joinHandler = JoinHandler(proxy, serverConnection) + } +} \ No newline at end of file diff --git a/connection-waterdog/src/main/resources/plugin.yml b/connection-waterdog/src/main/resources/plugin.yml new file mode 100644 index 0000000..c0dc7d9 --- /dev/null +++ b/connection-waterdog/src/main/resources/plugin.yml @@ -0,0 +1,5 @@ +name: connection-waterdog +version: 1.0-SNAPSHOT +author: InvalidJoker + +main: app.simplecloud.plugin.connection.waterdog.WaterdogServerConnectionPlugin \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 89257c4..c2e7a3f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,10 +2,12 @@ kotlin = "2.0.20" shadow = "8.3.3" sonatype-central-portal-publisher = "1.2.3" +waterdog = "2.0.3-SNAPSHOT" [libraries] kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } +waterdog = { module = "dev.waterdog.waterdogpe:waterdog", version.ref = "waterdog"} [plugins] kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 26bd757..16e8857 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,4 +13,4 @@ plugins { rootProject.name = "server-connection-plugin" -include("connection-shared", "connection-velocity", "connection-bungeecord") +include("connection-shared", "connection-velocity", "connection-bungeecord", "connection-waterdog")