Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .github/workflows/release-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Create Release with ShadowJars

on:
workflow_dispatch:

jobs:
build:
name: Build ShadowJars and Create Release
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: develop # Ensure it works from the develop branch

- name: Set up JDK 21
uses: actions/setup-java@v3
with:
distribution: 'adopt'
java-version: '21'

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}

- name: Make gradlew executable
run: chmod +x ./gradlew

- name: Build ShadowJars
run: ./gradlew clean build shadowJar

- name: Get Gradle Version
id: gradle_version
run: echo "GRADLE_VERSION=$(./gradlew properties -q | grep "version:" | awk '{print $2}')" >> $GITHUB_ENV

- name: Get Commit Hash
id: commit_hash
run: echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV

# - name: Publish to SimpleCloud Repository
# run: ./gradlew publishMavenJavaPublicationToSimplecloudRepository
# env:
# COMMIT_HASH: ${{ env.COMMIT_HASH }}
# SIMPLECLOUD_USERNAME: ${{ secrets.SIMPLECLOUD_USERNAME }}
# SIMPLECLOUD_PASSWORD: ${{ secrets.SIMPLECLOUD_PASSWORD }}

- name: Create Release
id: create_release
uses: actions/create-release@v1
with:
tag_name: v${{ env.GRADLE_VERSION }}-dev.${{ env.COMMIT_HASH }}
release_name: v${{ env.GRADLE_VERSION }}-dev.${{ env.COMMIT_HASH }}
draft: false
prerelease: true
commitish: develop
body: |
This release contains dev builds for all Gradle modules.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Upload ShadowJars to Release
run: |
# Find JAR files in any submodule's build/libs directory
for jar in $(find . -type f -name "*.jar" -path "*/build/libs/*.jar" -not -path "./build/libs/*"); do
# Check if the filename contains a version number (e.g., a dash followed by numbers)
if [[ $(basename "$jar") =~ -[0-9]+\.[0-9]+ ]]; then
echo "Skipping $jar due to version number"
else
echo "Uploading $jar"
gh release upload v${{ env.GRADLE_VERSION }}-dev.${{ env.COMMIT_HASH }} "$jar"
fi
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .idea/kotlinc.xml

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

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.

31 changes: 22 additions & 9 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@ plugins {
alias(libs.plugins.shadow)
}

