Skip to content

Commit

Permalink
Merge pull request #5 from MikChanNoPlugins/dev/dev
Browse files Browse the repository at this point in the history
Next Version
  • Loading branch information
wtlgo authored Mar 21, 2023
2 parents cca8e26 + b2d5340 commit b0de5fc
Show file tree
Hide file tree
Showing 18 changed files with 355 additions and 70 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Converts various monitoring vote systems to Votifier events
## Supported Monitorings

- [MineServ](https://mineserv.top)
- [TMonitoring](https://tmonitoring.com)

## Support the creator
[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/mcnp)
Expand Down
27 changes: 17 additions & 10 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ static def determineVersion(String defaultVersion) {
}

group = "dev.mikchan.mcnp"
version = determineVersion("1.0.2")
version = determineVersion("1.2.1")

def localProperties = new Properties()
def propertiesFile = rootProject.file("local.properties")
Expand All @@ -48,19 +48,27 @@ repositories {
name = "jitpack"
url = "https://jitpack.io/"
}

maven {
name = "Ailis Maven Releases"
url = "https://nexus.ailis.de/repository/maven-releases/de/ailis/pherialize/pherialize/"
}
}

dependencies {
//noinspection VulnerableLibrariesLocal
compileOnly "org.spigotmc:spigot-api:1.19.3-R0.1-SNAPSHOT"
compileOnly "net.md-5:bungeecord-api:1.19-R0.1-SNAPSHOT"

implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.10"

implementation "io.ktor:ktor-server-core:2.2.3"
implementation "io.ktor:ktor-server-netty:2.2.3"
implementation "dev.dejvokep:boosted-yaml-spigot:1.3"
implementation "io.ktor:ktor-server-core:2.2.4"
implementation "io.ktor:ktor-server-netty:2.2.4"
implementation "dev.dejvokep:boosted-yaml:1.3"
implementation "com.xk72:pherialize:1.2.4"

compileOnly "com.github.NuVotifier.NuVotifier:nuvotifier-bukkit:2.7.2"
compileOnly "com.github.NuVotifier.NuVotifier:nuvotifier-bungeecord:2.7.2"
compileOnly "com.github.NuVotifier.NuVotifier:nuvotifier-api:2.7.2"
compileOnly "com.github.NuVotifier.NuVotifier:nuvotifier-common:2.7.2"

Expand All @@ -71,11 +79,9 @@ dependencies {
shadow "org.bstats:bstats-base:3.0.0"
}

def targetJavaVersion = 8
def targetJavaVersion = 11
java {
def javaVersion = JavaVersion.toVersion(targetJavaVersion)
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
if (JavaVersion.current() < javaVersion) {
toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
}
Expand All @@ -94,20 +100,21 @@ processResources {
def props = [version: version]
inputs.properties props
filteringCharset "UTF-8"
filesMatching("plugin.yml") {

filesMatching(["plugin.yml", "bungee.yml"]) {
expand props
}
}

compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = 11
}
}

compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = 11
}
}

Expand Down
43 changes: 43 additions & 0 deletions src/main/java/dev/mikchan/mcnp/votereceiver/IPlugin.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dev.mikchan.mcnp.votereceiver

import com.vexsoftware.votifier.VoteHandler
import dev.mikchan.mcnp.votereceiver.config.IConfig
import dev.mikchan.mcnp.votereceiver.utility.IUtility
import io.ktor.server.engine.*
import java.util.concurrent.ExecutorService
import java.util.logging.Logger

