Skip to content

Commit 3f80330

Browse files
committed
refactor: remove deprecated packet events-based toast implementation
- Replaced `PacketEvents`-based toast implementation with a new `Bukkit`-native toast system. - Removed `ToastBuilder`, `ToastService`, and associated classes in core and velocity projects. - Introduced `SurfBukkitNmsPlayerToastPackets` with `Toast` DSL support for Bukkit API. - Updated test cases and commands to use the new toast implementation. - Cleaned up related dependencies from `core` and `velocity` modules. - Bumped version to 1.21.10-2.41.0.
1 parent 8a945e9 commit 3f80330

File tree

21 files changed

+252
-359
lines changed

21 files changed

+252
-359
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
77
javaVersion=21
88
mcVersion=1.21.10
99
group=dev.slne.surf
10-
version=1.21.10-2.40.4
10+
version=1.21.10-2.41.0
1111
relocationPrefix=dev.slne.surf.surfapi.libs
1212
snapshot=false

surf-api-bukkit/surf-api-bukkit-api/api/surf-api-bukkit-api.api

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5423,6 +5423,56 @@ public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/S
54235423
public static final fun getNmsPlayerPacketsBridge ()Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerPackets;
54245424
}
54255425

5426+
public abstract interface class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPackets {
5427+
public static final field Companion Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPackets$Companion;
5428+
public abstract fun showToast (Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;)Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/PacketOperation;
5429+
}
5430+
5431+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPackets$Companion {
5432+
public final fun getInstance ()Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPackets;
5433+
}
5434+
5435+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPacketsKt {
5436+
public static final fun getToastPacketsBridge ()Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/SurfBukkitNmsPlayerToastPackets;
5437+
}
5438+
5439+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast {
5440+
public static final field Companion Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast$Companion;
5441+
public fun <init> (Lorg/bukkit/inventory/ItemStack;Lnet/kyori/adventure/text/Component;Lio/papermc/paper/advancement/AdvancementDisplay$Frame;)V
5442+
public synthetic fun <init> (Lorg/bukkit/inventory/ItemStack;Lnet/kyori/adventure/text/Component;Lio/papermc/paper/advancement/AdvancementDisplay$Frame;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
5443+
public final fun component1 ()Lorg/bukkit/inventory/ItemStack;
5444+
public final fun component2 ()Lnet/kyori/adventure/text/Component;
5445+
public final fun component3 ()Lio/papermc/paper/advancement/AdvancementDisplay$Frame;
5446+
public final fun copy (Lorg/bukkit/inventory/ItemStack;Lnet/kyori/adventure/text/Component;Lio/papermc/paper/advancement/AdvancementDisplay$Frame;)Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;
5447+
public static synthetic fun copy$default (Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;Lorg/bukkit/inventory/ItemStack;Lnet/kyori/adventure/text/Component;Lio/papermc/paper/advancement/AdvancementDisplay$Frame;ILjava/lang/Object;)Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;
5448+
public final fun createOperation ()Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/PacketOperation;
5449+
public fun equals (Ljava/lang/Object;)Z
5450+
public final fun getFrame ()Lio/papermc/paper/advancement/AdvancementDisplay$Frame;
5451+
public final fun getIcon ()Lorg/bukkit/inventory/ItemStack;
5452+
public final fun getTitle ()Lnet/kyori/adventure/text/Component;
5453+
public fun hashCode ()I
5454+
public fun toString ()Ljava/lang/String;
5455+
}
5456+
5457+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast$Companion {
5458+
public final fun invoke (Lkotlin/jvm/functions/Function1;)Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;
5459+
}
5460+
5461+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast$Companion$Builder {
5462+
public fun <init> ()V
5463+
public final fun build ()Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;
5464+
public final fun frame (Lio/papermc/paper/advancement/AdvancementDisplay$Frame;)V
5465+
public final fun icon (Lorg/bukkit/inventory/ItemStack;)V
5466+
public final fun icon (Lorg/bukkit/inventory/ItemType;)V
5467+
public final fun icon (Lorg/bukkit/inventory/ItemType;Lkotlin/jvm/functions/Function1;)V
5468+
public final fun title (Lkotlin/jvm/functions/Function1;)V
5469+
public final fun title (Lnet/kyori/adventure/text/Component;)V
5470+
}
5471+
5472+
public final class dev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/ToastKt {
5473+
public static final fun toast (Lkotlin/jvm/functions/Function1;)Ldev/slne/surf/surfapi/bukkit/api/nms/bridges/packets/player/toast/Toast;
5474+
}
5475+
54265476
public abstract interface class dev/slne/surf/surfapi/bukkit/api/nms/listener/NmsClientboundPacketListener : dev/slne/surf/surfapi/bukkit/api/nms/listener/NmsPacketListener {
54275477
public abstract fun handleClientboundPacket (Ldev/slne/surf/surfapi/bukkit/api/nms/listener/packets/NmsPacket;Lorg/bukkit/entity/Player;)Ldev/slne/surf/surfapi/bukkit/api/packet/listener/listener/PacketListenerResult;
54285478
}

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/SurfBukkitApi.kt

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,8 @@ import dev.slne.surf.surfapi.bukkit.api.scoreboard.SurfScoreboardBuilder
55
import dev.slne.surf.surfapi.bukkit.api.time.SkipOperations.SkipOperation
66
import dev.slne.surf.surfapi.bukkit.api.time.TimeSkipResult
77
import dev.slne.surf.surfapi.core.api.SurfCoreApi
8-
import dev.slne.surf.surfapi.core.api.toast.Toast
9-
import dev.slne.surf.surfapi.core.api.toast.ToastBuilder
10-
import dev.slne.surf.surfapi.core.api.toast.ToastStyle
118
import net.kyori.adventure.text.Component
129
import net.megavex.scoreboardlibrary.api.ScoreboardLibrary
13-
import org.bukkit.Material
1410
import org.bukkit.World
1511
import org.bukkit.entity.Player
1612
import org.jetbrains.annotations.ApiStatus
@@ -108,42 +104,6 @@ interface SurfBukkitApi : SurfCoreApi {
108104
*/
109105
suspend fun skipTimeSmoothly(skipOperation: SkipOperation): Map<World, TimeSkipResult>
110106

111-
/**
112-
* Creates a Toast using the provided builder function.
113-
*
114-
* @param builder A lambda function that configures the ToastBuilder.
115-
* @return The created Toast instance.
116-
*
117-
* @see ToastBuilder
118-
*/
119-
fun createToast(builder: ToastBuilder.() -> Unit): Toast
120-
121-
/**
122-
* Creates a Toast with the specified icon, display text, and style.
123-
*
124-
* @param icon The icon material for the toast.
125-
* @param text The display text of the toast.
126-
* @param style The style of the toast.
127-
*
128-
* @return The created Toast instance.
129-
* @see Toast
130-
*/
131-
fun createToast(
132-
icon: Material,
133-
text: Component,
134-
style: ToastStyle
135-
): Toast
136-
137-
/**
138-
* Sends a toast to the specified player.
139-
*
140-
* @param player The player to whom the toast will be sent.
141-
* @param toast The toast to be sent.
142-
*
143-
* @see Toast
144-
*/
145-
fun sendToast(player: Player, toast: Toast)
146-
147107
companion object {
148108
@JvmStatic
149109
val instance get() = SurfCoreApi.instance as SurfBukkitApi
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player
2+
3+
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
4+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.PacketOperation
5+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.toast.Toast
6+
import dev.slne.surf.surfapi.core.api.util.requiredService
7+
8+
@NmsUseWithCaution
9+
interface SurfBukkitNmsPlayerToastPackets {
10+
11+
fun showToast(toast: Toast): PacketOperation
12+
13+
companion object {
14+
val instance = requiredService<SurfBukkitNmsPlayerToastPackets>()
15+
}
16+
}
17+
18+
@NmsUseWithCaution
19+
val toastPacketsBridge get() = SurfBukkitNmsPlayerToastPackets.instance
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.toast
2+
3+
import dev.slne.surf.surfapi.bukkit.api.builder.buildItem
4+
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
5+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.toastPacketsBridge
6+
import dev.slne.surf.surfapi.core.api.messages.builder.SurfComponentBuilder
7+
import io.papermc.paper.advancement.AdvancementDisplay
8+
import net.kyori.adventure.text.Component
9+
import org.bukkit.inventory.ItemStack
10+
import org.bukkit.inventory.ItemType
11+
12+
data class Toast(
13+
val icon: ItemStack,
14+
val title: Component,
15+
val frame: AdvancementDisplay.Frame = AdvancementDisplay.Frame.TASK,
16+
) {
17+
18+
@NmsUseWithCaution
19+
fun createOperation() = toastPacketsBridge.showToast(this)
20+
21+
companion object {
22+
inline operator fun invoke(block: Builder.() -> Unit): Toast {
23+
return Builder().apply(block).build()
24+
}
25+
26+
class Builder @PublishedApi internal constructor() {
27+
private var icon: ItemStack? = null
28+
private var title: Component? = null
29+
private var frame: AdvancementDisplay.Frame = AdvancementDisplay.Frame.TASK
30+
31+
fun icon(itemStack: ItemStack) {
32+
this.icon = itemStack
33+
}
34+
35+
fun icon(type: ItemType) {
36+
this.icon = type.createItemStack()
37+
}
38+
39+
fun icon(type: ItemType, block: ItemStack.() -> Unit) {
40+
this.icon = buildItem(type, init = block)
41+
}
42+
43+
fun title(component: Component) {
44+
this.title = component
45+
}
46+
47+
fun title(block: SurfComponentBuilder.() -> Unit) {
48+
this.title = SurfComponentBuilder(block)
49+
}
50+
51+
fun frame(frame: AdvancementDisplay.Frame) {
52+
this.frame = frame
53+
}
54+
55+
fun build() = Toast(
56+
icon = icon ?: error("Icon must be set!"),
57+
title = title ?: error("Title must be set!"),
58+
frame = frame
59+
)
60+
}
61+
}
62+
}
63+
64+
inline fun toast(block: Toast.Companion.Builder.() -> Unit): Toast {
65+
return Toast(block)
66+
}

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/util/bukkit-util.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import com.github.shynixn.mccoroutine.folia.SuspendingPlugin
66
import com.github.shynixn.mccoroutine.folia.entityDispatcher
77
import com.github.shynixn.mccoroutine.folia.regionDispatcher
88
import dev.slne.surf.surfapi.bukkit.api.SurfBukkitApi
9-
import dev.slne.surf.surfapi.bukkit.api.surfBukkitApi
10-
import dev.slne.surf.surfapi.core.api.toast.Toast
11-
import dev.slne.surf.surfapi.core.api.toast.ToastBuilder
129
import dev.slne.surf.surfapi.core.api.util.getCallerClass
1310
import dev.slne.surf.surfapi.core.api.util.mutableLong2ObjectMapOf
1411
import dev.slne.surf.surfapi.core.api.util.mutableObjectListOf
@@ -273,9 +270,3 @@ suspend fun World.getBlockAtAsync(pos: BlockPosition): Block {
273270
)
274271
}
275272
}
276-
277-
fun Player.sendToast(toast: Toast) = toast.send(this.uniqueId)
278-
fun Player.sendToast(block: ToastBuilder.() -> Unit) =
279-
surfBukkitApi.createToast(block).send(this.uniqueId)
280-
281-
fun Toast.send(player: Player) = send(player.uniqueId)

surf-api-bukkit/surf-api-bukkit-plugin-test/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,11 @@ tasks {
5757
url("https://ci.codemc.io/job/retrooper/job/packetevents/770/artifact/build/libs/packetevents-spigot-2.10.0-SNAPSHOT.jar")
5858
}
5959
}
60+
}
61+
62+
tasks {
63+
shadowJar {
64+
val relocationPrefix: String by project
65+
relocate("me.devnatan.inventoryframework", "$relocationPrefix.devnatan.inventoryframework")
66+
}
6067
}
Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,54 @@
11
package dev.slne.surf.surfapi.bukkit.test.command.subcommands
22

