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
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,11 @@ tasks.test {
}

tasks.shadowJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
mergeServiceFiles()
filesNotMatching(listOf("META-INF/services/**", "META-INF/*.kotlin_module")) {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
archiveFileName.set("${project.name}.jar")
}

Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ minestom = "26_3-SNAPSHOT"
placeholderapi = "2.12.3"
miniplaceholders = "3.2.0"
luckperms = "5.5"
reflection-remapper = "0.1.3"

adventure = "5.2.0"
adventure-platform-bungeecord = "4.4.1"
Expand Down Expand Up @@ -54,6 +55,7 @@ minestom = { module = "net.minestom:minestom", version.ref = "minestom" }
placeholderapi = { module = "me.clip:placeholderapi", version.ref = "placeholderapi" }
miniplaceholders-api = { module = "io.github.miniplaceholders:miniplaceholders-api", version.ref = "miniplaceholders" }
luckperms-api = { module = "net.luckperms:api", version.ref = "luckperms" }
reflection-remapper = { module = "xyz.jpenilla:reflection-remapper", version.ref = "reflection-remapper" }

adventure = { module = "net.kyori:adventure-api", version.ref = "adventure" }
adventure-text-minimessage = { module = "net.kyori:adventure-text-minimessage", version.ref = "adventure" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,6 @@ dependencies {
compileOnly(libs.slf4j.api)
}

tasks.shadowJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

modrinth {
token.set(project.findProperty("modrinthToken") as String? ?: System.getenv("MODRINTH_TOKEN"))
projectId.set("WzfN2mLK")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,3 @@ dependencies {
compileOnly(libs.simplecloud.api)
compileOnly(libs.slf4j.api)
}

tasks.shadowJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ dependencies {
kapt(libs.velocity.api)
}

tasks.shadowJar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}

modrinth {
token.set(project.findProperty("modrinthToken") as String? ?: System.getenv("MODRINTH_TOKEN"))
projectId.set("WzfN2mLK")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ interface PrefixesApi {

fun reset(targets: Audience, viewers: Audience)

fun setVanished(id: UUID, vanished: Boolean)

fun isVanished(id: UUID): Boolean

fun addGroup(group: PrefixesGroup): CompletableFuture<Boolean>

fun registerGroupProvider(provider: GroupProvider)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ class MinestomDisplayManager(
}

private fun publish(player: Player, force: Boolean = false) {
if (prefixes.api.isVanished(player.uuid)) return unpublish(player.uuid)
if (!prefixes.config.get().isTablistSynced()) return
val publisher = prefixes.sync?.publisher ?: return
val data = registry.getData(player.uuid) ?: return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,6 @@ class MinestomPlatformImpl(
override fun getPlayerName(id: UUID): String = MinecraftServer.getConnectionManager().getOnlinePlayerByUuid(id)?.username ?: id.toString()

override fun isOnline(id: UUID): Boolean = MinecraftServer.getConnectionManager().getOnlinePlayerByUuid(id) != null

override fun isVanished(id: UUID): Boolean = false
}
1 change: 1 addition & 0 deletions server/prefixes/prefixes-paper/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dependencies {
implementation(projects.server.prefixes.prefixesShared)
implementation(projects.core.corePaper)
implementation(libs.cloud.paper)
implementation(libs.reflection.remapper)
compileOnly(libs.paper.api)
compileOnly(libs.luckperms.api)
paperweight.paperDevBundle(libs.versions.paper)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class PrefixesPaper : JavaPlugin() {
Bukkit.getPluginManager().registerEvents(PlayerListener(prefixes, manager, tablist), this)

registerSync(prefixes, manager, tablist)
Bukkit.getAsyncScheduler().runAtFixedRate(this, { manager.refreshVanished() }, 1L, 1L, TimeUnit.SECONDS)

prefixes.addListener(PaperPrefixesListener(this, prefixes, manager, tablist))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class PaperDisplayManager(

private val teams = ConcurrentHashMap<ViewerKey, PaperPlayerTeam>()
private val entries = ConcurrentHashMap<UUID, TablistEntry>()
private val vanished = ConcurrentHashMap.newKeySet<UUID>()

fun updatePlayer(player: Player) {
PrefixesConstants.SCOPE.launch(PrefixesCoroutineDetails("${player.name} (${player.uniqueId})", "update player")) {
Expand All @@ -51,6 +52,7 @@ class PaperDisplayManager(
fun removePlayer(player: Player) {
val id = player.uniqueId
registry.remove(id)
vanished.remove(id)
teams.keys.filter { key -> key.target == id || key.viewer == id }.forEach { key ->
if (key.viewer == id) teams.remove(key) else removeTeam(key)
}
Expand Down Expand Up @@ -93,11 +95,30 @@ class PaperDisplayManager(
}
}

fun refreshVanished() {
Bukkit.getOnlinePlayers().forEach { player ->
player.scheduler.run(plugin, { refreshVanished(player) }, null)
}
}

fun unpublishAll() {
entries.keys.forEach(::unpublish)
}

private fun refreshVanished(player: Player) {
val id = player.uniqueId
val isVanished = prefixes.api.isVanished(id)
val changed = if (isVanished) vanished.add(id) else vanished.remove(id)

when {
changed -> show(player)
isVanished == entries.containsKey(id) -> publish(player)
}
}

private fun showTo(player: Player, viewer: Player, team: PaperPlayerTeam?) {
if (!viewer.canSee(player)) return updateTeam(player, viewer, null)

val viewerData = registry.getViewerData(player.uniqueId, viewer.uniqueId)
if (viewerData == null) {
updateTeam(player, viewer, team)
Expand All @@ -111,6 +132,7 @@ class PaperDisplayManager(
}

private fun publish(player: Player, force: Boolean = false) {
if (prefixes.api.isVanished(player.uniqueId)) return unpublish(player.uniqueId)
if (!prefixes.config.get().isTablistSynced()) return
val publisher = prefixes.sync?.publisher ?: return
val data = registry.getData(player.uniqueId) ?: return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,6 @@ class PaperPlatformImpl(private val plugin: Plugin) : PrefixesPlatform {
override fun getPlayerName(id: UUID): String = Bukkit.getOfflinePlayer(id).name ?: id.toString()

override fun isOnline(id: UUID): Boolean = Bukkit.getPlayer(id) != null

override fun isVanished(id: UUID): Boolean = Bukkit.getPlayer(id)?.getMetadata("vanished")?.any { it.asBoolean() } ?: false
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,14 @@ class PrefixesApiImpl(
}
}

override fun setVanished(id: UUID, vanished: Boolean) {
if (!platform.isOnline(id)) return
dataRegistry.setVanished(id, vanished)
notifyDataChange(id)
}

override fun isVanished(id: UUID): Boolean = dataRegistry.isVanished(id) || platform.isVanished(id)

override fun addGroup(group: PrefixesGroup): CompletableFuture<Boolean> = registry.getCurrentGroupProvider().addGroup(group)

override fun registerGroupProvider(provider: GroupProvider) = registry.register(provider)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class PrefixesDataRegistry(private val platform: PrefixesPlatform) {
private val groups = ConcurrentHashMap<UUID, PrefixesOverride>()
private val overrides = ConcurrentHashMap<UUID, PrefixesOverride>()
private val viewerOverrides = ConcurrentHashMap<ViewerKey, PrefixesOverride>()
private val vanished = ConcurrentHashMap.newKeySet<UUID>()

fun getData(id: UUID): PrefixesPlayerData? {
val group = groups[id] ?: return null
Expand Down Expand Up @@ -60,9 +61,16 @@ class PrefixesDataRegistry(private val platform: PrefixesPlatform) {
viewerOverrides.remove(ViewerKey(id, viewer))
}

fun setVanished(id: UUID, vanished: Boolean) {
if (vanished) this.vanished.add(id) else this.vanished.remove(id)
}

fun isVanished(id: UUID): Boolean = id in vanished

fun remove(id: UUID) {
groups.remove(id)
overrides.remove(id)
vanished.remove(id)
viewerOverrides.keys.removeIf { key -> key.target == id || key.viewer == id }
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import java.util.UUID
import java.util.concurrent.CompletableFuture

class ConfigPrefixesGroup(
private val group: ConfigGroup,
group: ConfigGroup,
private val permissionChecker: PermissionChecker<UUID>,
) : PrefixesGroup {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ class LuckPermsGroup(
override val name: String = group.name
override val priority: Int = group.weight.orElse(0)
override val permission: String = "group.${group.name}"
override val prefix: Component = miniMessage.deserialize(group.cachedData.metaData.prefix ?: "")
override val suffix: Component = miniMessage.deserialize(group.cachedData.metaData.suffix ?: "")
override val prefix: Component = miniMessage.deserialize(group.cachedData.metaData.prefix.orEmpty())
override val suffix: Component = miniMessage.deserialize(group.cachedData.metaData.suffix.orEmpty())
override val color: TextColor = parseColor()
override val displayName: String = getMetaValue("display-name") ?: ""
override val chatFormat: String = getMetaValue("chat-format") ?: ""
override val displayName: String = getMetaValue("display-name").orEmpty()
override val chatFormat: String = getMetaValue("chat-format").orEmpty()

override fun containsPlayer(id: UUID): CompletableFuture<Boolean> {
val user = luckPerms.userManager.getUser(id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ interface PrefixesPlatform {
fun getPlayerName(id: UUID): String

fun isOnline(id: UUID): Boolean

fun isVanished(id: UUID): Boolean
}
Loading