mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-12-27 19:07:45 +01:00
Fix some issues with stairs and half-blocks.
Add stepping up half-block distances to lost-ground.
This commit is contained in:
parent
351fbfd79f
commit
c003ccc09f
@ -213,7 +213,7 @@ public class SurvivalFly extends Check {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the vertical speed limit based on the current jump phase.
|
// Calculate the vertical speed limit based on the current jump phase.
|
||||||
double vAllowedDistance, vDistanceAboveLimit = 0;
|
double vAllowedDistance = 0, vDistanceAboveLimit = 0;
|
||||||
if (from.isInWeb()){
|
if (from.isInWeb()){
|
||||||
// Very simple: force players to descend or stay.
|
// Very simple: force players to descend or stay.
|
||||||
vAllowedDistance = from.isOnGround() ? 0.1D : 0;
|
vAllowedDistance = from.isOnGround() ? 0.1D : 0;
|
||||||
@ -291,13 +291,15 @@ public class SurvivalFly extends Check {
|
|||||||
// TODO: consider tags for jumping as well (!).
|
// TODO: consider tags for jumping as well (!).
|
||||||
if (data.sfJumpPhase > maxJumpPhase && data.verticalVelocityCounter <= 0){
|
if (data.sfJumpPhase > maxJumpPhase && data.verticalVelocityCounter <= 0){
|
||||||
// Could use dirty flag here !
|
// Could use dirty flag here !
|
||||||
if (data.sfDirty || yDistance < 0){
|
boolean useDist = data.sfDirty || yDistance < 0 || resetFrom;
|
||||||
|
if (useDist){
|
||||||
|
// TODO: (This allows the one tick longer jump (resetTo)).
|
||||||
vAllowedDistance -= Math.max(0, (data.sfJumpPhase - maxJumpPhase) * 0.15D);
|
vAllowedDistance -= Math.max(0, (data.sfJumpPhase - maxJumpPhase) * 0.15D);
|
||||||
}
|
}
|
||||||
else if (!data.sfDirty){
|
else if (!data.sfDirty){
|
||||||
// Violation (Too high jumping or step).
|
// Violation (Too high jumping or step).
|
||||||
tags.add("maxphase");
|
tags.add("maxphase");
|
||||||
vDistanceAboveLimit = Math.max(vDistanceAboveLimit, Math.max(yDistance, 0.5));
|
vDistanceAboveLimit = Math.max(vDistanceAboveLimit, Math.max(yDistance, 0.15));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,6 +309,7 @@ public class SurvivalFly extends Check {
|
|||||||
if (vDistanceAboveLimit > 0) tags.add("vdist");
|
if (vDistanceAboveLimit > 0) tags.add("vdist");
|
||||||
|
|
||||||
// Simple-step blocker.
|
// Simple-step blocker.
|
||||||
|
// TODO: Complex step blocker: distance to set-back + low jump + accounting info
|
||||||
if ((fromOnGround || data.noFallAssumeGround) && toOnGround && Math.abs(yDistance - 1D) <= cc.yStep && vDistanceAboveLimit <= 0D && !player.hasPermission(Permissions.MOVING_SURVIVALFLY_STEP)) {
|
if ((fromOnGround || data.noFallAssumeGround) && toOnGround && Math.abs(yDistance - 1D) <= cc.yStep && vDistanceAboveLimit <= 0D && !player.hasPermission(Permissions.MOVING_SURVIVALFLY_STEP)) {
|
||||||
vDistanceAboveLimit = Math.max(vDistanceAboveLimit, Math.abs(yDistance));
|
vDistanceAboveLimit = Math.max(vDistanceAboveLimit, Math.abs(yDistance));
|
||||||
tags.add("step");
|
tags.add("step");
|
||||||
@ -440,8 +443,13 @@ public class SurvivalFly extends Check {
|
|||||||
useWorkaround = true;
|
useWorkaround = true;
|
||||||
setBackSafe = true;
|
setBackSafe = true;
|
||||||
}
|
}
|
||||||
// Check for "lost touch", for when moving events were not created,
|
// Check for "lost touch", for when moving events are missing somehow.
|
||||||
// for instance (1/256).
|
// Half block step up.
|
||||||
|
if (yDistance > 0 && yDistance <= 0.5 && to.isOnGround() && from.isOnGround(0.5 - Math.abs(yDistance))){
|
||||||
|
useWorkaround = true;
|
||||||
|
setBackSafe = true;
|
||||||
|
}
|
||||||
|
// Interpolation check.
|
||||||
if (!useWorkaround && data.fromX != Double.MAX_VALUE && yDistance > 0 && yDistance < 0.5 && data.sfLastYDist < 0) {
|
if (!useWorkaround && data.fromX != Double.MAX_VALUE && yDistance > 0 && yDistance < 0.5 && 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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user