Skip to content

Commit 68e28a1

Browse files
authored
Refactor/150 remove packet events (#160)
2 parents f6f5072 + 3f80330 commit 68e28a1

File tree

12 files changed

+279
-4
lines changed

12 files changed

+279
-4
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.3
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
}
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-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
}

surf-api-bukkit/surf-api-bukkit-plugin-test/src/main/java/dev/slne/surf/surfapi/bukkit/test/command/SurfApiTestCommand.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.ReflectionTest;
1313
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.ScoreboardTest;
1414
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.SmoothTimeSkip;
15+
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.ToastTest;
1516
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.VisualizerTest;
1617
import dev.slne.surf.surfapi.bukkit.test.command.subcommands.gui.InventoryFrameworkTest;
1718

@@ -35,7 +36,8 @@ public SurfApiTestCommand() {
3536
new VisualizerTest("visualizer"),
3637
new GlowingTest("glowing"),
3738
new PaginationTest("pagination"),
38-
new InventoryTest("inventory")
39+
new InventoryTest("inventory"),
40+
new ToastTest(("toast"))
3941
);
4042
}
4143
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package dev.slne.surf.surfapi.bukkit.test.command.subcommands
2+
3+
import dev.jorel.commandapi.CommandAPICommand
4+
import dev.jorel.commandapi.kotlindsl.playerExecutor
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
12+
13+
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+
26+
init {
27+
playerExecutor { player, _ ->
28+
val playerHeadToast = toast {
29+
icon(ItemType.PLAYER_HEAD) {
30+
setData(DataComponentTypes.PROFILE, ResolvableProfile.resolvableProfile(player.playerProfile))
31+
}
32+
33+
title {
34+
primary("Player Head Test")
35+
}
36+
}
37+
38+
val playerObjectToast = toast {
39+
icon(ItemType.BARRIER)
40+
41+
title {
42+
append(Component.`object`(ObjectContents.playerHead(player.uniqueId)))
43+
appendSpace()
44+
append(Component.text("Player Head Test"))
45+
}
46+
}
47+
48+
toast.createOperation()
49+
.add(playerHeadToast.createOperation())
50+
.add(playerObjectToast.createOperation())
51+
.execute(player)
52+
}
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package dev.slne.surf.surfapi.bukkit.server.impl.nms.bridges.packets.player
2+
3+
import com.google.auto.service.AutoService
4+
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
5+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.SurfBukkitNmsPlayerToastPackets
6+
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.player.toast.Toast
7+
import dev.slne.surf.surfapi.bukkit.server.impl.nms.bridges.packets.PacketOperationImpl
8+
import dev.slne.surf.surfapi.bukkit.server.nms.toNms
9+
import net.minecraft.advancements.Advancement
10+
import net.minecraft.advancements.AdvancementProgress
11+
import net.minecraft.advancements.AdvancementRequirements
12+
import net.minecraft.network.chat.Component
13+
import net.minecraft.network.protocol.game.ClientboundUpdateAdvancementsPacket
14+
import net.minecraft.resources.ResourceLocation
15+
import java.util.*
16+
17+
18+
@NmsUseWithCaution
19+
@AutoService(SurfBukkitNmsPlayerToastPackets::class)
20+
class SurfBukkitNmsPlayerToastPacketsImpl : SurfBukkitNmsPlayerToastPackets {
21+
override fun showToast(toast: Toast) = PacketOperationImpl.complex { _, packets ->
22+
val id = ResourceLocation.fromNamespaceAndPath("surfapi", "toast_${UUID.randomUUID()}")
23+
24+
packets.add(showPacket(id, toast))
25+
packets.add(hidePacket(id))
26+
27+
packets
28+
}
29+
30+
private fun showPacket(id: ResourceLocation, toast: Toast) =
31+
ClientboundUpdateAdvancementsPacket(
32+
false, listOf(createAdvancement(id, toast)), emptySet(), mapOf(
33+
id to AdvancementProgress().apply {
34+
update(requirements)
35+
grantProgress(CRITERION_ID)
36+
}), true
37+
)
38+
39+
private fun hidePacket(id: ResourceLocation) = ClientboundUpdateAdvancementsPacket(
40+
false, emptyList(), setOf(id), emptyMap(), false
41+
)
42+
43+
private fun createAdvancement(id: ResourceLocation, toast: Toast) = Advancement.Builder.recipeAdvancement()
44+
.display(
45+
toast.icon.toNms(),
46+
toast.title.toNms(),
47+
Component.empty(),
48+
null,
49+
toast.frame.toNms(),
50+
true,
51+
false,
52+
false
53+
)
54+
.requirements(requirements)
55+
.build(id)
56+
57+
companion object {
58+
private const val CRITERION_ID = "surfapi_toast"
59+
private val requirements by lazy { AdvancementRequirements.allOf(listOf(CRITERION_ID)) }
60+
}
61+
}

surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/impl/pdc/block/CustomBlockData.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ class CustomBlockData(val block: Block) : CustomBlockPersistentDataContainer {
129129
return pdc.serializeToBytes()
130130
}
131131

132+
override fun getSize(): Int {
133+
return pdc.size
134+
}
135+
132136
companion object {
133137
fun getKey(block: Block): NamespacedKey {
134138
return key("x${block.x and 15}y${block.y}z${block.z and 15}")

surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/nms/nms-extensions.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ package dev.slne.surf.surfapi.bukkit.server.nms
44

55
import dev.slne.surf.surfapi.bukkit.api.extensions.server
66
import dev.slne.surf.surfapi.bukkit.api.nms.bridges.packets.entity.SignBlockUpdateSettings
7+
import io.papermc.paper.advancement.AdvancementDisplay
8+
import io.papermc.paper.advancement.AdvancementDisplay.Frame.*
79
import io.papermc.paper.adventure.PaperAdventure
810
import io.papermc.paper.math.BlockPosition
911
import io.papermc.paper.math.FinePosition
1012
import io.papermc.paper.math.Position
13+
import net.minecraft.advancements.AdvancementType
1114
import net.minecraft.core.BlockPos
1215
import net.minecraft.network.chat.Component
1316
import net.minecraft.server.level.ServerLevel
@@ -62,6 +65,7 @@ fun Material.toNmsItem(): Item = CraftMagicNumbers.getItem(this)
6265
fun BlockData.toNms(): NmsBlockState = (this as CraftBlockData).state
6366
fun Vector3f?.toNms(): NmsVector3f? =
6467
if (this == null) null else NmsVector3f(this.x(), this.y(), this.z())
68+
6569
fun FinePosition.toNms() = Vec3(x(), y(), z())
6670
fun BlockState.toNms(): NmsBlockState = (this as CraftBlockState).handle
6771
fun Quaternionf?.toNms(): NmsQuaternionf? =
@@ -127,4 +131,10 @@ fun EntityType.toNms(): net.minecraft.world.entity.EntityType<*> = CraftEntityTy
127131
fun World.toNms(): ServerLevel = (this as CraftWorld).handle
128132
fun Entity.toNms(): net.minecraft.world.entity.Entity = (this as CraftEntity).handle
129133
fun LivingEntity.toNms(): net.minecraft.world.entity.LivingEntity = (this as CraftLivingEntity).handle
130-
fun DamageSource.toNms(): net.minecraft.world.damagesource.DamageSource = (this as CraftDamageSource).handle
134+
fun DamageSource.toNms(): net.minecraft.world.damagesource.DamageSource = (this as CraftDamageSource).handle
135+
136+
fun AdvancementDisplay.Frame.toNms() = when (this) {
137+
CHALLENGE -> AdvancementType.CHALLENGE
138+
GOAL -> AdvancementType.GOAL
139+
TASK -> AdvancementType.TASK
140+
}

0 commit comments

Comments
 (0)