classpublicPriority 3
PositionProbeAir
com.hypixel.hytale.server.npc.util.PositionProbeAir
extends PositionProbeBase
3
Methods
3
Public Methods
3
Fields
1
Constructors
Constructors
public
PositionProbeAir()Methods
Public Methods (3)
public
boolean isInAir()public
boolean isOnSolid()public
String toString()@Nonnull@Override
Fields
Protected Fields (3)
protected
boolean collideWithFluidprotected
boolean inAirprotected
boolean onSolidInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
package com.hypixel.hytale.server.npc.util;
import com.hypixel.hytale.component.ComponentAccessor;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.math.shape.Box;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.protocol.BlockMaterial;
import com.hypixel.hytale.server.core.modules.collision.BoxBlockIntersectionEvaluator;
import com.hypixel.hytale.server.core.modules.collision.CollisionConfig;
import com.hypixel.hytale.server.core.modules.collision.CollisionMath;
import com.hypixel.hytale.server.core.modules.collision.CollisionResult;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import javax.annotation.Nonnull;
public class PositionProbeAir extends PositionProbeBase {
protected boolean inAir;
protected boolean onSolid;
protected boolean collideWithFluid;
public PositionProbeAir() {
}
public boolean probePosition(
@Nonnull Ref<EntityStore> ref,
@Nonnull Box boundingBox,
@Nonnull Vector3d position,
@Nonnull CollisionResult collisionResult,
@Nonnull ComponentAccessor<EntityStore> componentAccessor
) {
this.collideWithFluid = (collisionResult.getConfig().getCollisionByMaterial() & 2) != 0;
this.inAir = super.probePosition(ref, boundingBox, position, collisionResult, this, PositionProbeAir::blockTest, 6, componentAccessor);
return this.inAir;
}
private boolean blockTest(int code, @Nonnull BoxBlockIntersectionEvaluator boxBlockIntersection, @Nonnull CollisionConfig config) {
if (CollisionMath.isTouching(code)) {
if (config.blockMaterial == BlockMaterial.Solid) {
boolean isOnGround = boxBlockIntersection.isOnGround();
this.onGround |= isOnGround;
this.touchCeil = this.touchCeil | boxBlockIntersection.touchesCeil();
this.onSolid |= isOnGround;
if (isOnGround && config.blockY > this.groundLevel) {
this.groundLevel = config.blockY;
}
}
return false;
} else if (CollisionMath.isOverlapping(code) && (config.blockMaterialMask & 2) != 0) {
this.inWater = true;
return this.collideWithFluid;
} else {
return true;
}
}
public boolean isInAir() {
return this.inAir;
}
public boolean isOnSolid() {
return this.onSolid;
}
@Override
protected void reset() {
super.reset();
this.inAir = false;
this.onSolid = false;
}
@Nonnull
@Override
public String toString() {
return "PositionProbeAir{inAir=" + this.inAir + ", onSolid=" + this.onSolid + "} " + super.toString();
}
}