示例#1
0
        protected internal override void UpdatePlayerActionState()
        {
            hasAttacked = Func_25026_u();
            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);
                    }
                    else
                    {
                        Func_28013_b(playerToAttack, f1);
                    }
                }
            }
            if (!hasAttacked && playerToAttack != null && (pathToEntity == null || rand.NextInt
                                                               (20) == 0))
            {
                pathToEntity = worldObj.GetPathToEntity(this, playerToAttack, f);
            }
            else
            {
                if (!hasAttacked && (pathToEntity == null && rand.Next(80) == 0 || rand.NextInt
                                         (80) == 0))
                {
                    Func_31021_B();
                }
            }
            int  i     = net.minecraft.src.MathHelper.Floor_double(boundingBox.minY + 0.5D);
            bool flag  = IsInWater();
            bool flag1 = HandleLavaMovement();

            rotationPitch = 0.0F;
            if (pathToEntity == null || rand.Next(100) == 0)
            {
                base.UpdatePlayerActionState();
                pathToEntity = null;
                return;
            }
            net.minecraft.src.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 - (double)i;
                float  f2 = (float)((System.Math.Atan2(d2, d1) * 180D) / 3.1415927410125732D) - 90F;
                float  f3 = f2 - rotationYaw;
                moveForward = moveSpeed;
                for (; f3 < -180F; f3 += 360F)
                {
                }
                for (; f3 >= 180F; f3 -= 360F)
                {
                }
                if (f3 > 30F)
                {
                    f3 = 30F;
                }
                if (f3 < -30F)
                {
                    f3 = -30F;
                }
                rotationYaw += f3;
                if (hasAttacked && playerToAttack != null)
                {
                    double d4 = playerToAttack.posX - posX;
                    double d5 = playerToAttack.posZ - posZ;
                    float  f5 = rotationYaw;
                    rotationYaw = (float)((System.Math.Atan2(d5, d4) * 180D) / 3.1415927410125732D) -
                                  90F;
                    float f4 = (((f5 - rotationYaw) + 90F) * 3.141593F) / 180F;
                    moveStrafing = -net.minecraft.src.MathHelper.Sin(f4) * moveForward * 1.0F;
                    moveForward  = net.minecraft.src.MathHelper.Cos(f4) * moveForward * 1.0F;
                }
                if (d3 > 0.0D)
                {
                    isJumping = true;
                }
            }
            if (playerToAttack != null)
            {
                FaceEntity(playerToAttack, 30F, 30F);
            }
            if (isCollidedHorizontally && !GetGotPath())
            {
                isJumping = true;
            }
            if (rand.NextFloat() < 0.8F && (flag || flag1))
            {
                isJumping = true;
            }
        }
示例#2
0
        public virtual net.minecraft.src.MovingObjectPosition Func_706_a(net.minecraft.src.Vec3D
                                                                         vec3d, net.minecraft.src.Vec3D vec3d1)
        {
            net.minecraft.src.Vec3D vec3d2 = vec3d.GetIntermediateWithXValue(vec3d1, minX);
            net.minecraft.src.Vec3D vec3d3 = vec3d.GetIntermediateWithXValue(vec3d1, maxX);
            net.minecraft.src.Vec3D vec3d4 = vec3d.GetIntermediateWithYValue(vec3d1, minY);
            net.minecraft.src.Vec3D vec3d5 = vec3d.GetIntermediateWithYValue(vec3d1, maxY);
            net.minecraft.src.Vec3D vec3d6 = vec3d.GetIntermediateWithZValue(vec3d1, minZ);
            net.minecraft.src.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;
            }
            net.minecraft.src.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);
            }
            byte byte0 = unchecked ((byte)(-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 net.minecraft.src.MovingObjectPosition(0, 0, 0, byte0, vec3d8));
        }