diff --git a/gradle.properties b/gradle.properties index 1e4239d9..34804f85 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled javaVersion=25 mcVersion=26.1.1 group=dev.slne.surf.api -version=3.6.0 +version=3.7.0 relocationPrefix=dev.slne.surf.api.libs snapshot=false diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt index 70bb11cb..fbb6a737 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/bridges/V1_21_11SurfPaperNmsPlayerBridgeImpl.kt @@ -4,8 +4,14 @@ import dev.slne.surf.api.paper.nms.NmsUseWithCaution import dev.slne.surf.api.paper.nms.bridges.SurfPaperNmsPlayerBridge import dev.slne.surf.api.paper.nms.bridges.data.chat.RemoteChatSessionData import dev.slne.surf.api.paper.server.nms.v1_21_11.extensions.toNms +import io.papermc.paper.adventure.PaperAdventure import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import net.kyori.adventure.chat.ChatType +import net.kyori.adventure.chat.SignedMessage +import net.kyori.adventure.text.Component +import net.minecraft.network.chat.OutgoingChatMessage +import net.minecraft.network.chat.PlayerChatMessage import net.minecraft.server.network.ServerGamePacketListenerImpl import net.minecraft.util.FutureChain import org.bukkit.entity.Player @@ -49,6 +55,30 @@ class V1_21_11SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { } } + override fun sendSignedMessageWithChangedContent( + player: Player, + original: SignedMessage, + boundChatType: ChatType.Bound, + unsignedContent: Component + ) { + if (original !is PlayerChatMessage.AdventureView) { + if (original.isSystem) { + player.sendMessage(unsignedContent, boundChatType) + } else { + player.sendMessage(unsignedContent, boundChatType) + } + return + } + val nmsPlayer = player.toNms() + + nmsPlayer.sendChatMessage( + OutgoingChatMessage.create(original.playerChatMessage()), + nmsPlayer.isTextFilteringEnabled, + boundChatType.toNms(nmsPlayer), + PaperAdventure.asVanilla(unsignedContent) + ) + } + @Suppress("ObjectPrivatePropertyName") companion object { @JvmStatic diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/extensions/nms-extensions.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/extensions/nms-extensions.kt index b0a0e785..280c5fa8 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/extensions/nms-extensions.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v1-21-11/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v1_21_11/extensions/nms-extensions.kt @@ -10,11 +10,14 @@ import io.papermc.paper.adventure.PaperAdventure import io.papermc.paper.math.BlockPosition import io.papermc.paper.math.FinePosition import io.papermc.paper.math.Position +import net.kyori.adventure.chat.ChatType import net.minecraft.advancements.AdvancementType import net.minecraft.core.BlockPos import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.resources.Identifier +import net.minecraft.resources.ResourceKey import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.Display @@ -54,6 +57,7 @@ import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemType import org.spongepowered.math.imaginary.Quaternionf import org.spongepowered.math.vector.Vector3f +import java.util.* import net.kyori.adventure.text.Component as AdventureComponent import net.minecraft.world.item.ItemStack as NmsItemStack import net.minecraft.world.level.block.state.BlockState as NmsBlockState @@ -151,4 +155,14 @@ fun AdvancementDisplay.Frame.toNms() = when (this) { } fun NamespacedKey.toIdentifier() = Identifier.fromNamespaceAndPath(namespace, key) -fun GameMode.toNms() = GameType.byId(this.value) \ No newline at end of file +fun GameMode.toNms() = GameType.byId(this.value) + +fun ChatType.Bound.toNms(sender: ServerPlayer): net.minecraft.network.chat.ChatType.Bound { + val chatTypeLookup = sender.level().registryAccess().lookupOrThrow(Registries.CHAT_TYPE) + + return net.minecraft.network.chat.ChatType.Bound( + chatTypeLookup.getOrThrow(ResourceKey.create(Registries.CHAT_TYPE, PaperAdventure.asVanilla(type().key()))), + PaperAdventure.asVanilla(name()), + Optional.ofNullable(PaperAdventure.asVanilla(target())) + ) +} \ No newline at end of file diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt index 6a4ad785..40e810f6 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/bridges/V26_1SurfPaperNmsPlayerBridgeImpl.kt @@ -4,8 +4,14 @@ import dev.slne.surf.api.paper.nms.NmsUseWithCaution import dev.slne.surf.api.paper.nms.bridges.SurfPaperNmsPlayerBridge import dev.slne.surf.api.paper.nms.bridges.data.chat.RemoteChatSessionData import dev.slne.surf.api.paper.server.nms.v26_1.extensions.toNms +import io.papermc.paper.adventure.PaperAdventure import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import net.kyori.adventure.chat.ChatType +import net.kyori.adventure.chat.SignedMessage +import net.kyori.adventure.text.Component +import net.minecraft.network.chat.OutgoingChatMessage +import net.minecraft.network.chat.PlayerChatMessage import net.minecraft.server.network.ServerGamePacketListenerImpl import net.minecraft.util.FutureChain import org.bukkit.entity.Player @@ -49,6 +55,30 @@ class V26_1SurfPaperNmsPlayerBridgeImpl : SurfPaperNmsPlayerBridge { } } + override fun sendSignedMessageWithChangedContent( + player: Player, + original: SignedMessage, + boundChatType: ChatType.Bound, + unsignedContent: Component + ) { + if (original !is PlayerChatMessage.AdventureView) { + if (original.isSystem) { + player.sendMessage(unsignedContent, boundChatType) + } else { + player.sendMessage(unsignedContent, boundChatType) + } + return + } + val nmsPlayer = player.toNms() + + nmsPlayer.sendChatMessage( + OutgoingChatMessage.create(original.playerChatMessage()), + nmsPlayer.isTextFilteringEnabled, + boundChatType.toNms(nmsPlayer), + PaperAdventure.asVanilla(unsignedContent) + ) + } + @Suppress("ObjectPrivatePropertyName") companion object { @JvmStatic diff --git a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/extensions/nms-extensions.kt b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/extensions/nms-extensions.kt index cb83f642..0ab8cc09 100644 --- a/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/extensions/nms-extensions.kt +++ b/surf-api-paper/surf-api-paper-nms/surf-api-paper-nms-v26-1/src/main/kotlin/dev/slne/surf/api/paper/server/nms/v26_1/extensions/nms-extensions.kt @@ -10,11 +10,14 @@ import io.papermc.paper.adventure.PaperAdventure import io.papermc.paper.math.BlockPosition import io.papermc.paper.math.FinePosition import io.papermc.paper.math.Position +import net.kyori.adventure.chat.ChatType import net.minecraft.advancements.AdvancementType import net.minecraft.core.BlockPos import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component import net.minecraft.resources.Identifier +import net.minecraft.resources.ResourceKey import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.Display @@ -54,6 +57,7 @@ import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemType import org.spongepowered.math.imaginary.Quaternionf import org.spongepowered.math.vector.Vector3f +import java.util.* import net.kyori.adventure.text.Component as AdventureComponent import net.minecraft.world.item.ItemStack as NmsItemStack import net.minecraft.world.level.block.state.BlockState as NmsBlockState @@ -151,4 +155,14 @@ fun AdvancementDisplay.Frame.toNms() = when (this) { } fun NamespacedKey.toIdentifier() = Identifier.fromNamespaceAndPath(namespace, key) -fun GameMode.toNms() = GameType.byId(this.value) \ No newline at end of file +fun GameMode.toNms() = GameType.byId(this.value) + +fun ChatType.Bound.toNms(sender: ServerPlayer): net.minecraft.network.chat.ChatType.Bound { + val chatTypeLookup = sender.level().registryAccess().lookupOrThrow(Registries.CHAT_TYPE) + + return net.minecraft.network.chat.ChatType.Bound( + chatTypeLookup.getOrThrow(ResourceKey.create(Registries.CHAT_TYPE, PaperAdventure.asVanilla(type().key()))), + PaperAdventure.asVanilla(name()), + Optional.ofNullable(PaperAdventure.asVanilla(target())) + ) +} \ No newline at end of file diff --git a/surf-api-paper/surf-api-paper/api/surf-api-paper.api b/surf-api-paper/surf-api-paper/api/surf-api-paper.api index 72c44376..467771c1 100644 --- a/surf-api-paper/surf-api-paper/api/surf-api-paper.api +++ b/surf-api-paper/surf-api-paper/api/surf-api-paper.api @@ -1714,12 +1714,14 @@ public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNms public static final field Companion Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$Companion; public abstract fun getRemoteChatSessionData (Lorg/bukkit/entity/Player;)Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData; public abstract fun runOnChatMessageChain (Lorg/bukkit/entity/Player;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V + public abstract fun sendSignedMessageWithChangedContent (Lorg/bukkit/entity/Player;Lnet/kyori/adventure/chat/SignedMessage;Lnet/kyori/adventure/chat/ChatType$Bound;Lnet/kyori/adventure/text/Component;)V } public final class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge$Companion : dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge { public final fun getINSTANCE ()Ldev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge; public fun getRemoteChatSessionData (Lorg/bukkit/entity/Player;)Ldev/slne/surf/api/paper/nms/bridges/data/chat/RemoteChatSessionData; public fun runOnChatMessageChain (Lorg/bukkit/entity/Player;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V + public fun sendSignedMessageWithChangedContent (Lorg/bukkit/entity/Player;Lnet/kyori/adventure/chat/SignedMessage;Lnet/kyori/adventure/chat/ChatType$Bound;Lnet/kyori/adventure/text/Component;)V } public abstract interface class dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsStatsBridge { diff --git a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt index 5af25185..32e0399f 100644 --- a/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt +++ b/surf-api-paper/surf-api-paper/src/main/kotlin/dev/slne/surf/api/paper/nms/bridges/SurfPaperNmsPlayerBridge.kt @@ -4,6 +4,9 @@ import dev.slne.surf.api.core.util.requiredService import dev.slne.surf.api.paper.nms.NmsUseWithCaution import dev.slne.surf.api.paper.nms.bridges.data.chat.RemoteChatSessionData import kotlinx.coroutines.CoroutineScope +import net.kyori.adventure.chat.ChatType +import net.kyori.adventure.chat.SignedMessage +import net.kyori.adventure.text.Component import org.bukkit.entity.Player import org.jetbrains.annotations.ApiStatus @@ -15,6 +18,13 @@ interface SurfPaperNmsPlayerBridge { fun runOnChatMessageChain(player: Player, scope: CoroutineScope, block: suspend () -> Unit) + fun sendSignedMessageWithChangedContent( + player: Player, + original: SignedMessage, + boundChatType: ChatType.Bound, + unsignedContent: Component + ) + companion object : SurfPaperNmsPlayerBridge by playerBridge { val INSTANCE get() = playerBridge }