Skip to content
Open
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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
kotlin.code.style=official
kotlin.stdlib.default.dependency=false
org.gradle.parallel=true
version=4.3.0
version=4.3.1
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion gradlew

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

31 changes: 10 additions & 21 deletions gradlew.bat

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

Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,4 @@ import org.spongepowered.configurate.objectmapping.meta.Comment
data class ConnectionMessageConfig(
@field:Comment("Whether join and quit messages are shown in chat at all.")
val enabled: Boolean = true,

@field:Comment(
"Automatically suppresses join and quit messages for regular players\n" +
"when too many connection events occur within one minute.\n" +
"Players with the permission 'surf.chat.connection.always-show'\n" +
"are exempt and their messages are always displayed."
)
val autoDisableOnHighConnectionEventThreshold: Boolean = true,

@field:Comment(
"Maximum number of combined join and quit events per minute before\n" +
"connection messages are suppressed automatically.\n" +
"Only relevant when 'autoDisableOnHighConnectionEventThreshold' is true."
)
val connectionEventsPerMinuteThreshold: Int = 15,
)
Comment thread
TheBjoRedCraft marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@ object SettingsHook {

fun hasChatPingsEnabled(playerUuid: UUID): Boolean =
SurfSettingsApi.getSettingValue(playerUuid, SettingKeys.CHAT_PINGS)

fun hasConnectionMessagesEnabled(playerUuid: UUID): Boolean =
SurfSettingsApi.getSettingValue(playerUuid, SettingKeys.CONNECTION_MESSAGES)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@ package dev.slne.surf.chat.paper.listener
import dev.slne.surf.api.core.messages.adventure.buildText
import dev.slne.surf.api.core.messages.adventure.sendText
import dev.slne.surf.api.core.minimessage.miniMessage
import dev.slne.surf.api.paper.util.forEachPlayer
import dev.slne.surf.chat.core.common.service.IgnoreService
import dev.slne.surf.chat.paper.hook.LuckPermsHook
import dev.slne.surf.chat.paper.hook.MiniPlaceholdersHook
import dev.slne.surf.chat.paper.hook.SettingsHook
import dev.slne.surf.chat.paper.message.MessageFormatter
import dev.slne.surf.chat.paper.permission.PermissionRegistry
import dev.slne.surf.chat.paper.plugin
import dev.slne.surf.chat.paper.service.ConnectionMessageService
import io.papermc.paper.event.connection.configuration.AsyncPlayerConnectionConfigureEvent
import kotlinx.coroutines.runBlocking
import net.kyori.adventure.text.Component
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent

Expand All @@ -28,17 +30,35 @@ object ConnectListener : Listener {
}
}

@EventHandler
@EventHandler(priority = EventPriority.MONITOR)
fun onPlayerJoin(event: PlayerJoinEvent) {
ConnectionMessageService.recordEvent()
if (event.joinMessage() == null) {
return
}

if (!plugin.connectionMessageConfig.enabled) {
return
}
Comment thread
TheBjoRedCraft marked this conversation as resolved.

val alwaysShow = event.player.hasPermission(PermissionRegistry.CONNECTION_MESSAGE_ALWAYS_SHOW)
val shouldShowMessage = alwaysShow || ConnectionMessageService.shouldShowConnectionMessage()
val message = buildJoinMessage(event)

if (shouldShowMessage) {
event.joinMessage(buildJoinMessage(event))
event.joinMessage(null)

if (alwaysShow) {
forEachPlayer {
it.sendText {
append(message)
}
}
Comment thread
TheBjoRedCraft marked this conversation as resolved.
} else {
event.joinMessage(null)
forEachPlayer {
if (plugin.checkSettingsHook() && SettingsHook.hasConnectionMessagesEnabled(event.player.uniqueId)) {
it.sendText {
append(message)
}
}
}
}

if (plugin.chatMotdConfig.enabled) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,55 @@ package dev.slne.surf.chat.paper.listener
import com.destroystokyo.paper.event.player.PlayerConnectionCloseEvent
import com.github.shynixn.mccoroutine.folia.launch
import dev.slne.surf.api.core.messages.adventure.buildText
import dev.slne.surf.api.core.messages.adventure.sendText
import dev.slne.surf.api.core.minimessage.miniMessage
import dev.slne.surf.api.paper.util.forEachPlayer
import dev.slne.surf.chat.core.common.service.IgnoreService
import dev.slne.surf.chat.core.common.service.SpyService
import dev.slne.surf.chat.paper.hook.LuckPermsHook
import dev.slne.surf.chat.paper.hook.SettingsHook
import dev.slne.surf.chat.paper.message.MessageFormatter
import dev.slne.surf.chat.paper.permission.PermissionRegistry
import dev.slne.surf.chat.paper.plugin
import dev.slne.surf.chat.paper.service.ConnectionMessageService
import net.kyori.adventure.text.Component
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerQuitEvent

object DisconnectListener : Listener {
@EventHandler
@EventHandler(priority = EventPriority.MONITOR)
fun onDisconnect(event: PlayerQuitEvent) {
MessageFormatter.dirty = true

if (event.quitMessage() == null) {
return
}
Comment thread
TheBjoRedCraft marked this conversation as resolved.

ConnectionMessageService.recordEvent()
if (!plugin.connectionMessageConfig.enabled) {
return
}

val alwaysShow = event.player.hasPermission(PermissionRegistry.CONNECTION_MESSAGE_ALWAYS_SHOW)
val shouldShowMessage = alwaysShow || ConnectionMessageService.shouldShowConnectionMessage()

if (shouldShowMessage) {
event.quitMessage(buildQuitMessage(event))
event.quitMessage(null)

val message = buildQuitMessage(event)

if (alwaysShow) {
forEachPlayer {
it.sendText {
append(message)
}
}
} else {
event.quitMessage(null)
forEachPlayer {
if (plugin.checkSettingsHook() && SettingsHook.hasConnectionMessagesEnabled(event.player.uniqueId)) {
it.sendText {
append(message)
}
}
}
}
}

Expand Down

This file was deleted.