allprojects {
val baseVersion = "0.0.1"
val commitHash = System.getenv("COMMIT_HASH")
val snapshotversion = "${baseVersion}-dev.$commitHash"

allprojects {
group = "app.simplecloud.plugin.proxy"
version = "1.0.0"
version = if (commitHash != null) snapshotversion else baseVersion

repositories {
mavenCentral()
Expand All @@ -18,30 +21,40 @@ allprojects {

subprojects {
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.gradleup.shadow")

repositories {
mavenCentral()
maven("https://buf.build/gen/maven")

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

dependencies {
testImplementation(rootProject.libs.kotlinTest)
implementation(rootProject.libs.kotlinJvm)
testImplementation(rootProject.libs.kotlin.test)
implementation(rootProject.libs.kotlin.jvm)
implementation(rootProject.libs.kotlin.coroutines)
}

kotlin {
jvmToolchain(17)
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}

tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "17"
kotlin {
jvmToolchain(21)
compilerOptions {
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0)
}
}

tasks.named("shadowJar", ShadowJar::class) {
Expand Down
50 changes: 33 additions & 17 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
[versions]
kotlin = "1.8.0"
shadow = "8.1.1"
velocity = "3.1.1"
bungeecord = "1.19-R0.1-SNAPSHOT"
kotlin = "2.0.20"
kotlin-coroutines = "1.9.0"
shadow = "8.3.3"
velocity = "3.4.0-SNAPSHOT"
bungeecord = "1.20-R0.1-SNAPSHOT"
adventure = "4.16.0"
adventurelatform = "4.3.2"
adventure-platform = "4.3.2"
gson = "2.10.1"
configurateYaml = "4.0.0"
configurateKotlin = "4.1.2"
configurate-yaml = "4.0.0"
configurate-kotlin = "4.1.2"
simplecloud-event-wrapper = "0.0.1-dev.950792a"
simplecloud-controller = "0.0.30-dev.bf5da83"
command-cloud-core = "2.0.0"
command-cloud-velocity = "2.0.0-beta.10"
command-cloud-bungeecord = "2.0.0-beta.10"

[libraries]
kotlinJvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlinTest = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
velocityApi = { module = "com.velocitypowered:velocity-api", version.ref = "velocity" }
bungeecordApi = { module = "net.md-5:bungeecord-api", version.ref = "bungeecord" }
adventureLegacySerializer = { module = "net.kyori:adventure-text-serializer-legacy", version.ref = "adventure" }
adventureMinimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure" }
adventureBungeecordPlatform = { module = "net.kyori:adventure-platform-bungeecord", version.ref = "adventurelatform" }
kotlin-jvm = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlin-coroutines" }

command-cloud-core = { module = "org.incendo:cloud-core", version.ref = "command-cloud-core" }
command-cloud-velocity = { module = "org.incendo:cloud-velocity", version.ref = "command-cloud-velocity" }
command-cloud-bungeecord = { module = "org.incendo:cloud-bungee", version.ref = "command-cloud-bungeecord" }

velocity = { module = "com.velocitypowered:velocity-api", version.ref = "velocity" }
bungeecord = { module = "net.md-5:bungeecord-api", version.ref = "bungeecord" }
adventure-legacy-serializer = { module = "net.kyori:adventure-text-serializer-legacy", version.ref = "adventure" }
adventure-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure" }
adventure-bungeecord-platform = { module = "net.kyori:adventure-platform-bungeecord", version.ref = "adventure-platform" }
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
configurateYaml = { module = "org.spongepowered:configurate-yaml", version.ref = "configurateYaml" }
configurateKotlin = { module = "org.spongepowered:configurate-extra-kotlin", version.ref = "configurateKotlin" }
configurate-yaml = { module = "org.spongepowered:configurate-yaml", version.ref = "configurate-yaml" }
configurate-kotlin = { module = "org.spongepowered:configurate-extra-kotlin", version.ref = "configurate-kotlin" }

simplecloud-event-wrapper-velocity = { module = "app.simplecloud.event:event-wrapper-velocity", version.ref = "simplecloud-event-wrapper" }
simplecloud-event-wrapper-bungeecord = { module = "app.simplecloud.event:event-wrapper-bungeecord", version.ref = "simplecloud-event-wrapper" }
simplecloud-controller = { module = "app.simplecloud.controller:controller-api", version.ref = "simplecloud-controller" }

[plugins]
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Thu Mar 21 21:19:37 CET 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
13 changes: 9 additions & 4 deletions proxy-bungeecord/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
dependencies {
api(project(":proxy-shared"))

compileOnly(rootProject.libs.bungeecordApi)
compileOnly(rootProject.libs.bungeecord)

implementation(rootProject.libs.adventureLegacySerializer)
implementation(rootProject.libs.adventureMinimessage)
implementation(rootProject.libs.adventureBungeecordPlatform)
implementation(rootProject.libs.adventure.legacy.serializer)
implementation(rootProject.libs.adventure.minimessage)
implementation(rootProject.libs.adventure.bungeecord.platform)

compileOnly(rootProject.libs.simplecloud.event.wrapper.bungeecord)

implementation(rootProject.libs.command.cloud.core)
implementation(rootProject.libs.command.cloud.bungeecord)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package app.simplecloud.plugin.proxy.bungeecord

import app.simplecloud.plugin.proxy.shared.handler.command.CommandSender
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer
import net.md_5.bungee.api.chat.BaseComponent

class BungeeCordCommandSender(private val commandSender: net.md_5.bungee.api.CommandSender
) : CommandSender {

fun getCommandSender(): net.md_5.bungee.api.CommandSender {
return commandSender
}

override fun sendMessage(message: String) {
commandSender.sendMessage(message)
}
}

fun Component.toBaseComponent(): BaseComponent {
return BungeeComponentSerializer.get().serialize(this)[0]
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,59 +2,74 @@ package app.simplecloud.plugin.proxy.bungeecord

import app.simplecloud.plugin.proxy.bungeecord.event.ConfigureTagResolversEvent
import app.simplecloud.plugin.proxy.bungeecord.handler.TabListHandler
import app.simplecloud.plugin.proxy.bungeecord.listener.ConfigureTagResolversListener
import app.simplecloud.plugin.proxy.bungeecord.listener.ProxyPingListener
import app.simplecloud.plugin.proxy.bungeecord.listener.TabListListener
import app.simplecloud.plugin.proxy.shared.config.GeneralConfig
import app.simplecloud.plugin.proxy.bungeecord.listener.*
import app.simplecloud.plugin.proxy.shared.ProxyPlugin
import app.simplecloud.plugin.proxy.shared.config.YamlConfig
import app.simplecloud.plugin.proxy.shared.config.placeholder.PlaceHolderConfiguration
import app.simplecloud.plugin.proxy.shared.config.tablis.TabListConfiguration
import app.simplecloud.plugin.proxy.shared.handler.MotdLayoutHandler
import app.simplecloud.plugin.proxy.shared.handler.command.CommandSender
import app.simplecloud.plugin.proxy.shared.handler.command.ProxyCommandHandler
import net.kyori.adventure.platform.bungeecord.BungeeAudiences
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import net.md_5.bungee.api.connection.ProxiedPlayer
import net.md_5.bungee.api.plugin.Plugin
import org.incendo.cloud.SenderMapper
import org.incendo.cloud.bungee.BungeeCommandManager
import org.incendo.cloud.execution.ExecutionCoordinator


class ProxyBungeeCordPlugin: Plugin() {

lateinit var generalConfiguration: GeneralConfig
lateinit var tabListConfiguration: TabListConfiguration
lateinit var placeHolderConfiguration: PlaceHolderConfiguration
val proxyPlugin = ProxyPlugin(this.dataFolder.path)


val config = YamlConfig(this.dataFolder.path)
val tabListHandler = TabListHandler(this)
val motdLayoutHandler = MotdLayoutHandler(config, generalConfiguration)

private lateinit var commandManager: BungeeCommandManager<CommandSender>

private var adventure: BungeeAudiences? = null

private val miniMessage = MiniMessage.miniMessage()

override fun onEnable() {
val config = YamlConfig(this.dataFolder.path)

this.generalConfiguration = config.load<GeneralConfig>("general")!!
config.save("general", this.generalConfiguration)

this.tabListConfiguration = config.load<TabListConfiguration>("tablist")!!
config.save("tablist", this.tabListConfiguration)
this.proxyPlugin.config.save("tablist", this.proxyPlugin.tabListConfiguration)
this.proxyPlugin.config.save("placeholder", this.proxyPlugin.placeHolderConfiguration)
this.proxyPlugin.config.save("messages", this.proxyPlugin.messagesConfiguration)

this.placeHolderConfiguration = config.load<PlaceHolderConfiguration>("placeholder")!!
config.save("placeholder", this.placeHolderConfiguration)

this.motdLayoutHandler.loadMotdLayouts()
this.proxyPlugin.motdLayoutHandler.loadMotdLayouts()

this.adventure = BungeeAudiences.create(this);
this.proxy.pluginManager.registerListener(this, ProxyPingListener(this))
this.proxy.pluginManager.registerListener(this, ConfigureTagResolversListener(this))
this.proxy.pluginManager.registerListener(this, CloudListener(this))
this.proxy.pluginManager.registerListener(this, ServerPreConnectListener(this))

if (this.tabListConfiguration.tabListUpdateTime > 0)
if (this.proxyPlugin.tabListConfiguration.tabListUpdateTime > 0)
this.tabListHandler.startTabListTask()
else
this.logger.info("Tablist update time is set to 0, tablist will not be updated automatically")

this.proxy.pluginManager.registerListener(this, TabListListener(this))
this.proxy.pluginManager.registerListener(this, ProxyPingListener(this))
this.proxy.pluginManager.registerListener(this, ConfigureTagResolversListener(this))
val executionCoordinator = ExecutionCoordinator.simpleCoordinator<CommandSender>()

val senderMapper = SenderMapper.create<net.md_5.bungee.api.CommandSender, CommandSender>(
{ commandSender -> BungeeCordCommandSender(commandSender) },
{ cloudSender -> (cloudSender as BungeeCordCommandSender).getCommandSender() }
)

commandManager = BungeeCommandManager(
this,
executionCoordinator,
senderMapper
)

val proxyCommandHandler = ProxyCommandHandler(commandManager, this.proxyPlugin)
proxyCommandHandler.loadCommands()

System.getenv("SIMPLECLOUD_MAINTENANCE")?.let {
this.proxyPlugin.maintenance = it == "true"
}
}

override fun onDisable() {
Expand Down
Loading
Loading