11package org .samo_lego .taterzens .mixin .network ;
22
33import com .mojang .authlib .GameProfile ;
4- import io .netty .util .concurrent .Future ;
5- import io .netty .util .concurrent .GenericFutureListener ;
64import net .minecraft .network .Connection ;
5+ import net .minecraft .network .PacketSendListener ;
76import net .minecraft .network .protocol .Packet ;
87import net .minecraft .network .protocol .game .ClientboundAddPlayerPacket ;
98import net .minecraft .network .protocol .game .ClientboundPlayerInfoPacket ;
1615import net .minecraft .world .entity .player .Player ;
1716import net .minecraft .world .level .GameType ;
1817import net .minecraft .world .level .Level ;
18+ import org .jetbrains .annotations .Nullable ;
1919import org .samo_lego .taterzens .interfaces .ITaterzenEditor ;
2020import org .samo_lego .taterzens .mixin .accessors .ClientboundAddPlayerPacketAccessor ;
2121import org .samo_lego .taterzens .mixin .accessors .ClientboundPlayerInfoPacketAccessor ;
4848@ Mixin (value = ServerGamePacketListenerImpl .class , priority = 900 )
4949public abstract class ServerGamePacketListenerImplMixin_PacketFaker {
5050
51- @ Shadow public ServerPlayer player ;
51+ @ Shadow
52+ public ServerPlayer player ;
5253
5354 @ Final
5455 @ Shadow
5556 public Connection connection ;
5657
57- @ Shadow public abstract void send (Packet <?> packet );
58+ @ Shadow
59+ public abstract void send (Packet <?> packet , @ Nullable PacketSendListener packetSendListener );
60+
61+ @ Shadow
62+ public abstract void send (Packet <?> packet );
5863
5964 @ Unique
6065 private boolean taterzens$skipCheck ;
@@ -65,24 +70,21 @@ public abstract class ServerGamePacketListenerImplMixin_PacketFaker {
6570
6671 /**
6772 * Changes entity type if entity is an instance of {@link TaterzenNPC}.
68- *
69- * @param packet packet to change
70- * @param listener
7173 */
7274 @ Inject (
73- method = "send(Lnet/minecraft/network/protocol/Packet;Lio/netty/util/concurrent/GenericFutureListener ;)V" ,
75+ method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener ;)V" ,
7476 at = @ At (
7577 value = "INVOKE" ,
76- target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;Lio/netty/util/concurrent/GenericFutureListener ;)V"
78+ target = "Lnet/minecraft/network/Connection;send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener ;)V"
7779 ),
7880 cancellable = true
7981 )
80- private void changeEntityType (Packet <?> packet , GenericFutureListener <? extends Future <? super Void >> listener , CallbackInfo ci ) {
82+ private void changeEntityType (Packet <?> packet , PacketSendListener listener , CallbackInfo ci ) {
8183 Level world = player .getLevel ();
82- if (packet instanceof ClientboundAddPlayerPacket && !this .taterzens$skipCheck ) {
84+ if (packet instanceof ClientboundAddPlayerPacket && !this .taterzens$skipCheck ) {
8385 Entity entity = world .getEntity (((ClientboundAddPlayerPacketAccessor ) packet ).getId ());
8486
85- if (!(entity instanceof TaterzenNPC npc ))
87+ if (!(entity instanceof TaterzenNPC npc ))
8688 return ;
8789
8890 GameProfile profile = npc .getGameProfile ();
@@ -91,13 +93,13 @@ private void changeEntityType(Packet<?> packet, GenericFutureListener<? extends
9193 ((ClientboundPlayerInfoPacketAccessor ) playerAddPacket ).setEntries (
9294 Arrays .asList (new ClientboundPlayerInfoPacket .PlayerUpdate (profile , 0 , GameType .SURVIVAL , npc .getTabListName (), null ))
9395 );
94- this .send (playerAddPacket );
96+ this .send (playerAddPacket , listener );
9597
9698 // Before we send this packet, we have
9799 // added player to tablist, otherwise client doesn't
98100 // show it ... :mojank:
99101 this .taterzens$skipCheck = true ;
100- this .send (packet );
102+ this .send (packet , listener );
101103 this .taterzens$skipCheck = false ;
102104
103105 // And now we can remove it from tablist
@@ -143,14 +145,14 @@ private void removeTaterzenFromTablist(CallbackInfo ci) {
143145 taterzens$queueTick ++;
144146
145147 List <ClientboundPlayerInfoPacket .PlayerUpdate > toRemove = new ArrayList <>();
146- for (var iterator = taterzens$tablistQueue .values ().iterator (); iterator .hasNext (); ) {
148+ for (var iterator = taterzens$tablistQueue .values ().iterator (); iterator .hasNext (); ) {
147149 var current = iterator .next ();
148- if (current .removeAt () > taterzens$queueTick ) break ;
150+ if (current .removeAt () > taterzens$queueTick ) break ;
149151
150152 iterator .remove ();
151153 toRemove .add (new ClientboundPlayerInfoPacket .PlayerUpdate (current .profile (), 0 , GameType .SURVIVAL , current .displayName (), null ));
152154 }
153- if (toRemove .isEmpty ()) return ;
155+ if (toRemove .isEmpty ()) return ;
154156
155157 ClientboundPlayerInfoPacket taterzensRemovePacket = new ClientboundPlayerInfoPacket (REMOVE_PLAYER );
156158 //noinspection ConstantConditions
0 commit comments