Catch asynchronous events from ProtocolLib.

This commit is contained in:
asofold 2015-02-07 22:56:31 +01:00
parent 890442178d
commit 86803af59a
2 changed files with 16 additions and 7 deletions

View File

@ -51,6 +51,8 @@ public class FlyingFrequency extends PacketAdapter {
private final Counters counters = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstance(Counters.class);
private final int idNullPlayer = counters.registerKey("packet.flying.nullplayer");
private final int idHandled = counters.registerKey("packet.flying.handled");
private final int idAsyncFlying = counters.registerKey("packet.flying.asynchronous");
private boolean cancelRedundant = true;
@ -80,6 +82,8 @@ public class FlyingFrequency extends PacketAdapter {
return;
}
counters.add(idHandled, 1);
final NetData data = dataFactory.getData(player);
final long time = Monotonic.millis();
// Counting all packets.
@ -91,11 +95,17 @@ public class FlyingFrequency extends PacketAdapter {
return;
}
// Cancel redundant packets, when frequency is high anyway.
if (cancelRedundant && cc.flyingFrequencyRedundantActive && checkRedundantPackets(player, event, allScore, time, data, cc) ) {
event.setCancelled(true);
if (event.isAsync()) {
// Count all asynchronous events.
counters.add(idAsyncFlying, 1);
// TODO: Detect game phase for the player and warn if it is PLAY.
}
else {
// Cancel redundant packets, when frequency is high anyway.
if (cancelRedundant && cc.flyingFrequencyRedundantActive && checkRedundantPackets(player, event, allScore, time, data, cc)) {
event.setCancelled(true);
}
}
}
private boolean checkRedundantPackets(final Player player, final PacketEvent event, final float allScore, final long time, final NetData data, final NetConfig cc) {

View File

@ -1,11 +1,10 @@
package fr.neatmonster.nocheatplus.checks.net;
import java.util.HashMap;
import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.access.CheckDataFactory;
import fr.neatmonster.nocheatplus.utilities.ds.corw.LinkedHashMapCOW;
/**
* Currently primary thread only!
@ -14,7 +13,7 @@ import fr.neatmonster.nocheatplus.checks.access.CheckDataFactory;
*/
public class NetDataFactory implements CheckDataFactory {
private final HashMap<String, NetData> dataMap = new HashMap<String, NetData>();
private final LinkedHashMapCOW<String, NetData> dataMap = new LinkedHashMapCOW<String, NetData>();
@Override
public void removeAllData() {