More safe IPlayerData getting for the net checks.
This commit is contained in:
parent
6bddb1a834
commit
500544c32b
|
@ -28,6 +28,7 @@ import fr.neatmonster.nocheatplus.NCPAPIProvider;
|
|||
import fr.neatmonster.nocheatplus.checks.net.NetConfig;
|
||||
import fr.neatmonster.nocheatplus.checks.net.NetData;
|
||||
import fr.neatmonster.nocheatplus.checks.net.PacketFrequency;
|
||||
import fr.neatmonster.nocheatplus.logging.StaticLog;
|
||||
import fr.neatmonster.nocheatplus.players.DataManager;
|
||||
import fr.neatmonster.nocheatplus.players.IPlayerData;
|
||||
|
||||
|
@ -73,7 +74,11 @@ public class CatchAllAdapter extends BaseAdapter {
|
|||
// TODO: Is this a problem, as the server has the player so it could break a block)?
|
||||
return;
|
||||
}
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final IPlayerData pData = DataManager.getPlayerDataSafe(player);
|
||||
if (pData == null) {
|
||||
StaticLog.logWarning("Failed to fetch player data with " + event.getPacketType() + " for: " + player.toString());
|
||||
return;
|
||||
}
|
||||
if (packetFrequency.isEnabled(player, pData)) {
|
||||
final NetConfig cc = pData.getGenericInstance(NetConfig.class);
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
|
|
|
@ -36,7 +36,7 @@ public class DebugAdapter extends BaseAdapter {
|
|||
@Override
|
||||
public void onPacketReceiving(PacketEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
if (DataManager.getPlayerData(player).isDebugActive(CheckType.NET)) {
|
||||
if (DataManager.getPlayerDataSafe(player).isDebugActive(CheckType.NET)) {
|
||||
debug(player, "packet: " + event.getPacketType());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ public class KeepAliveAdapter extends BaseAdapter {
|
|||
return;
|
||||
}
|
||||
// Always update last received time.
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final IPlayerData pData = DataManager.getPlayerDataSafe(player);
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
data.lastKeepAliveTime = time;
|
||||
final NetConfig cc = pData.getGenericInstance(NetConfig.class);
|
||||
|
|
|
@ -158,7 +158,7 @@ public class MovingFlying extends BaseAdapter {
|
|||
return;
|
||||
}
|
||||
final Player player = event.getPlayer();
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final IPlayerData pData = DataManager.getPlayerDataSafe(player);
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
final AlmostBoolean matched = data.teleportQueue.processAck(teleportId);
|
||||
if (matched.decideOptimistically()) {
|
||||
|
@ -195,7 +195,7 @@ public class MovingFlying extends BaseAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
final IPlayerData pData = DataManager.getPlayerData(player);
|
||||
final IPlayerData pData = DataManager.getPlayerDataSafe(player);
|
||||
// Always update last received time.
|
||||
final NetData data = pData.getGenericInstance(NetData.class);
|
||||
data.lastKeepAliveTime = time; // Update without much of a contract.
|
||||
|
|
|
@ -259,4 +259,28 @@ public class DataManager {
|
|||
return instance.getNewInstance(registeredFor, arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to get or create an IPlayerData instance. Creation will only be
|
||||
* done, if the player name, UUID and world can be fetched.
|
||||
*
|
||||
* @param player
|
||||
* @return null in case of failures.
|
||||
*/
|
||||
public static IPlayerData getPlayerDataSafe(final Player player) {
|
||||
try {
|
||||
return getPlayerData(player);
|
||||
}
|
||||
catch (UnsupportedOperationException e) {}
|
||||
try {
|
||||
return getPlayerData(player.getUniqueId());
|
||||
}
|
||||
catch (UnsupportedOperationException e) {}
|
||||
try {
|
||||
return getPlayerData(player.getName());
|
||||
}
|
||||
catch (UnsupportedOperationException e) {}
|
||||
// Failure.
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue