mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-15 08:28:10 +02:00
Further reduce false positives for survivalfly. Adapt some debug
messages.
This commit is contained in:
parent
ddd61a6522
commit
71d6a46b93
@ -66,7 +66,7 @@ public class Critical extends Check {
|
|||||||
// and without blindness effect).
|
// and without blindness effect).
|
||||||
if (mcFallDistance > 0f && !BlockProperties.isOnGroundOrResetCond(player, loc, mCc.yOnGround) && !player.hasPotionEffect(PotionEffectType.BLINDNESS)){
|
if (mcFallDistance > 0f && !BlockProperties.isOnGroundOrResetCond(player, loc, mCc.yOnGround) && !player.hasPotionEffect(PotionEffectType.BLINDNESS)){
|
||||||
// It was a critical hit, now check if the player has jumped or has sent a packet to mislead the server.
|
// It was a critical hit, now check if the player has jumped or has sent a packet to mislead the server.
|
||||||
if (player.getFallDistance() < cc.criticalFallDistance || Math.abs(player.getVelocity().getY()) < cc.criticalVelocity) {
|
if (player.getFallDistance() < cc.criticalFallDistance) { // removed velocity
|
||||||
final MovingConfig ccM = MovingConfig.getConfig(player);
|
final MovingConfig ccM = MovingConfig.getConfig(player);
|
||||||
final MovingData dataM = MovingData.getData(player);
|
final MovingData dataM = MovingData.getData(player);
|
||||||
if (MovingListener.shouldCheckSurvivalFly(player, dataM, ccM)){
|
if (MovingListener.shouldCheckSurvivalFly(player, dataM, ccM)){
|
||||||
|
@ -491,7 +491,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
|
|||||||
if (cc.debug) {
|
if (cc.debug) {
|
||||||
final StringBuilder builder = new StringBuilder(250);
|
final StringBuilder builder = new StringBuilder(250);
|
||||||
final Location loc = player.getLocation();
|
final Location loc = player.getLocation();
|
||||||
builder.append("\n" + player.getName());
|
builder.append(player.getName());
|
||||||
builder.append(" " + from.getWorld().getName() + " " + StringUtil.fdec3.format(from.getX()) + (from.getX() == loc.getX() ? "" : ("(" + StringUtil.fdec3.format(loc.getX()) + ")")));
|
builder.append(" " + from.getWorld().getName() + " " + StringUtil.fdec3.format(from.getX()) + (from.getX() == loc.getX() ? "" : ("(" + StringUtil.fdec3.format(loc.getX()) + ")")));
|
||||||
builder.append(", " + StringUtil.fdec3.format(from.getY()) + (from.getY() == loc.getY() ? "" : ("(" + StringUtil.fdec3.format(loc.getY()) + ")")));
|
builder.append(", " + StringUtil.fdec3.format(from.getY()) + (from.getY() == loc.getY() ? "" : ("(" + StringUtil.fdec3.format(loc.getY()) + ")")));
|
||||||
builder.append(", " + StringUtil.fdec3.format(from.getZ()) + (from.getZ() == loc.getZ() ? "" : ("(" + StringUtil.fdec3.format(loc.getZ()) + ")")));
|
builder.append(", " + StringUtil.fdec3.format(from.getZ()) + (from.getZ() == loc.getZ() ? "" : ("(" + StringUtil.fdec3.format(loc.getZ()) + ")")));
|
||||||
|
@ -417,16 +417,16 @@ public class SurvivalFly extends Check {
|
|||||||
final boolean fromOnGround, final boolean resetFrom, final boolean toOnGround, final boolean resetTo) {
|
final boolean fromOnGround, final boolean resetFrom, final boolean toOnGround, final boolean resetTo) {
|
||||||
// TODO: also show resetcond (!)
|
// TODO: also show resetcond (!)
|
||||||
StringBuilder builder = new StringBuilder(500);
|
StringBuilder builder = new StringBuilder(500);
|
||||||
builder.append(player.getName() + " ground: " + (data.noFallAssumeGround ? "(assumeonground) " : "") + (fromOnGround ? "onground -> " : (resetFrom ? "resetcond -> " : "--- -> ")) + (toOnGround ? "onground" : (resetTo ? "resetcond" : "---")) + "\n");
|
builder.append(player.getName() + " ground: " + (data.noFallAssumeGround ? "(assumeonground) " : "") + (fromOnGround ? "onground -> " : (resetFrom ? "resetcond -> " : "--- -> ")) + (toOnGround ? "onground" : (resetTo ? "resetcond" : "---")));
|
||||||
builder.append(player.getName() + " hDist: " + StringUtil.fdec3.format(hDistance) + " / " + StringUtil.fdec3.format(hAllowedDistance) + " , vDist: " + StringUtil.fdec3.format(yDistance) + " / " + StringUtil.fdec3.format(vAllowedDistance) + "\n");
|
builder.append("\n" + player.getName() + " hDist: " + StringUtil.fdec3.format(hDistance) + " / " + StringUtil.fdec3.format(hAllowedDistance) + " , vDist: " + StringUtil.fdec3.format(yDistance) + " / " + StringUtil.fdec3.format(vAllowedDistance));
|
||||||
builder.append(player.getName() + " vfreedom: " + StringUtil.fdec3.format(data.verticalFreedom) + " (vv=" + StringUtil.fdec3.format(data.verticalVelocity) + "/vvc=" + data.verticalVelocityCounter + "), jumpphase: " + data.sfJumpPhase + "\n");
|
builder.append("\n" + player.getName() + " vfreedom: " + StringUtil.fdec3.format(data.verticalFreedom) + " (vv=" + StringUtil.fdec3.format(data.verticalVelocity) + "/vvc=" + data.verticalVelocityCounter + "), jumpphase: " + data.sfJumpPhase);
|
||||||
if (!resetFrom && !resetTo) {
|
if (!resetFrom && !resetTo) {
|
||||||
// if (cc.survivalFlyAccountingH && data.hDistCount.bucketScore(1) > 0 && data.hDistCount.bucketScore(2) > 0) builder.append(player.getName() + " hacc=" + data.hDistSum.bucketScore(2) + "->" + data.hDistSum.bucketScore(1) + "\n");
|
// if (cc.survivalFlyAccountingH && data.hDistCount.bucketScore(1) > 0 && data.hDistCount.bucketScore(2) > 0) builder.append(player.getName() + " hacc=" + data.hDistSum.bucketScore(2) + "->" + data.hDistSum.bucketScore(1) + "\n");
|
||||||
// if (cc.survivalFlyAccountingV && data.vDistCount.bucketScore(1) > 0 && data.vDistCount.bucketScore(2) > 0) builder.append(player.getName() + " vacc=" + data.vDistSum.bucketScore(2) + "->" + data.vDistSum.bucketScore(1) + "\n");
|
// if (cc.survivalFlyAccountingV && data.vDistCount.bucketScore(1) > 0 && data.vDistCount.bucketScore(2) > 0) builder.append(player.getName() + " vacc=" + data.vDistSum.bucketScore(2) + "->" + data.vDistSum.bucketScore(1) + "\n");
|
||||||
if (cc.survivalFlyAccountingV && data.vDistAcc.count() > data.vDistAcc.bucketCapacity()) builder.append(player.getName() + " vacc=" + data.vDistAcc.toInformalString());
|
if (cc.survivalFlyAccountingV && data.vDistAcc.count() > data.vDistAcc.bucketCapacity()) builder.append("\n" + player.getName() + " vacc=" + data.vDistAcc.toInformalString());
|
||||||
}
|
}
|
||||||
if (player.isSleeping()) tags.add("sleeping");
|
if (player.isSleeping()) tags.add("sleeping");
|
||||||
if (!tags.isEmpty()) builder.append(player.getName() + " tags: " + StringUtil.join(tags, "+") + "\n");
|
if (!tags.isEmpty()) builder.append("\n" + player.getName() + " tags: " + StringUtil.join(tags, "+"));
|
||||||
System.out.print(builder.toString());
|
System.out.print(builder.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -458,9 +458,10 @@ public class SurvivalFly extends Check {
|
|||||||
setBackSafe = true;
|
setBackSafe = true;
|
||||||
}
|
}
|
||||||
// Interpolation check.
|
// Interpolation check.
|
||||||
if (!useWorkaround && data.fromX != Double.MAX_VALUE && yDistance > 0 && yDistance < 0.5 && data.sfLastYDist < 0) {
|
// TODO: Check if the set-back distance still has relevance.
|
||||||
|
if (!useWorkaround && data.fromX != Double.MAX_VALUE && yDistance > 0 && yDistance <= 0.5 + 0.2 * data.jumpAmplifier && data.sfLastYDist < 0) {
|
||||||
final double setBackYDistance = to.getY() - data.getSetBackY();
|
final double setBackYDistance = to.getY() - data.getSetBackY();
|
||||||
if (setBackYDistance > 0D && setBackYDistance <= 1.5D) {
|
if (setBackYDistance > 0D && setBackYDistance <= 1.5D + 0.2 * data.jumpAmplifier || setBackYDistance < 0 && Math.abs(setBackYDistance) < 3.0) {
|
||||||
// Interpolate from last to-coordinates to the from
|
// Interpolate from last to-coordinates to the from
|
||||||
// coordinates (with some safe-guard).
|
// coordinates (with some safe-guard).
|
||||||
final double dX = from.getX() - data.fromX;
|
final double dX = from.getX() - data.fromX;
|
||||||
@ -471,7 +472,7 @@ public class SurvivalFly extends Check {
|
|||||||
// Check full bounding box since last from.
|
// Check full bounding box since last from.
|
||||||
final double minY = Math.min(data.toY, Math.min(data.fromY, from.getY()));
|
final double minY = Math.min(data.toY, Math.min(data.fromY, from.getY()));
|
||||||
final double iY = minY; // TODO ...
|
final double iY = minY; // TODO ...
|
||||||
final double r = from.getWidth() / 2.0;
|
final double r = from.getWidth() / 2.0; // TODO: check + 0.35;
|
||||||
if (BlockProperties.isOnGround(from.getBlockCache(), Math.min(data.fromX, from.getX()) - r, iY - cc.yOnGround, Math.min(data.fromZ, from.getZ()) - r, Math.max(data.fromX, from.getX()) + r, iY + 0.25, Math.max(data.fromZ, from.getZ()) + r)) {
|
if (BlockProperties.isOnGround(from.getBlockCache(), Math.min(data.fromX, from.getX()) - r, iY - cc.yOnGround, Math.min(data.fromZ, from.getZ()) - r, Math.max(data.fromX, from.getX()) + r, iY + 0.25, Math.max(data.fromZ, from.getZ()) + r)) {
|
||||||
useWorkaround = true;
|
useWorkaround = true;
|
||||||
setBackSafe = true;
|
setBackSafe = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user