Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c00fb93
fix: update library manager paths and remove caffeine relocation
Syrent Feb 18, 2025
bae29f2
Merge remote-tracking branch 'refs/remotes/origin/master' into pubsub…
Syrent Jul 14, 2025
3f7e051
feat: refactor all messages
Syrent Jul 14, 2025
bfded21
chore: change kotlin version
Syrent Jul 15, 2025
988cf11
Merge branch 'master' into pubsub-generic
Syrent Jul 18, 2025
b9ac4a9
chore: upstream
Syrent Jul 20, 2025
8c4e437
chore: upstream
Syrent Jul 28, 2025
b6c2a62
chore: continue working on websocket
Syrent Sep 26, 2025
52d440a
Merge branch 'master' into pubsub-generic
Syrent Sep 29, 2025
44e5e8e
remove sayanventure and switchback to adventure
Syrent Oct 3, 2025
ab36593
Merge branch 'master' into pubsub-generic
Syrent Jan 3, 2026
f8e7c57
chore: some small changes
Syrent Feb 1, 2026
8f947af
chore: fixing indexing problem (wip)
Syrent Feb 22, 2026
2aee0fe
feat: add submodule support
Syrent Feb 22, 2026
5492735
feat: add packaging mode
Syrent Feb 22, 2026
33166a6
chore(loader): remove debug messages
Syrent Feb 22, 2026
5a79387
chore: drop support for sub 1.17 versions
Syrent Feb 22, 2026
33feac3
chore: don't download stickynote transitive dependencies
Syrent Feb 22, 2026
e01e5b9
Merge remote-tracking branch 'origin/pubsub-generic' into pubsub-generic
Syrent Feb 22, 2026
7327741
chore: exclude stickynote module transitive dependencies from fat jar
Syrent Feb 22, 2026
a83a9ff
chore: implement bundle implementation dependencies
Syrent Feb 22, 2026
9d5a123
chore: remove adventure platform bukkit
Syrent Feb 22, 2026
908706b
chore: bring back adventure platform bukkit for nms usage
Syrent Feb 22, 2026
ca18f85
chore: remove non-paper bukkit support
Syrent Feb 22, 2026
3a2d9a9
feat: add shutdown capability to publishers
Syrent Feb 24, 2026
1608cb8
Merge remote-tracking branch 'origin/pubsub-generic' into pubsub-generic
Syrent Feb 24, 2026
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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,5 @@ bin/

.idea

