Skip to content

Commit ef59acf

Browse files
committed
Optimize first replaced value
1 parent 817ca43 commit ef59acf

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/main/java/me/rothes/protocolstringreplacer/packetlisteners/server/EntityMetadata.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)