mirror of
https://github.com/dmulloy2/ProtocolLib.git
synced 2024-11-28 05:35:28 +01:00
Invoke MONITOR listeners, even if we are bypassing normal listeners.
This commit is contained in:
parent
3c97cffc09
commit
1bd0db20ce
@ -21,6 +21,7 @@ import java.lang.reflect.InvocationTargetException;
|
|||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,7 +44,7 @@ public interface PacketStream {
|
|||||||
* Send a packet to the given player.
|
* Send a packet to the given player.
|
||||||
* @param reciever - the reciever.
|
* @param reciever - the reciever.
|
||||||
* @param packet - packet to send.
|
* @param packet - packet to send.
|
||||||
* @param filters - whether or not to invoke any packet filters.
|
* @param filters - whether or not to invoke any packet filters below {@link ListenerPriority#MONITOR}.
|
||||||
* @throws InvocationTargetException - if an error occured when sending the packet.
|
* @throws InvocationTargetException - if an error occured when sending the packet.
|
||||||
*/
|
*/
|
||||||
public void sendServerPacket(Player reciever, PacketContainer packet, boolean filters)
|
public void sendServerPacket(Player reciever, PacketContainer packet, boolean filters)
|
||||||
@ -63,7 +64,7 @@ public interface PacketStream {
|
|||||||
* Simulate recieving a certain packet from a given player.
|
* Simulate recieving a certain packet from a given player.
|
||||||
* @param sender - the sender.
|
* @param sender - the sender.
|
||||||
* @param packet - the packet that was sent.
|
* @param packet - the packet that was sent.
|
||||||
* @param filters - whether or not to invoke any packet filters.
|
* @param filters - whether or not to invoke any packet filters below {@link ListenerPriority#MONITOR}.
|
||||||
* @throws InvocationTargetException If the reflection machinery failed.
|
* @throws InvocationTargetException If the reflection machinery failed.
|
||||||
* @throws IllegalAccessException If the underlying method caused an error.
|
* @throws IllegalAccessException If the underlying method caused an error.
|
||||||
*/
|
*/
|
||||||
|
@ -27,6 +27,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import com.comphenix.protocol.async.AsyncMarker;
|
import com.comphenix.protocol.async.AsyncMarker;
|
||||||
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
import com.comphenix.protocol.events.PacketContainer;
|
||||||
import com.comphenix.protocol.events.PacketListener;
|
import com.comphenix.protocol.events.PacketListener;
|
||||||
import com.comphenix.protocol.injector.PacketConstructor;
|
import com.comphenix.protocol.injector.PacketConstructor;
|
||||||
@ -47,7 +48,7 @@ public interface ProtocolManager extends PacketStream {
|
|||||||
*
|
*
|
||||||
* @param reciever - the reciever.
|
* @param reciever - the reciever.
|
||||||
* @param packet - packet to send.
|
* @param packet - packet to send.
|
||||||
* @param filters - whether or not to invoke any packet filters.
|
* @param filters - whether or not to invoke any packet filters below {@link ListenerPriority#MONITOR}.
|
||||||
* @throws InvocationTargetException - if an error occured when sending the packet.
|
* @throws InvocationTargetException - if an error occured when sending the packet.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -62,7 +63,7 @@ public interface ProtocolManager extends PacketStream {
|
|||||||
*
|
*
|
||||||
* @param sender - the sender.
|
* @param sender - the sender.
|
||||||
* @param packet - the packet that was sent.
|
* @param packet - the packet that was sent.
|
||||||
* @param filters - whether or not to invoke any packet filters.
|
* @param filters - whether or not to invoke any packet filters below {@link ListenerPriority#MONITOR}.
|
||||||
* @throws InvocationTargetException If the reflection machinery failed.
|
* @throws InvocationTargetException If the reflection machinery failed.
|
||||||
* @throws IllegalAccessException If the underlying method caused an error.
|
* @throws IllegalAccessException If the underlying method caused an error.
|
||||||
*/
|
*/
|
||||||
|
@ -34,7 +34,6 @@ import com.google.common.collect.Iterables;
|
|||||||
* @author Kristian
|
* @author Kristian
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractConcurrentListenerMultimap<TListener> {
|
public abstract class AbstractConcurrentListenerMultimap<TListener> {
|
||||||
|
|
||||||
// The core of our map
|
// The core of our map
|
||||||
private ConcurrentMap<Integer, SortedCopyOnWriteArray<PrioritizedListener<TListener>>> listeners =
|
private ConcurrentMap<Integer, SortedCopyOnWriteArray<PrioritizedListener<TListener>>> listeners =
|
||||||
new ConcurrentHashMap<Integer, SortedCopyOnWriteArray<PrioritizedListener<TListener>>>();
|
new ConcurrentHashMap<Integer, SortedCopyOnWriteArray<PrioritizedListener<TListener>>>();
|
||||||
@ -45,7 +44,6 @@ public abstract class AbstractConcurrentListenerMultimap<TListener> {
|
|||||||
* @param whitelist - the packet whitelist to use.
|
* @param whitelist - the packet whitelist to use.
|
||||||
*/
|
*/
|
||||||
public void addListener(TListener listener, ListeningWhitelist whitelist) {
|
public void addListener(TListener listener, ListeningWhitelist whitelist) {
|
||||||
|
|
||||||
PrioritizedListener<TListener> prioritized = new PrioritizedListener<TListener>(listener, whitelist.getPriority());
|
PrioritizedListener<TListener> prioritized = new PrioritizedListener<TListener>(listener, whitelist.getPriority());
|
||||||
|
|
||||||
for (Integer packetID : whitelist.getWhitelist()) {
|
for (Integer packetID : whitelist.getWhitelist()) {
|
||||||
@ -55,7 +53,6 @@ public abstract class AbstractConcurrentListenerMultimap<TListener> {
|
|||||||
|
|
||||||
// Add the listener to a specific packet notifcation list
|
// Add the listener to a specific packet notifcation list
|
||||||
private void addListener(Integer packetID, PrioritizedListener<TListener> listener) {
|
private void addListener(Integer packetID, PrioritizedListener<TListener> listener) {
|
||||||
|
|
||||||
SortedCopyOnWriteArray<PrioritizedListener<TListener>> list = listeners.get(packetID);
|
SortedCopyOnWriteArray<PrioritizedListener<TListener>> list = listeners.get(packetID);
|
||||||
|
|
||||||
// We don't want to create this for every lookup
|
// We don't want to create this for every lookup
|
||||||
@ -84,7 +81,6 @@ public abstract class AbstractConcurrentListenerMultimap<TListener> {
|
|||||||
* @return Every packet ID that was removed due to no listeners.
|
* @return Every packet ID that was removed due to no listeners.
|
||||||
*/
|
*/
|
||||||
public List<Integer> removeListener(TListener listener, ListeningWhitelist whitelist) {
|
public List<Integer> removeListener(TListener listener, ListeningWhitelist whitelist) {
|
||||||
|
|
||||||
List<Integer> removedPackets = new ArrayList<Integer>();
|
List<Integer> removedPackets = new ArrayList<Integer>();
|
||||||
|
|
||||||
// Again, not terribly efficient. But adding or removing listeners should be a rare event.
|
// Again, not terribly efficient. But adding or removing listeners should be a rare event.
|
||||||
|
@ -537,6 +537,14 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
if (packetCreation.compareAndSet(false, true))
|
if (packetCreation.compareAndSet(false, true))
|
||||||
incrementPhases(GamePhase.PLAYING);
|
incrementPhases(GamePhase.PLAYING);
|
||||||
|
|
||||||
|
// Inform the MONITOR packets
|
||||||
|
if (!filters) {
|
||||||
|
sendingListeners.invokePacketSending(
|
||||||
|
reporter,
|
||||||
|
PacketEvent.fromServer(this, packet, reciever),
|
||||||
|
ListenerPriority.MONITOR);
|
||||||
|
}
|
||||||
|
|
||||||
playerInjection.sendServerPacket(reciever, packet, filters);
|
playerInjection.sendServerPacket(reciever, packet, filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,6 +575,13 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
|
|||||||
mcPacket = event.getPacket().getHandle();
|
mcPacket = event.getPacket().getHandle();
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Let the monitors know though
|
||||||
|
recievedListeners.invokePacketSending(
|
||||||
|
reporter,
|
||||||
|
PacketEvent.fromClient(this, packet, sender),
|
||||||
|
ListenerPriority.MONITOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerInjection.recieveClientPacket(sender, mcPacket);
|
playerInjection.recieveClientPacket(sender, mcPacket);
|
||||||
|
@ -21,6 +21,7 @@ import java.util.Collection;
|
|||||||
|
|
||||||
import com.comphenix.protocol.concurrency.AbstractConcurrentListenerMultimap;
|
import com.comphenix.protocol.concurrency.AbstractConcurrentListenerMultimap;
|
||||||
import com.comphenix.protocol.error.ErrorReporter;
|
import com.comphenix.protocol.error.ErrorReporter;
|
||||||
|
import com.comphenix.protocol.events.ListenerPriority;
|
||||||
import com.comphenix.protocol.events.PacketEvent;
|
import com.comphenix.protocol.events.PacketEvent;
|
||||||
import com.comphenix.protocol.events.PacketListener;
|
import com.comphenix.protocol.events.PacketListener;
|
||||||
|
|
||||||
@ -30,7 +31,6 @@ import com.comphenix.protocol.events.PacketListener;
|
|||||||
* @author Kristian
|
* @author Kristian
|
||||||
*/
|
*/
|
||||||
public final class SortedPacketListenerList extends AbstractConcurrentListenerMultimap<PacketListener> {
|
public final class SortedPacketListenerList extends AbstractConcurrentListenerMultimap<PacketListener> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invokes the given packet event for every registered listener.
|
* Invokes the given packet event for every registered listener.
|
||||||
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
||||||
@ -54,6 +54,33 @@ public final class SortedPacketListenerList extends AbstractConcurrentListenerMu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invokes the given packet event for every registered listener of the given priority.
|
||||||
|
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
||||||
|
* @param event - the packet event to invoke.
|
||||||
|
* @param priorityFilter - the required priority for a listener to be invoked.
|
||||||
|
*/
|
||||||
|
public void invokePacketRecieving(ErrorReporter reporter, PacketEvent event, ListenerPriority priorityFilter) {
|
||||||
|
Collection<PrioritizedListener<PacketListener>> list = getListener(event.getPacketID());
|
||||||
|
|
||||||
|
if (list == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (PrioritizedListener<PacketListener> element : list) {
|
||||||
|
final PacketListener listener = element.getListener();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (listener.getReceivingWhitelist().getPriority() == priorityFilter) {
|
||||||
|
listener.onPacketReceiving(event);
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
// Minecraft doesn't want your Exception.
|
||||||
|
reporter.reportMinimal(listener.getPlugin(), "onPacketReceiving(PacketEvent)", e,
|
||||||
|
event.getPacket().getHandle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invokes the given packet event for every registered listener.
|
* Invokes the given packet event for every registered listener.
|
||||||
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
||||||
@ -76,4 +103,30 @@ public final class SortedPacketListenerList extends AbstractConcurrentListenerMu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invokes the given packet event for every registered listener of the given priority.
|
||||||
|
* @param reporter - the error reporter that will be used to inform about listener exceptions.
|
||||||
|
* @param event - the packet event to invoke.
|
||||||
|
* @param priorityFilter - the required priority for a listener to be invoked.
|
||||||
|
*/
|
||||||
|
public void invokePacketSending(ErrorReporter reporter, PacketEvent event, ListenerPriority priorityFilter) {
|
||||||
|
Collection<PrioritizedListener<PacketListener>> list = getListener(event.getPacketID());
|
||||||
|
|
||||||
|
if (list == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (PrioritizedListener<PacketListener> element : list) {
|
||||||
|
final PacketListener listener = element.getListener();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (listener.getSendingWhitelist().getPriority() == priorityFilter) {
|
||||||
|
listener.onPacketSending(event);
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
// Minecraft doesn't want your Exception.
|
||||||
|
reporter.reportMinimal(listener.getPlugin(), "onPacketSending(PacketEvent)", e,
|
||||||
|
event.getPacket().getHandle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user