Files
PrimalSorcery/build/tmp/recompileMc/sources/net/minecraft/pathfinding/PathNavigateSwimmer.java
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

72 lines
2.3 KiB
Java

package net.minecraft.pathfinding;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
public class PathNavigateSwimmer extends PathNavigate
{
public PathNavigateSwimmer(EntityLiving entitylivingIn, World worldIn)
{
super(entitylivingIn, worldIn);
}
protected PathFinder getPathFinder()
{
return new PathFinder(new SwimNodeProcessor());
}
/**
* If on ground or swimming and can swim
*/
protected boolean canNavigate()
{
return this.isInLiquid();
}
protected Vec3d getEntityPosition()
{
return new Vec3d(this.entity.posX, this.entity.posY + (double)this.entity.height * 0.5D, this.entity.posZ);
}
protected void pathFollow()
{
Vec3d vec3d = this.getEntityPosition();
float f = this.entity.width * this.entity.width;
int i = 6;
if (vec3d.squareDistanceTo(this.currentPath.getVectorFromIndex(this.entity, this.currentPath.getCurrentPathIndex())) < (double)f)
{
this.currentPath.incrementPathIndex();
}
for (int j = Math.min(this.currentPath.getCurrentPathIndex() + 6, this.currentPath.getCurrentPathLength() - 1); j > this.currentPath.getCurrentPathIndex(); --j)
{
Vec3d vec3d1 = this.currentPath.getVectorFromIndex(this.entity, j);
if (vec3d1.squareDistanceTo(vec3d) <= 36.0D && this.isDirectPathBetweenPoints(vec3d, vec3d1, 0, 0, 0))
{
this.currentPath.setCurrentPathIndex(j);
break;
}
}
this.checkForStuck(vec3d);
}
/**
* Checks if the specified entity can safely walk to the specified location.
*/
protected boolean isDirectPathBetweenPoints(Vec3d posVec31, Vec3d posVec32, int sizeX, int sizeY, int sizeZ)
{
RayTraceResult raytraceresult = this.world.rayTraceBlocks(posVec31, new Vec3d(posVec32.x, posVec32.y + (double)this.entity.height * 0.5D, posVec32.z), false, true, false);
return raytraceresult == null || raytraceresult.typeOfHit == RayTraceResult.Type.MISS;
}
public boolean canEntityStandOnPos(BlockPos pos)
{
return !this.world.getBlockState(pos).isFullBlock();
}
}