PositionProbeWater.java
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.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 PositionProbeWater extends PositionProbeBase {
private double ySwim;
public PositionProbeWater() {
}
public boolean probePosition(@Nonnull Ref<EntityStore> ref, @Nonnull Box boundingBox, @Nonnull Vector3d position, @Nonnull CollisionResult collisionResult, double swimDepth, @Nonnull ComponentAccessor<EntityStore> componentAccessor) {
this.ySwim = position.y + swimDepth + 1.0E-6;
return .probePosition(ref, boundingBox, position, collisionResult, , PositionProbeWater::blockTest, , componentAccessor);
}
{
(config.blockMaterialMask & ) != ;
(config.blockMaterialMask & ) != ;
(config.blockMaterialMask & ) != ;
(solid && CollisionMath.isTouching(code)) {
boxBlockIntersection.isOnGround();
.onGround |= isOnGround;
.touchCeil |= boxBlockIntersection.touchesCeil();
(isOnGround && config.blockY > .groundLevel) {
.groundLevel = config.blockY;
}
}
((!fluid || !CollisionMath.isOverlapping(code)) && !submerged) {
solid;
} {
()(config.blockY + );
.inWater |= yTop >= .ySwim;
;
}
}
{
.reset();
.inWater = ;
}
String {
.ySwim;
+ var10000 + + .toString();
}
}