/**
* Plugin interface
*/
interface IPlugin {
/**
* Manages plugin configuration
*/
val config: IConfig

/**
* Useful functions
*/
val utility: IUtility

/**
* Basically, NuVotifier instance
*/
val voteHandler: VoteHandler?

/**
* A thread pool for concurrent tasks
*/
val threadPool: ExecutorService

/**
* A web server instance
*/
val webServer: ApplicationEngine

/**
* Logger instance
*/
val log: Logger
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package dev.mikchan.mcnp.votereceiver

import com.vexsoftware.votifier.VoteHandler
import dev.mikchan.mcnp.votereceiver.config.IConfig
import dev.mikchan.mcnp.votereceiver.factory.IFactory
import dev.mikchan.mcnp.votereceiver.factory.bungee.BungeeCordFactory
import dev.mikchan.mcnp.votereceiver.utility.IUtility
import io.ktor.server.engine.*
import net.md_5.bungee.api.plugin.Plugin
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.logging.Logger

/**
* Main bungeeecord plugin class
*/
@Suppress("unused")
class VoteReceiverBungeeCordPlugin : Plugin(), IPlugin {
private val factory: IFactory by lazy { BungeeCordFactory(this) }

override val config: IConfig by lazy { factory.createConfig() }
override val utility: IUtility by lazy { factory.createUtility() }
override val voteHandler: VoteHandler? by lazy { factory.createVoteHandler() }
override val threadPool: ExecutorService by lazy { Executors.newSingleThreadExecutor() }
override val webServer: ApplicationEngine by lazy { factory.createApplicationEngine() }
override val log: Logger get() = this.logger

override fun onEnable() {
webServer.start()
}

override fun onDisable() {
webServer.stop()
threadPool.shutdownNow()
}
}
43 changes: 0 additions & 43 deletions src/main/java/dev/mikchan/mcnp/votereceiver/VoteReceiverPlugin.kt

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package dev.mikchan.mcnp.votereceiver

import com.vexsoftware.votifier.VoteHandler
import dev.mikchan.mcnp.votereceiver.config.IConfig
import dev.mikchan.mcnp.votereceiver.factory.IFactory
import dev.mikchan.mcnp.votereceiver.factory.spigot.SpigotFactory
import dev.mikchan.mcnp.votereceiver.utility.IUtility
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.plugins.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import org.bstats.bukkit.Metrics
import org.bukkit.plugin.java.JavaPlugin
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.logging.Logger


/**
* Main spigot plugin class
*/
@Suppress("unused")
class VoteReceiverSpigotPlugin : JavaPlugin(), IPlugin {
companion object {
private const val bStatsId = 17922
}

private val factory: IFactory by lazy { SpigotFactory(this) }

override val config: IConfig by lazy { factory.createConfig() }
override val utility: IUtility by lazy { factory.createUtility() }
override val voteHandler: VoteHandler? by lazy { factory.createVoteHandler() }
override val threadPool: ExecutorService by lazy { Executors.newSingleThreadExecutor() }
override val webServer: ApplicationEngine by lazy { factory.createApplicationEngine() }
override val log: Logger get() = this.logger

override fun onEnable() {
webServer.start()

Metrics(this, bStatsId)
}

override fun onDisable() {
webServer.stop()
threadPool.shutdownNow()
}
}
7 changes: 7 additions & 0 deletions src/main/java/dev/mikchan/mcnp/votereceiver/config/IConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,11 @@ interface IConfig {
* A secret key of `mineserv.top`
*/
val mineServTopKey: String?

/**
* Determines, if the test route accessible.
*
* WARNING: Should NEVER be `true` in production
*/
val testEnabled: Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import dev.dejvokep.boostedyaml.settings.dumper.DumperSettings
import dev.dejvokep.boostedyaml.settings.general.GeneralSettings
import dev.dejvokep.boostedyaml.settings.loader.LoaderSettings
import dev.dejvokep.boostedyaml.settings.updater.UpdaterSettings
import dev.dejvokep.boostedyaml.spigot.SpigotSerializer
import dev.mikchan.mcnp.votereceiver.config.IConfig
import java.io.File
import java.io.InputStream
Expand All @@ -15,7 +14,7 @@ internal class BoostedYamlConfig(document: File, resource: InputStream) : IConfi
private val config: YamlDocument = YamlDocument.create(
document,
resource,
GeneralSettings.builder().setSerializer(SpigotSerializer.getInstance()).build(),
GeneralSettings.DEFAULT,
LoaderSettings.builder().setAutoUpdate(true).build(),
DumperSettings.DEFAULT,
UpdaterSettings.builder().setVersioning(BasicVersioning("config-version")).build()
Expand All @@ -27,4 +26,5 @@ internal class BoostedYamlConfig(document: File, resource: InputStream) : IConfi

override val port: Int get() = config.getInt("port", 6418)
override val mineServTopKey: String? get() = config.getString("mineserv-top-key")
override val testEnabled: Boolean get() = config.getBoolean("enable-test-route", false)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ internal class FallbackConfig : IConfig {

override val port: Int get() = 6418
override val mineServTopKey: String? get() = null
override val testEnabled: Boolean get() = false
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.mikchan.mcnp.votereceiver.factory

import com.vexsoftware.votifier.NuVotifierBukkit
import com.vexsoftware.votifier.VoteHandler
import dev.mikchan.mcnp.votereceiver.config.IConfig
import dev.mikchan.mcnp.votereceiver.utility.IUtility
import io.ktor.server.engine.*
Expand Down Expand Up @@ -37,5 +38,5 @@ interface IFactory {
*
* @return A [NuVotifierBukkit] instance
*/
fun createVoteHandler(): NuVotifierBukkit?
fun createVoteHandler(): VoteHandler?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package dev.mikchan.mcnp.votereceiver.factory.bungee

import com.vexsoftware.votifier.bungee.NuVotifier
import dev.mikchan.mcnp.votereceiver.VoteReceiverBungeeCordPlugin
import dev.mikchan.mcnp.votereceiver.config.IConfig
import dev.mikchan.mcnp.votereceiver.config.boosted.BoostedYamlConfig
import dev.mikchan.mcnp.votereceiver.config.fallback.FallbackConfig
import dev.mikchan.mcnp.votereceiver.factory.IFactory
import dev.mikchan.mcnp.votereceiver.utility.IUtility
import dev.mikchan.mcnp.votereceiver.utility.base.Utility
import dev.mikchan.mcnp.votereceiver.web.createMineServTopRoute
import dev.mikchan.mcnp.votereceiver.web.createTMonitoringComRoute
import dev.mikchan.mcnp.votereceiver.web.createTestRoute
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.routing.*
import net.md_5.bungee.api.ProxyServer
import java.io.File

internal class BungeeCordFactory(private val plugin: VoteReceiverBungeeCordPlugin) : IFactory {
override fun createConfig(): IConfig {
val resource = plugin.getResourceAsStream("config.yml")

return if (resource != null) {
BoostedYamlConfig(File(plugin.dataFolder, "config.yml"), resource)
} else {
FallbackConfig()
}
}

override fun createUtility(): IUtility {
return Utility()
}

override fun createApplicationEngine(): ApplicationEngine {
return embeddedServer(Netty, port = plugin.config.port) {
routing {
createMineServTopRoute(plugin)
createTMonitoringComRoute(plugin)

if (plugin.config.testEnabled) {
createTestRoute(plugin)
}
}
}
}

override fun createVoteHandler(): NuVotifier? {
return ProxyServer.getInstance().pluginManager.getPlugin("NuVotifier") as? NuVotifier
}
}
Loading

0 comments on commit b0de5fc

Please sign in to comment.