mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-09-18 18:01:17 +02:00
Confine bounding boxes and y-distance for flag collection.
This leads to less blocks visited. (Cleanup pending.)
This commit is contained in:
parent
186eec69ab
commit
d60c77b66a
@ -277,7 +277,8 @@ public class PlayerLocation {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// TODO: Distinguish based on actual height off .0 ?
|
// TODO: Distinguish based on actual height off .0 ?
|
||||||
final double diff = 0.001;
|
// TODO: diff still needed ?
|
||||||
|
final double diff = 0; // 0.001;
|
||||||
aboveStairs = BlockProperties.collides(blockCache, minX - diff, minY - 1.0, minZ - diff, maxX + diff, minY + 0.25, maxZ + diff, BlockProperties.F_STAIRS);
|
aboveStairs = BlockProperties.collides(blockCache, minX - diff, minY - 1.0, minZ - diff, maxX + diff, minY + 0.25, maxZ + diff, BlockProperties.F_STAIRS);
|
||||||
}
|
}
|
||||||
return aboveStairs;
|
return aboveStairs;
|
||||||
@ -425,6 +426,7 @@ public class PlayerLocation {
|
|||||||
*/
|
*/
|
||||||
public boolean isInWeb() {
|
public boolean isInWeb() {
|
||||||
if (inWeb == null) {
|
if (inWeb == null) {
|
||||||
|
// TODO: inset still needed ?
|
||||||
final double inset = 0.001d;
|
final double inset = 0.001d;
|
||||||
inWeb = BlockProperties.collidesId(blockCache, minX + inset, minY + inset, minZ + inset, maxX - inset, maxY - inset, maxZ - inset, Material.WEB.getId());
|
inWeb = BlockProperties.collidesId(blockCache, minX + inset, minY + inset, minZ + inset, maxX - inset, maxY - inset, maxZ - inset, Material.WEB.getId());
|
||||||
}
|
}
|
||||||
@ -459,11 +461,13 @@ public class PlayerLocation {
|
|||||||
// TODO: BlockHeight is needed for fences, use right away (above)?
|
// TODO: BlockHeight is needed for fences, use right away (above)?
|
||||||
if (!BlockProperties.isPassableWorkaround(blockCache, blockX, bY, blockZ, minX - blockX, minY - yOnGround - bY, minZ - blockZ, id, maxX - minX, yOnGround, maxZ - minZ, 1.0)
|
if (!BlockProperties.isPassableWorkaround(blockCache, blockX, bY, blockZ, minX - blockX, minY - yOnGround - bY, minZ - blockZ, id, maxX - minX, yOnGround, maxZ - minZ, 1.0)
|
||||||
|| (flags & BlockProperties.F_GROUND_HEIGHT) != 0 && BlockProperties.getGroundMinHeight(blockCache, blockX, bY, blockZ, id, bounds, flags) <= y - bY){
|
|| (flags & BlockProperties.F_GROUND_HEIGHT) != 0 && BlockProperties.getGroundMinHeight(blockCache, blockX, bY, blockZ, id, bounds, flags) <= y - bY){
|
||||||
|
// System.out.println("*** onground SHORTCUT");
|
||||||
onGround = true;
|
onGround = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (onGround == null){
|
if (onGround == null){
|
||||||
|
// System.out.println("*** fetch onground std");
|
||||||
// Full on-ground check (blocks).
|
// Full on-ground check (blocks).
|
||||||
// Note: Might check for half-block height too (getTypeId), but that is much more seldom.
|
// Note: Might check for half-block height too (getTypeId), but that is much more seldom.
|
||||||
onGround = BlockProperties.isOnGround(blockCache, minX, minY - yOnGround, minZ, maxX, minY, maxZ, 0L);
|
onGround = BlockProperties.isOnGround(blockCache, minX, minY - yOnGround, minZ, maxX, minY, maxZ, 0L);
|
||||||
@ -473,6 +477,8 @@ public class PlayerLocation {
|
|||||||
}
|
}
|
||||||
if (onGround) onGroundMinY = Math.min(onGroundMinY, yOnGround);
|
if (onGround) onGroundMinY = Math.min(onGroundMinY, yOnGround);
|
||||||
else{
|
else{
|
||||||
|
// System.out.println("*** onground check entities");
|
||||||
|
// TODO: further confine this ?
|
||||||
notOnGroundMaxY = Math.max(notOnGroundMaxY, yOnGround);
|
notOnGroundMaxY = Math.max(notOnGroundMaxY, yOnGround);
|
||||||
final double d1 = 0.25D;
|
final double d1 = 0.25D;
|
||||||
onGround = blockCache.standsOnEntity(player, minX - d1, minY - yOnGround - d1, minZ - d1, maxX + d1, minY + 0.25 + d1, maxZ + d1);
|
onGround = blockCache.standsOnEntity(player, minX - d1, minY - yOnGround - d1, minZ - d1, maxX + d1, minY + 0.25 + d1, maxZ + d1);
|
||||||
@ -536,6 +542,7 @@ public class PlayerLocation {
|
|||||||
if (notOnGroundMaxY >= yOnGround) return false;
|
if (notOnGroundMaxY >= yOnGround) return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// System.out.println("*** Fetch on-ground: yOnGround=" + yOnGround + " xzM=" + xzMargin + " yM=" + yMargin + " ign=" + ignoreFlags);
|
||||||
final boolean onGround = BlockProperties.isOnGround(blockCache, minX - xzMargin, minY - yOnGround - yMargin, minZ - xzMargin, maxX + xzMargin, minY + yMargin, maxZ + xzMargin, ignoreFlags);
|
final boolean onGround = BlockProperties.isOnGround(blockCache, minX - xzMargin, minY - yOnGround - yMargin, minZ - xzMargin, maxX + xzMargin, minY + yMargin, maxZ + xzMargin, ignoreFlags);
|
||||||
if (ignoreFlags == 0){
|
if (ignoreFlags == 0){
|
||||||
if (onGround){
|
if (onGround){
|
||||||
@ -748,7 +755,13 @@ public class PlayerLocation {
|
|||||||
* @param maxYonGround
|
* @param maxYonGround
|
||||||
*/
|
*/
|
||||||
public void collectBlockFlags(double maxYonGround){
|
public void collectBlockFlags(double maxYonGround){
|
||||||
blockFlags = BlockProperties.collectFlagsSimple(blockCache, minX - 0.001, minY - Math.max(Math.max(1.0, yOnGround), maxYonGround), minZ - 0.001, maxX + 0.001, maxY + .25, maxZ + .001);
|
maxYonGround = Math.max(yOnGround, maxYonGround);
|
||||||
|
// TODO: Clearly refine this for 1.5 high blocks.
|
||||||
|
// TODO: Check which checks need blocks below.
|
||||||
|
final double yExtra = 0.6; // y - blockY - maxYonGround > 0.5 ? 0.5 : 1.0;
|
||||||
|
// TODO: xz margin still needed ?
|
||||||
|
final double xzM = 0; //0.001;
|
||||||
|
blockFlags = BlockProperties.collectFlagsSimple(blockCache, minX - xzM, minY - yExtra - maxYonGround, minZ - xzM, maxX + xzM, Math.max(maxY, minY + 1.5), maxZ + xzM);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user