public override void updatePlayerActionState() { hasAttacked = false; float f = 16F; if (playerToAttack == null) { playerToAttack = findPlayerToAttack(); if (playerToAttack != null) { pathToEntity = worldObj.getPathToEntity(this, playerToAttack, f); } } else if (!playerToAttack.isEntityAlive()) { playerToAttack = null; } else { float f1 = playerToAttack.getDistanceToEntity(this); if (canEntityBeSeen(playerToAttack)) { attackEntity(playerToAttack, f1); } } if (!hasAttacked && playerToAttack != null && (pathToEntity == null || rand.nextInt(20) == 0)) { pathToEntity = worldObj.getPathToEntity(this, playerToAttack, f); } else if (pathToEntity == null && rand.nextInt(80) == 0 || rand.nextInt(80) == 0) { bool flag = false; int j = -1; int k = -1; int l = -1; float f2 = -99999F; for (int i1 = 0; i1 < 10; i1++) { int j1 = MathHelper.floor_double((posX + rand.nextInt(13)) - 6D); int k1 = MathHelper.floor_double((posY + rand.nextInt(7)) - 3D); int l1 = MathHelper.floor_double((posZ + rand.nextInt(13)) - 6D); float f3 = getBlockPathWeight(j1, k1, l1); if (f3 > f2) { f2 = f3; j = j1; k = k1; l = l1; flag = true; } } if (flag) { pathToEntity = worldObj.getEntityPathToXYZ(this, j, k, l, 10F); } } int i = MathHelper.floor_double(boundingBox.minY); bool flag1 = handleWaterMovement(); bool flag2 = handleLavaMovement(); rotationPitch = 0.0F; if (pathToEntity == null || rand.nextInt(100) == 0) { base.updatePlayerActionState(); pathToEntity = null; return; } Vec3D vec3d = pathToEntity.getPosition(this); for (double d = width * 2.0F; vec3d != null && vec3d.squareDistanceTo(posX, vec3d.yCoord, posZ) < d * d;) { pathToEntity.incrementPathIndex(); if (pathToEntity.isFinished()) { vec3d = null; pathToEntity = null; } else { vec3d = pathToEntity.getPosition(this); } } isJumping = false; if (vec3d != null) { double d1 = vec3d.xCoord - posX; double d2 = vec3d.zCoord - posZ; double d3 = vec3d.yCoord - i; float f4 = (float)((Math.atan2(d2, d1) * 180D) / 3.1415927410125732D) - 90F; float f5 = f4 - rotationYaw; moveForward = moveSpeed; for (; f5 < -180F; f5 += 360F) { } for (; f5 >= 180F; f5 -= 360F) { } if (f5 > 30F) { f5 = 30F; } if (f5 < -30F) { f5 = -30F; } rotationYaw += f5; if (hasAttacked && playerToAttack != null) { double d4 = playerToAttack.posX - posX; double d5 = playerToAttack.posZ - posZ; float f7 = rotationYaw; rotationYaw = (float)((Math.atan2(d5, d4) * 180D) / 3.1415927410125732D) - 90F; float f6 = (((f7 - rotationYaw) + 90F) * 3.141593F) / 180F; moveStrafing = -MathHelper.sin(f6) * moveForward * 1.0F; moveForward = MathHelper.cos(f6) * moveForward * 1.0F; } if (d3 > 0.0D) { isJumping = true; } } if (playerToAttack != null) { faceEntity(playerToAttack, 30F); } if (isCollidedHorizontally) { isJumping = true; } if (rand.nextFloat() < 0.8F && (flag1 || flag2)) { isJumping = true; } }
public MovingObjectPosition func_706_a(Vec3D vec3d, Vec3D vec3d1) { Vec3D vec3d2 = vec3d.getIntermediateWithXValue(vec3d1, minX); Vec3D vec3d3 = vec3d.getIntermediateWithXValue(vec3d1, maxX); Vec3D vec3d4 = vec3d.getIntermediateWithYValue(vec3d1, minY); Vec3D vec3d5 = vec3d.getIntermediateWithYValue(vec3d1, maxY); Vec3D vec3d6 = vec3d.getIntermediateWithZValue(vec3d1, minZ); Vec3D vec3d7 = vec3d.getIntermediateWithZValue(vec3d1, maxZ); if (!isVecInYZ(vec3d2)) { vec3d2 = null; } if (!isVecInYZ(vec3d3)) { vec3d3 = null; } if (!isVecInXZ(vec3d4)) { vec3d4 = null; } if (!isVecInXZ(vec3d5)) { vec3d5 = null; } if (!isVecInXY(vec3d6)) { vec3d6 = null; } if (!isVecInXY(vec3d7)) { vec3d7 = null; } Vec3D vec3d8 = null; if (vec3d2 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d2) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d2; } if (vec3d3 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d3) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d3; } if (vec3d4 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d4) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d4; } if (vec3d5 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d5) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d5; } if (vec3d6 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d6) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d6; } if (vec3d7 != null && (vec3d8 == null || vec3d.squareDistanceTo(vec3d7) < vec3d.squareDistanceTo(vec3d8))) { vec3d8 = vec3d7; } if (vec3d8 == null) { return(null); } sbyte byte0 = -1; if (vec3d8 == vec3d2) { byte0 = 4; } if (vec3d8 == vec3d3) { byte0 = 5; } if (vec3d8 == vec3d4) { byte0 = 0; } if (vec3d8 == vec3d5) { byte0 = 1; } if (vec3d8 == vec3d6) { byte0 = 2; } if (vec3d8 == vec3d7) { byte0 = 3; } return(new MovingObjectPosition(0, 0, 0, byte0, vec3d8)); }