@@ -34,24 +34,29 @@ protected void process(@NotNull PacketEvent packetEvent) {
3434 return ;
3535 }
3636 PacketContainer packet = packetEvent .getPacket ();
37- PacketContainer processed = processPacket (packetEvent , user , packet , true );
37+ PacketContainer processed = processPacket (packetEvent , user , packet , null , - 1 );
3838 if (packet != processed ) {
3939 packetEvent .setPacket (processed );
4040 }
4141 }
4242
43- private PacketContainer processPacket (PacketEvent packetEvent , PsrUser user , PacketContainer packet , boolean clone ) {
43+ private PacketContainer processPacket (PacketEvent packetEvent , PsrUser user , PacketContainer packet , Object first , int index ) {
44+ boolean clone = first == null ;
4445 if (shouldDV ) {
4546 List <WrappedDataValue > dataValueList = packet .getDataValueCollectionModifier ().read (0 );
46- for (WrappedDataValue wrappedDataValue : dataValueList ) {
47+ if (!clone ) {
48+ dataValueList .get (index ).setValue (first );
49+ }
50+ for (int i = index + 1 , dataValueListSize = dataValueList .size (); i < dataValueListSize ; i ++) {
51+ WrappedDataValue wrappedDataValue = dataValueList .get (i );
4752 Object getValue = wrappedDataValue .getValue ();
4853 Object o = processObject (packetEvent , user , getValue );
4954 if (o == this ) {
5055 return packet ;
5156 } else if (o != null && o != getValue ) {
5257 if (clone ) {
5358 PacketContainer cloned = clonePacket (packet );
54- processPacket (packetEvent , user , cloned , false );
59+ processPacket (packetEvent , user , cloned , o , i );
5560 return cloned ;
5661 }
5762 wrappedDataValue .setValue (o );
@@ -60,17 +65,20 @@ private PacketContainer processPacket(PacketEvent packetEvent, PsrUser user, Pac
6065
6166 } else {
6267 List <WrappedWatchableObject > metadataList = packet .getWatchableCollectionModifier ().read (0 );
63-
68+ if (!clone ) {
69+ metadataList .get (index ).setValue (first );
70+ }
6471 if (metadataList != null ) {
65- for (WrappedWatchableObject watchableObject : metadataList ) {
72+ for (int i = index + 1 , metadataListSize = metadataList .size (); i < metadataListSize ; i ++) {
73+ WrappedWatchableObject watchableObject = metadataList .get (i );
6674 Object getValue = watchableObject .getValue ();
6775 Object o = processObject (packetEvent , user , getValue );
6876 if (o == this ) {
6977 return packet ;
7078 } else if (o != null && o != getValue ) {
7179 if (clone ) {
7280 PacketContainer cloned = clonePacket (packet );
73- processPacket (packetEvent , user , cloned , false );
81+ processPacket (packetEvent , user , cloned , o , i );
7482 return cloned ;
7583 }
7684 watchableObject .setValue (o );
0 commit comments