1+ package me .zhenxin .zmusic .proto .packet .impl ;
2+
3+ import me .zhenxin .zmusic .proto .packet .AdvancementPacket ;
4+ import net .kyori .adventure .text .serializer .gson .GsonComponentSerializer ;
5+ import net .kyori .adventure .text .serializer .legacy .LegacyComponentSerializer ;
6+ import net .minecraft .advancements .*;
7+ import net .minecraft .core .RegistryAccess ;
8+ import net .minecraft .network .chat .Component ;
9+ import net .minecraft .network .protocol .game .ClientboundUpdateAdvancementsPacket ;
10+ import net .minecraft .resources .ResourceLocation ;
11+ import net .minecraft .server .MinecraftServer ;
12+ import org .bukkit .craftbukkit .entity .CraftPlayer ;
13+ import org .bukkit .craftbukkit .inventory .CraftItemStack ;
14+ import org .bukkit .entity .Player ;
15+ import org .bukkit .inventory .ItemStack ;
16+
17+ import java .util .Collections ;
18+ import java .util .Optional ;
19+
20+ /**
21+ * @author Lumine1909
22+ * @since 2025/5/8 10:22
23+ */
24+ @ SuppressWarnings ("AlibabaClassNamingShouldBeCamel" )
25+ public class AdvancementPacket_Paper extends AdvancementPacket {
26+
27+ private static final AdvancementRequirements SIMPLE_REQUIREMENT = new AdvancementRequirements (Collections .singletonList (Collections .singletonList ("1" )));
28+
29+ private final ResourceLocation resourceLocation = ResourceLocation .fromNamespaceAndPath (namespaced , key );
30+ private final Component messageComponent ;
31+ private final Component descriptionComponent ;
32+
33+ public AdvancementPacket_Paper (Player player , String message ) {
34+ super (player , message );
35+ RegistryAccess .Frozen frozen = MinecraftServer .getServer ().registryAccess ();
36+ Component component1 = Component .Serializer .fromJson (GsonComponentSerializer .gson ().serialize (LegacyComponentSerializer .legacyAmpersand ().deserialize (message )), frozen );
37+ Component component2 = Component .Serializer .fromJson (GsonComponentSerializer .gson ().serialize (LegacyComponentSerializer .legacyAmpersand ().deserialize (desc )), frozen );
38+ messageComponent = component1 != null ? component1 : Component .empty ();
39+ descriptionComponent = component2 != null ? component2 : Component .empty ();
40+ }
41+
42+ @ Override
43+ protected void sent (boolean add ) {
44+ ClientboundUpdateAdvancementsPacket packet ;
45+
46+ if (add ) {
47+ Advancement advancement = new Advancement (
48+ Optional .empty (),
49+ Optional .of (new DisplayInfo (
50+ CraftItemStack .asNMSCopy (new ItemStack (icon )),
51+ messageComponent ,
52+ descriptionComponent ,
53+ Optional .empty (),
54+ AdvancementType .TASK ,
55+ true ,
56+ false ,
57+ true
58+ )),
59+ AdvancementRewards .EMPTY ,
60+ Collections .emptyMap (),
61+ SIMPLE_REQUIREMENT ,
62+ true
63+ );
64+
65+ AdvancementProgress progress = new AdvancementProgress ();
66+ progress .update (SIMPLE_REQUIREMENT );
67+ progress .grantProgress ("1" );
68+ packet = new ClientboundUpdateAdvancementsPacket (
69+ false ,
70+ Collections .singleton (new AdvancementHolder (resourceLocation , advancement )),
71+ Collections .emptySet (),
72+ Collections .singletonMap (resourceLocation , progress )
73+ );
74+ } else {
75+ packet = new ClientboundUpdateAdvancementsPacket (
76+ false ,
77+ Collections .emptySet (),
78+ Collections .singleton (resourceLocation ),
79+ Collections .emptyMap ()
80+ );
81+ }
82+ CraftPlayer player = (CraftPlayer ) this .player ;
83+ player .getHandle ().connection .send (packet );
84+ }
85+ }
0 commit comments