3-
import com.github.retrooper.packetevents.protocol.item.type.ItemTypes
43
import dev.jorel.commandapi.CommandAPICommand
54
import dev.jorel.commandapi.kotlindsl.playerExecutor
6-
import dev.slne.surf.surfapi.bukkit.api.surfBukkitApi
7-
import dev.slne.surf.surfapi.bukkit.api.util.send
8-
import dev.slne.surf.surfapi.bukkit.api.util.sendToast
9-
import dev.slne.surf.surfapi.core.api.messages.adventure.buildText
10-
import dev.slne.surf.surfapi.core.api.toast.ToastStyle
11-
import dev.slne.surf.surfapi.core.api.toast.toast
12-
import org.bukkit.Material
5+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.toast.toast
6+
import io.papermc.paper.advancement.AdvancementDisplay
7+
import io.papermc.paper.datacomponent.DataComponentTypes
8+
import io.papermc.paper.datacomponent.item.ResolvableProfile
9+
import net.kyori.adventure.text.Component
10+
import net.kyori.adventure.text.`object`.ObjectContents
11+
import org.bukkit.inventory.ItemType
1312

1413
class ToastTest(name: String) : CommandAPICommand(name) {
14+
val toast = toast {
15+
icon(ItemType.DIAMOND)
16+
17+
title {
18+
primary("Dsl-Extension Test")
19+
appendNewline()
20+
info("With multiple lines!")
21+
}
22+
23+
frame(AdvancementDisplay.Frame.TASK)
24+
}
25+
1526
init {
1627
playerExecutor { player, _ ->
17-
player.sendToast {
18-
icon(ItemTypes.DIAMOND)
19-
20-
text {
21-
info("Dsl-Extension Test")
28+
val playerHeadToast = toast {
29+
icon(ItemType.PLAYER_HEAD) {
30+
setData(DataComponentTypes.PROFILE, ResolvableProfile.resolvableProfile(player.playerProfile))
2231
}
2332

24-
style(ToastStyle.TASK)
33+
title {
34+
primary("Player Head Test")
35+
}
2536
}
2637

27-
player.sendToast(toast {
28-
icon(ItemTypes.GOLD_INGOT)
38+
val playerObjectToast = toast {
39+
icon(ItemType.BARRIER)
2940

30-
text {
31-
info("Toast-Builder-Dsl Test")
32-
appendNewline()
33-
info("With multiple lines!")
41+
title {
42+
append(Component.`object`(ObjectContents.playerHead(player.uniqueId)))
43+
appendSpace()
44+
append(Component.text("Player Head Test"))
3445
}
46+
}
3547

36-
style(ToastStyle.CHALLENGE)
37-
})
38-
39-
surfBukkitApi.createToast(Material.NETHERITE_AXE, buildText {
40-
info("Direct API Call Test")
41-
}, ToastStyle.GOAL).send(player)
48+
toast.createOperation()
49+
.add(playerHeadToast.createOperation())
50+
.add(playerObjectToast.createOperation())
51+
.execute(player)
4252
}
4353
}
4454
}

surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/impl/SurfBukkitApiImpl.kt

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,14 @@ import dev.slne.surf.surfapi.bukkit.server.impl.scoreboard.SurfScoreboardBuilder
1111
import dev.slne.surf.surfapi.bukkit.server.plugin
1212
import dev.slne.surf.surfapi.bukkit.server.time.TimeHandler
1313
import dev.slne.surf.surfapi.core.api.SurfCoreApi
14-
import dev.slne.surf.surfapi.core.api.toast.Toast
15-
import dev.slne.surf.surfapi.core.api.toast.ToastBuilder
16-
import dev.slne.surf.surfapi.core.api.toast.ToastStyle
1714
import dev.slne.surf.surfapi.core.api.util.checkInstantiationByServiceLoader
1815
import dev.slne.surf.surfapi.core.api.util.mutableObject2ObjectMapOf
1916
import dev.slne.surf.surfapi.core.server.impl.SurfCoreApiImpl
20-
import dev.slne.surf.surfapi.core.server.impl.toast.ToastImpl
21-
import io.github.retrooper.packetevents.util.SpigotConversionUtil
2217
import kotlinx.coroutines.async
2318
import kotlinx.coroutines.coroutineScope
2419
import net.kyori.adventure.text.Component
2520
import org.bukkit.Bukkit
26-
import org.bukkit.Material
2721
import org.bukkit.World
28-
import org.bukkit.entity.Player
2922
import java.util.*
3023

3124
@AutoService(SurfCoreApi::class)
@@ -110,18 +103,4 @@ class SurfBukkitApiImpl : SurfCoreApiImpl(), SurfBukkitApi {
110103
}
111104
}.mapValuesTo(mutableObject2ObjectMapOf(worlds.size)) { (_, def) -> def.await() }
112105
}
113-
114-
override fun createToast(builder: ToastBuilder.() -> Unit): Toast =
115-
ToastBuilder().apply(builder).build()
116-
117-
override fun createToast(icon: Material, text: Component, style: ToastStyle): Toast = ToastImpl(
118-
SpigotConversionUtil.fromBukkitItemMaterial(icon),
119-
text,
120-
style
121-
)
122-
123-
override fun sendToast(
124-
player: Player,
125-
toast: Toast
126-
) = toast.send(player.uniqueId)
127106
}

0 commit comments

Comments
 (0)