mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 08:27:45 +00:00
FlyPathFinder:
-Lag fix for canEntityStandAt
This commit is contained in:
1 parent
4bad48352c
commit
fbb171f06c
1 file changed
+60
-72
@@ -7,6 +7,8 @@ import net.minecraft.init.Blocks;
|
||||
import net.minecraft.pathfinding.PathFinder;
|
||||
import net.minecraft.util.IntHashMap;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.util.Vec3;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class FlyPathFinder extends PathFinder
|
||||
@@ -321,88 +323,74 @@ public class FlyPathFinder extends PathFinder
|
||||
{
|
||||
boolean flag3 = false;
|
||||
|
||||
for (int l = blockX; l < blockX + pathPoint.xCoord; ++l)
|
||||
Block block = entity.worldObj.getBlock(blockX, blockY, blockZ);
|
||||
|
||||
if(block == Blocks.air)
|
||||
{
|
||||
for (int i1 = blockY; i1 < blockY + pathPoint.yCoord; ++i1)
|
||||
Vec3 vec3 = Vec3.createVectorHelper(blockX, blockY, blockZ);
|
||||
Vec3 vec31 = vec3.addVector(0, entity.height, 0);
|
||||
MovingObjectPosition movingobjectposition = entity.worldObj.rayTraceBlocks(vec3, vec31, true);
|
||||
if (movingobjectposition == null || movingobjectposition.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (block == Blocks.trapdoor)
|
||||
{
|
||||
flag3 = true;
|
||||
}
|
||||
else if (block != Blocks.flowing_water && block != Blocks.water)
|
||||
{
|
||||
if (!isWoddenDoorAllowed && block == Blocks.wooden_door)
|
||||
{
|
||||
for (int j1 = blockZ; j1 < blockZ + pathPoint.zCoord; ++j1)
|
||||
{
|
||||
Block block = entity.worldObj.getBlock(l, i1, j1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isPathingInWater)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(block == Blocks.air)
|
||||
{
|
||||
boolean heightClear = true;
|
||||
for (int currentY = blockY; currentY <= Math.ceil(blockY + entity.height); ++currentY) {
|
||||
Block b = entity.worldObj.getBlock(l, currentY, j1);
|
||||
if (b != Blocks.air) {
|
||||
heightClear = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (heightClear) {
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
flag3 = true;
|
||||
}
|
||||
|
||||
if (block == Blocks.trapdoor)
|
||||
{
|
||||
flag3 = true;
|
||||
}
|
||||
else if (block != Blocks.flowing_water && block != Blocks.water)
|
||||
{
|
||||
if (!isWoddenDoorAllowed && block == Blocks.wooden_door)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isPathingInWater)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int k1 = block.getRenderType();
|
||||
|
||||
flag3 = true;
|
||||
}
|
||||
if (entity.worldObj.getBlock(blockX, blockY, blockZ).getRenderType() == 9)
|
||||
{
|
||||
int j2 = MathHelper.floor_double(entity.posX);
|
||||
int l1 = MathHelper.floor_double(entity.posY);
|
||||
int i2 = MathHelper.floor_double(entity.posZ);
|
||||
|
||||
int k1 = block.getRenderType();
|
||||
if (entity.worldObj.getBlock(j2, l1, i2).getRenderType() != 9 && entity.worldObj.getBlock(j2, l1 - 1, i2).getRenderType() != 9)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
else if (!block.getBlocksMovement(entity.worldObj, blockX, blockY, blockZ) && (!isMovementBlockAllowed || block != Blocks.wooden_door))
|
||||
{
|
||||
if (k1 == 11 || block == Blocks.fence_gate || k1 == 32)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
|
||||
if (entity.worldObj.getBlock(l, i1, j1).getRenderType() == 9)
|
||||
{
|
||||
int j2 = MathHelper.floor_double(entity.posX);
|
||||
int l1 = MathHelper.floor_double(entity.posY);
|
||||
int i2 = MathHelper.floor_double(entity.posZ);
|
||||
if (block == Blocks.trapdoor)
|
||||
{
|
||||
return -4;
|
||||
}
|
||||
|
||||
if (entity.worldObj.getBlock(j2, l1, i2).getRenderType() != 9 && entity.worldObj.getBlock(j2, l1 - 1, i2).getRenderType() != 9)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
}
|
||||
else if (!block.getBlocksMovement(entity.worldObj, l, i1, j1) && (!isMovementBlockAllowed || block != Blocks.wooden_door))
|
||||
{
|
||||
if (k1 == 11 || block == Blocks.fence_gate || k1 == 32)
|
||||
{
|
||||
return -3;
|
||||
}
|
||||
Material material = block.getMaterial();
|
||||
|
||||
if (block == Blocks.trapdoor)
|
||||
{
|
||||
return -4;
|
||||
}
|
||||
if (material != Material.lava)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
Material material = block.getMaterial();
|
||||
|
||||
if (material != Material.lava)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!entity.handleLavaMovement())
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!entity.handleLavaMovement())
|
||||
{
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user