/stickynote-test/**
/stickynote-test/**
bin-sticky/
32 changes: 12 additions & 20 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,45 +1,36 @@
plugins {
kotlin("jvm") version "2.3.0"
kotlin("jvm") version "2.2.21"
kotlin("plugin.serialization") version "2.2.21"
`version-catalog`
`maven-publish`
id("com.gradleup.shadow") version "9.3.0"
id("com.gradleup.shadow") version "9.3.1" apply false
}

allprojects {
group = "org.sayandev"
version = "1.10.6.2"
version = "2.0.0-alpha.36"
description = "A modular Kotlin framework for Minecraft: JE"

plugins.apply("maven-publish")
plugins.apply("version-catalog")
plugins.apply("org.jetbrains.kotlin.jvm")
plugins.apply("java-library")
plugins.apply("kotlin")
plugins.apply("com.gradleup.shadow")
plugins.apply("org.jetbrains.kotlin.plugin.serialization")

dependencies {
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.3.0")
}

tasks {
java {
disableAutoTargetJvm()
}

shadowJar {
archiveClassifier.set(null as String?)
}
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.2.21")
}

repositories {
mavenLocal()
mavenCentral()

maven {
name = "sayandev"
name = "sayandev-snapshots"
url = uri("https://repo.sayandev.org/snapshots")
}
maven {
name = "sayandev"
name = "sayandev-releases"
url = uri("https://repo.sayandev.org/releases")
}
maven {
Expand Down Expand Up @@ -141,7 +132,8 @@ subprojects {
if (!project.name.contains("loader") && !project.name.contains("catalog")) {
create<MavenPublication>("maven") {
groupId = rootProject.group as String
from(components["shadow"])
from(components["java"])
// from(components["shadow"])
setPom(this)
}
}
Expand Down Expand Up @@ -198,4 +190,4 @@ fun setPom(publication: MavenPublication) {
url.set("https://github.com/sayan-development/stickynote/tree/master")
}
}
}
}
34 changes: 20 additions & 14 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

[versions]
# core
kotlin = "2.3.0"
kotlin = "2.2.21"
kotlin-poet = "1.17.0"
snakeyaml = "2.2"
#configurate = "4.3.0"
Expand All @@ -17,17 +17,19 @@ sqlite-jdbc = "3.46.0.0"
h2 = "2.2.224"
mariadb = "3.3.3"
jedis = "5.0.0"
java-websocket = "1.6.0"
reflections = "0.10.2"
hikari = "5.1.0"
guava = "31.1-jre"
gson = "2.11.0"
kotlin-reflect = "2.3.0"
kotlin-reflect = "2.2.21"
netty = "4.1.111.Final"
exposed = "0.61.0"
libby = "2.0.0-SNAPSHOT"
mccoroutines = "2.20.0"
kotlinx-coroutines = "1.10.1"
caffeine = "3.2.0"
kaml = "0.85.0"

# minecraft
adventure-platform = "4.4.1"
Expand Down Expand Up @@ -65,12 +67,12 @@ cloud-kotlin-extensions = { group = "org.incendo", name = "cloud-kotlin-extensio
adventure-api = { group = "net.kyori", name = "adventure-api", version.ref = "adventure" }
adventure-text-minimessage = { group = "net.kyori", name = "adventure-text-minimessage", version.ref = "adventure" }
adventure-text-serializer-gson = { group = "net.kyori", name = "adventure-text-serializer-gson", version.ref = "adventure" }
sayanventure-api = { group = "org.sayandev.sayanventure", name = "sayanventure", version.ref = "sayanventure" }
mysql-connector = { group = "com.mysql", name = "mysql-connector-j", version.ref = "mysql-connector" }
sqlite-jdbc = { group = "org.xerial", name = "sqlite-jdbc", version.ref = "sqlite-jdbc" }
h2 = { group = "com.h2database", name = "h2", version.ref = "h2" }
mariadb = { group = "org.mariadb.jdbc", name = "mariadb-java-client", version.ref = "mariadb" }
jedis = { group = "redis.clients", name = "jedis", version.ref = "jedis" }
java-websocket = { group = "org.java-websocket", name = "Java-WebSocket", version.ref = "java-websocket" }
reflections = { group = "org.reflections", name = "reflections", version.ref = "reflections" }
hikari = { group = "com.zaxxer", name = "HikariCP", version.ref = "hikari" }
guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
Expand All @@ -83,6 +85,7 @@ exposed-kotlin-datetime = { group = "org.jetbrains.exposed", name = "exposed-kot
libby = { group = "com.alessiodp.libby", name = "libby-core", version.ref = "libby" }
kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core-jvm", version.ref = "kotlinx-coroutines" }
caffeine = { group = "com.github.ben-manes.caffeine", name = "caffeine", version.ref = "caffeine" }
kaml = { group = "com.charleskorn.kaml", name = "kaml", version.ref = "kaml" }

# bukkit
paper = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
Expand All @@ -93,7 +96,6 @@ cloud-minecraft-extras = { group = "org.incendo", name = "cloud-minecraft-extras
inventoryframework = { group = "com.github.stefvanschie.inventoryframework", name = "IF", version.ref = "inventoryframework" }
xseries = { group = "com.github.cryptomorin", name = "XSeries", version.ref = "xseries" }
adventure-platform-bukkit = { group = "net.kyori", name = "adventure-platform-bukkit", version.ref = "adventure-platform" }
sayanventure-platform-bukkit = { group = "org.sayandev.sayanventure", name = "sayanventure-bukkit", version.ref = "sayanventure" }
libby-bukkit = { group = "com.alessiodp.libby", name = "libby-bukkit", version.ref = "libby" }
libby-paper = { group = "com.alessiodp.libby", name = "libby-paper", version.ref = "libby" }
pathetic-pathfinder-bukkit = { group = "com.github.patheloper.pathetic", name = "pathetic-mapping", version.ref = "pathetic-pathfinder-bukkit" }
Expand All @@ -117,7 +119,7 @@ cloud-velocity = { group = "org.incendo", name = "cloud-velocity", version.ref =

# proxy - bungeecord
bungeecord = { group = "net.md-5", name = "bungeecord-api", version.ref = "bungeecord" }
sayanventure-platform-bungeecord = { group = "org.sayandev.sayanventure", name = "sayanventure-bungeecord", version.ref = "sayanventure" }
adventure-platform-bungeecord = { group = "net.kyori", name = "adventure-platform-bungeecord", version.ref = "adventure-platform" }
libby-bungee = { group = "com.alessiodp.libby", name = "libby-bungee", version.ref = "libby" }
mccoroutines-bungeecord-api = { group = "com.github.shynixn.mccoroutine", name = "mccoroutine-bungeecord-api", version.ref = "mccoroutines" }
mccoroutines-bungeecord-core = { group = "com.github.shynixn.mccoroutine", name = "mccoroutine-bungeecord-core", version.ref = "mccoroutines" }
Expand Down Expand Up @@ -149,40 +151,44 @@ implementation-core = [
"checker-qual",
"javassist",
"annotations",
# "adventure-api",
# "adventure-text-minimessage",
# "adventure-text-serializer-gson",
# "slf4j-api",
"error_prone_annotations",
"geantyref",
# transitives - end
"kotlin",
"snakeyaml",
"configurate-yaml",
# "kotlin",
"kaml",
# "snakeyaml",
# "configurate-yaml",
"configurate-extra-kotlin",
"cloud-core",
"cloud-kotlin-extensions",
# "cloud-kotlin-coroutines",
"sayanventure-api",
"reflections",
"kotlin-reflect",
"hikari",
"gson",
# "gson",
"exposed-core",
"exposed-jdbc",
"exposed-dao",
"exposed-kotlin-datetime",
"kotlinx-coroutines",
"mysql-connector",
"sqlite-jdbc",
# "mysql-connector",
# "sqlite-jdbc",
# "h2",
"mariadb",
"jedis",
"java-websocket",
# "caffeine"
]
implementation-bukkit = [
"cloud-paper",
"cloud-minecraft-extras",
"inventoryframework",
"xseries",
"sayanventure-platform-bukkit",
"adventure-platform-bukkit",
"pathetic-pathfinder-bukkit",
"mccoroutines-bukkit-api",
"mccoroutines-bukkit-core",
Expand All @@ -201,7 +207,7 @@ implementation-proxy-velocity = [
"cloud-velocity"
]
implementation-proxy-bungeecord = [
"sayanventure-platform-bungeecord",
"adventure-platform-bungeecord",
"mccoroutines-bungeecord-api",
"mccoroutines-bungeecord-core",
]
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 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,15 @@ include("stickynote-catalog")
include("stickynote-bukkit")
include("stickynote-bukkit:stickynote-bukkit-nms")

include("stickynote-paper")

include("stickynote-proxy")
include("stickynote-proxy:stickynote-proxy-velocity")
include("stickynote-proxy:stickynote-proxy-bungeecord")

include("stickynote-loader")
include("stickynote-loader:stickynote-loader-common")
include("stickynote-loader:stickynote-loader-bukkit")
include("stickynote-loader:stickynote-loader-paper")
include("stickynote-loader:stickynote-loader-bungeecord")
include("stickynote-loader:stickynote-loader-velocity")
3 changes: 1 addition & 2 deletions stickynote-bukkit/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
dependencies {
api(libs.libby.bukkit)
api(libs.libby.paper)
api(libs.sayanventure.platform.bukkit)
api(libs.cloud.paper)
api(libs.cloud.minecraft.extras)
api(libs.inventoryframework)
Expand All @@ -11,6 +9,7 @@ dependencies {
api(libs.mccoroutines.bukkit.core)
api(libs.mccoroutines.folia.api)
api(libs.mccoroutines.folia.core)
api(libs.adventure.platform.bukkit)

compileOnlyApi(libs.authlib)
compileOnlyApi(libs.placeholderapi)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.sayandev.stickynote.bukkit.extension

import org.sayandev.sayanventure.adventure.platform.bukkit.MinecraftComponentSerializer
import org.sayandev.sayanventure.adventure.text.Component
import net.kyori.adventure.platform.bukkit.MinecraftComponentSerializer
import net.kyori.adventure.text.Component

fun Component.toNmsComponent(): Any {
return MinecraftComponentSerializer.get().serialize(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,26 @@ package org.sayandev.stickynote.bukkit.extension

import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.sayandev.sayanventure.adventure.text.Component
import org.sayandev.sayanventure.adventure.text.minimessage.tag.resolver.TagResolver
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver
import org.sayandev.stickynote.bukkit.utils.AdventureUtils

fun CommandSender.sendComponent(message: String, vararg placeholder: TagResolver) {
AdventureUtils.sendComponent(this, message, *placeholder)
}

fun CommandSender.sendComponent(message: Component, vararg placeholder: TagResolver) {
AdventureUtils.sendComponent(this, message, *placeholder)
}

fun Player.sendComponentActionbar(content: String, vararg placeholder: TagResolver) {
AdventureUtils.sendComponentActionbar(this, content, *placeholder)
}

fun Player.sendComponentActionbar(content: Component, vararg placeholder: TagResolver) {
AdventureUtils.sendComponentActionbar(this, content, *placeholder)
}

fun CommandSender.openBook(title: Component, author: Component, vararg pages: Component) {
AdventureUtils.openBook(this, title, author, *pages)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,57 @@ package org.sayandev.stickynote.bukkit.messaging.publisher

import kotlinx.coroutines.CompletableDeferred
import org.bukkit.entity.Player
import org.sayandev.stickynote.bukkit.StickyNote
import org.sayandev.stickynote.bukkit.messaging.subscriber.PluginMessageSubscribeListener
import org.sayandev.stickynote.bukkit.onlinePlayers
import org.sayandev.stickynote.bukkit.plugin
import org.sayandev.stickynote.core.messaging.publisher.PayloadWrapper
import org.sayandev.stickynote.core.messaging.publisher.PayloadWrapper.Companion.asJson
import org.sayandev.stickynote.core.messaging.publisher.Publisher

abstract class PluginMessagePublisher<P, S>(
namespace: String,
name: String,
val payloadClass: Class<P>,
val resultClass: Class<S>,
import org.sayandev.stickynote.bukkit.warn
import org.sayandev.stickynote.core.messaging.MessageMeta
import org.sayandev.stickynote.core.messaging.PayloadWrapper
import org.sayandev.stickynote.core.messaging.PayloadWrapper.Companion.asJson
import org.sayandev.stickynote.core.messaging.Publisher
import org.sayandev.stickynote.core.messaging.SimpleConnectionMeta

abstract class PluginMessagePublisher<P : Any, R : Any>(
messageMeta: MessageMeta<P, R>,
connectionMeta: SimpleConnectionMeta,
val withSubscriber: Boolean
): Publisher<P, S>(
StickyNote.logger,
namespace,
name
): Publisher<SimpleConnectionMeta, P, R>(
messageMeta,
connectionMeta,
plugin.logger
) {

var subscriberListener: PluginMessageSubscribeListener<P, S>? = null
var subscriberListener: PluginMessageSubscribeListener<P, R>? = null

init {
register(this)
override fun register() {
super.register()
registerChannel()
}

override fun unregister() {
super.unregister()
unregisterChannel()
}

private fun registerChannel() {
plugin.server.messenger.registerOutgoingPluginChannel(plugin, this.id())
plugin.server.messenger.registerOutgoingPluginChannel(plugin, messageMeta.id())
if (withSubscriber) {
subscriberListener = PluginMessageSubscribeListener(namespace, name, payloadClass, resultClass, this)
subscriberListener = PluginMessageSubscribeListener(messageMeta, this)
}
}

private fun unregisterChannel() {
plugin.server.messenger.unregisterOutgoingPluginChannel(plugin, this.id())
plugin.server.messenger.unregisterOutgoingPluginChannel(plugin, messageMeta.id())
if (withSubscriber) {
plugin.server.messenger.unregisterIncomingPluginChannel(plugin, this.id())
plugin.server.messenger.unregisterIncomingPluginChannel(plugin, messageMeta.id())
}
}

suspend fun publish(player: Player, payloadWrapper: PayloadWrapper<P>): CompletableDeferred<S> {
player.sendPluginMessage(plugin, this.id(), payloadWrapper.asJson().toByteArray())
suspend fun publish(player: Player, payloadWrapper: PayloadWrapper<P>): CompletableDeferred<R> {
player.sendPluginMessage(plugin, messageMeta.id(), payloadWrapper.asJson().toByteArray())
return publish(payloadWrapper)
}

abstract fun handle(payload: P): S?
abstract override fun handle(payload: P): R?

}
}
Loading