Skip to content

Commit

Permalink
respect replacement of packets
Browse files Browse the repository at this point in the history
  • Loading branch information
Lukas Alt committed Mar 25, 2023
1 parent 99d8485 commit 041e082
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 17 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@

<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.0</version>
<version>3.5.0</version>
<configuration>
<failOnError>false</failOnError>
<encoding>ISO-8859-1</encoding>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@

package com.comphenix.protocol.injector;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.concurrency.AbstractConcurrentListenerMultimap;
Expand All @@ -28,6 +29,7 @@
import com.comphenix.protocol.events.PacketEvent;
import com.comphenix.protocol.events.PacketListener;
import com.comphenix.protocol.injector.packet.PacketRegistry;
import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.timing.TimedListenerManager;
import com.comphenix.protocol.timing.TimedListenerManager.ListenerType;
import com.comphenix.protocol.timing.TimedTracker;
Expand Down Expand Up @@ -114,7 +116,7 @@ public void invokePacketRecieving(ErrorReporter reporter, PacketEvent event, Lis
* @param event - the related packet event.
* @param element - the listener to invoke.
*/
private final void invokeReceivingListener(ErrorReporter reporter, PacketEvent event, PrioritizedListener<PacketListener> element) {
private void invokeReceivingListener(ErrorReporter reporter, PacketEvent event, PrioritizedListener<PacketListener> element) {
try {
event.setReadOnly(element.getPriority() == ListenerPriority.MONITOR);
element.getListener().onPacketReceiving(event);
Expand Down Expand Up @@ -148,23 +150,23 @@ public void invokePacketSending(ErrorReporter reporter, PacketEvent event) {
public void invokePacketSending(ErrorReporter reporter, PacketEvent event, @Nullable ListenerPriority priorityFilter) {
if(event.getPacketType() == PacketType.Play.Server.DELIMITER) {
// unpack the bundle and invoke for each packet in the bundle
Iterable packets = event.getPacket().getSpecificModifier(Iterable.class).read(0);
Iterator iterator = packets.iterator();
while (iterator.hasNext()) {
Object handle = iterator.next();
PacketType packetType = PacketRegistry.getPacketType(handle.getClass());
PacketContainer container = new PacketContainer(packetType, handle);
PacketEvent packetEvent = PacketEvent.fromServer(this, container, event.getNetworkMarker(), event.getPlayer());
invokeUnpackedPacketSending(reporter, packetEvent, priorityFilter);
StructureModifier<Iterable> iterableModifier = event.getPacket().getSpecificModifier(Iterable.class);
Iterable packets = iterableModifier.read(0);
List<Object> outPackets = new ArrayList<>();
for(Object handle : packets) {
PacketContainer subPacket = new PacketContainer(PacketRegistry.getPacketType(handle.getClass()), handle);
PacketEvent subPacketEvent = PacketEvent.fromServer(this, subPacket, event.getNetworkMarker(), event.getPlayer());
invokeUnpackedPacketSending(reporter, subPacketEvent, priorityFilter);

if(packetEvent.isCancelled()) {
iterator.remove();
if(!subPacketEvent.isCancelled()) {
outPackets.add(subPacketEvent.getPacket().getHandle()); // if the packet event has been cancelled, the packet will be removed from the bundle.
// event.getPacket().getHandle() can be different from handle at this point
}
}
if(!packets.iterator().hasNext()) { // are there still packets in this bundle?
event.setCancelled(true);
if(packets.iterator().hasNext()) { // are there still packets in this bundle?
iterableModifier.write(0, outPackets);
} else {
event.getPacket().getSpecificModifier(Iterable.class).write(0, packets);
event.setCancelled(true); // cancel packet if each individual packet has been canceled
}
} else {
invokeUnpackedPacketSending(reporter, event, priorityFilter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static Component fromWrapper(WrappedChatComponent wrapper) {

/**
* Converts a {@link Component} into a ProtocolLib wrapper
* @param components Component
* @param component Component
* @return ProtocolLib wrapper
*/
public static WrappedChatComponent fromComponent(Component component) {
Expand Down

0 comments on commit 041e082

Please sign in to comment.