diff --git a/src/main/java/noppes/npcs/ai/pathfinder/FlyPathFinder.java b/src/main/java/noppes/npcs/ai/pathfinder/FlyPathFinder.java index 9673520d5..33a26639c 100644 --- a/src/main/java/noppes/npcs/ai/pathfinder/FlyPathFinder.java +++ b/src/main/java/noppes/npcs/ai/pathfinder/FlyPathFinder.java @@ -166,79 +166,27 @@ public class FlyPathFinder extends PathFinder b0 = 1; } - FlyPathPoint pathpoint3 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord, p_75860_2_.zCoord + 1, p_75860_3_, b0); - FlyPathPoint pathpoint4 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord - 1, p_75860_2_.yCoord, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint5 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord + 1, p_75860_2_.yCoord, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint6 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord, p_75860_2_.zCoord - 1, p_75860_3_, b0); + for(int y = -1; y <= 1; y ++) { + FlyPathPoint pathpoint3 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord + y, p_75860_2_.zCoord + 1, p_75860_3_, b0); + FlyPathPoint pathpoint4 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord - 1, p_75860_2_.yCoord + y, p_75860_2_.zCoord, p_75860_3_, b0); + FlyPathPoint pathpoint5 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord + 1, p_75860_2_.yCoord + y, p_75860_2_.zCoord, p_75860_3_, b0); + FlyPathPoint pathpoint6 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord + y, p_75860_2_.zCoord - 1, p_75860_3_, b0); - FlyPathPoint pathpoint7 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord + 1, p_75860_2_.zCoord + 1, p_75860_3_, b0); - FlyPathPoint pathpoint8 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord - 1, p_75860_2_.yCoord + 1, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint9 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord + 1, p_75860_2_.yCoord + 1, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint10 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord + 1, p_75860_2_.zCoord - 1, p_75860_3_, b0); + if (pathpoint3 != null && !pathpoint3.isFirst && pathpoint3.distanceTo(p_75860_4_) < p_75860_5_) { + this.pathOptions[i++] = pathpoint3; + } - FlyPathPoint pathpoint11 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord - 1, p_75860_2_.zCoord + 1, p_75860_3_, b0); - FlyPathPoint pathpoint12 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord - 1, p_75860_2_.yCoord - 1, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint13 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord + 1, p_75860_2_.yCoord - 1, p_75860_2_.zCoord, p_75860_3_, b0); - FlyPathPoint pathpoint14 = this.getSafePoint(p_75860_1_, p_75860_2_.xCoord, p_75860_2_.yCoord - 1, p_75860_2_.zCoord - 1, p_75860_3_, b0); + if (pathpoint4 != null && !pathpoint4.isFirst && pathpoint4.distanceTo(p_75860_4_) < p_75860_5_) { + this.pathOptions[i++] = pathpoint4; + } - if (pathpoint3 != null && !pathpoint3.isFirst && pathpoint3.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint3; - } + if (pathpoint5 != null && !pathpoint5.isFirst && pathpoint5.distanceTo(p_75860_4_) < p_75860_5_) { + this.pathOptions[i++] = pathpoint5; + } - if (pathpoint4 != null && !pathpoint4.isFirst && pathpoint4.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint4; - } - - if (pathpoint5 != null && !pathpoint5.isFirst && pathpoint5.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint5; - } - - if (pathpoint6 != null && !pathpoint6.isFirst && pathpoint6.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint6; - } - - if (pathpoint7 != null && !pathpoint7.isFirst && pathpoint7.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint7; - } - - if (pathpoint8 != null && !pathpoint8.isFirst && pathpoint8.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint8; - } - - if (pathpoint9 != null && !pathpoint9.isFirst && pathpoint9.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint9; - } - - if (pathpoint10 != null && !pathpoint10.isFirst && pathpoint10.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint10; - } - - if (pathpoint11 != null && !pathpoint11.isFirst && pathpoint11.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint11; - } - - if (pathpoint12 != null && !pathpoint12.isFirst && pathpoint12.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint12; - } - - if (pathpoint13 != null && !pathpoint13.isFirst && pathpoint13.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint13; - } - - if (pathpoint14 != null && !pathpoint14.isFirst && pathpoint14.distanceTo(p_75860_4_) < p_75860_5_) - { - this.pathOptions[i++] = pathpoint14; + if (pathpoint6 != null && !pathpoint6.isFirst && pathpoint6.distanceTo(p_75860_4_) < p_75860_5_) { + this.pathOptions[i++] = pathpoint6; + } } return i; diff --git a/src/main/java/noppes/npcs/ai/pathfinder/FlyingMoveHelper.java b/src/main/java/noppes/npcs/ai/pathfinder/FlyingMoveHelper.java index e316c7fb2..b754b2514 100644 --- a/src/main/java/noppes/npcs/ai/pathfinder/FlyingMoveHelper.java +++ b/src/main/java/noppes/npcs/ai/pathfinder/FlyingMoveHelper.java @@ -29,45 +29,33 @@ public class FlyingMoveHelper extends EntityMoveHelper{ if (this.update) { this.update = false; - double speed = this.entity.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue(); - double speedMult = 0.6000000238418579D / 0.5D; + double speed = this.speed * this.entity.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue() * this.entity.ai.flySpeed; double d0 = this.posX - this.entity.posX; - double d1 = this.posY - this.entity.posY; + double d1 = this.posY - MathHelper.floor_double(this.entity.boundingBox.minY + 0.05D); double d2 = this.posZ - this.entity.posZ; double d4 = d0 * d0 + d1 * d1 + d2 * d2; + double d5 = MathHelper.sqrt_double(d4); + + double heightOffGround = 0; + if(this.entity.ai.hasFlyLimit) { + for (int blockY = (int) this.posY; blockY > 0; blockY--) { + heightOffGround = this.posY - blockY; + if (this.entity.worldObj.getBlock((int) this.posX, blockY, (int) this.posZ) != Blocks.air || heightOffGround > this.entity.ai.flyHeightLimit){ + break; + } + } + } if (this.entity.hurtTime == 0 && d4 > 0.5D) { - if (this.posY != this.entity.posY) { - if (this.entity.motionY * Math.signum(this.entity.posY - this.posY) > 0.0D) { - this.entity.motionY = 0.0D; - } + this.entity.motionX += (d0 / d5 * speed - this.entity.motionX) * speed; + this.entity.motionZ += (d2 / d5 * speed - this.entity.motionZ) * speed; - double verticalSpeed = Math.abs(this.entity.posY - this.posY); - if(verticalSpeed > speed * speedMult) - verticalSpeed = speed * speedMult; - verticalSpeed += this.entity.ai.flySpeed/2.0D; - - if(verticalSpeed > Math.abs(this.entity.posY - this.posY)) - verticalSpeed = Math.abs(this.entity.posY - this.posY); - - int blockY = (int) this.posY; - double heightOffGround = 0; - if(this.entity.ai.hasFlyLimit) { - for (blockY = (int) this.posY; blockY > 0; blockY--) { - heightOffGround = this.posY - blockY; - if (this.entity.worldObj.getBlock((int) this.posX, blockY, (int) this.posZ) != Blocks.air || heightOffGround > this.entity.ai.flyHeightLimit){ - break; - } - } - } - if(heightOffGround < this.entity.ai.flyHeightLimit || !this.entity.ai.hasFlyLimit) - this.entity.motionY -= Math.signum(this.entity.posY - this.posY) * verticalSpeed; + if (heightOffGround < this.entity.ai.flyHeightLimit || !this.entity.ai.hasFlyLimit) { + this.entity.motionY = ((d1 / d5) * speed); + if(this.entity.motionY < 0 && this.entity.motionY > -6 * this.entity.ai.getWalkingSpeed()/5.0D) + this.entity.motionY *= 5; } - - double d5 = MathHelper.sqrt_double(d4); - this.entity.motionX += (d0 / d5 * speed - this.entity.motionX) * speed * speedMult; - this.entity.motionZ += (d2 / d5 * speed - this.entity.motionZ) * speed * speedMult; } this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw,(float) ((Math.atan2(-d0, -d2) + Math.PI) * -(180F / Math.PI)),30.0F); diff --git a/src/main/java/noppes/npcs/ai/pathfinder/PathNavigateFlying.java b/src/main/java/noppes/npcs/ai/pathfinder/PathNavigateFlying.java index b98743930..581c46139 100644 --- a/src/main/java/noppes/npcs/ai/pathfinder/PathNavigateFlying.java +++ b/src/main/java/noppes/npcs/ai/pathfinder/PathNavigateFlying.java @@ -289,15 +289,15 @@ public class PathNavigateFlying extends PathNavigate { private Vec3 getEntityPosition() { - return Vec3.createVectorHelper(this.theEntity.posX, (double)this.getPathableYPos(), this.theEntity.posZ); + return Vec3.createVectorHelper(this.theEntity.posX, this.getPathableYPos(), this.theEntity.posZ); } /** * Gets the safe pathing Y position for the entity depending on if it can path swim or not */ - private int getPathableYPos() + private double getPathableYPos() { - return (int)(this.theEntity.boundingBox.minY + 0.5D); + return this.theEntity.boundingBox.minY + 0.05D; } /** diff --git a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java index f9419d802..c339a524d 100644 --- a/src/main/java/noppes/npcs/entity/EntityNPCInterface.java +++ b/src/main/java/noppes/npcs/entity/EntityNPCInterface.java @@ -243,6 +243,11 @@ public abstract class EntityNPCInterface extends EntityCreature implements IEnti script.setWorld(world); } + public int getMaxSafePointTries() + { + return 5; + } + @Override public boolean attackEntityAsMob(Entity par1Entity){ float f = stats.getAttackStrength();