@Override public void moveEntityWithHeading(float moveStrafe, float moveForward) { // This controls the rider spider while it is mounted by the player. if (riddenByEntity != null) { final int level = getLevel(); prevRotationYaw = rotationYaw = riddenByEntity.rotationYaw; rotationPitch = riddenByEntity.rotationPitch * 0.5F; setRotation(rotationYaw, rotationPitch); rotationYawHead = renderYawOffset = rotationYaw; if (level == 3) { moveStrafe = ((EntityLivingBase) riddenByEntity).moveStrafing * level * 0.5F / 4; moveForward = ((EntityLivingBase) riddenByEntity).moveForward * level * 0.6F / 4; } else if (level == 2) { moveStrafe = ((EntityLivingBase) riddenByEntity).moveStrafing * level * 0.4F / 3; moveForward = ((EntityLivingBase) riddenByEntity).moveForward * level * 0.5F / 3; } else { moveStrafe = ((EntityLivingBase) riddenByEntity).moveStrafing * level * 0.7F / 3; moveForward = ((EntityLivingBase) riddenByEntity).moveForward * level * 0.8F / 3; } if (moveForward <= 0.0F) { moveForward *= 0.25F; } stepHeight = 1.0F; jumpMovementFactor = getAIMoveSpeed() * 0.1F; if (!worldObj.isRemote) { setAIMoveSpeed( (float) getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue()); super.moveEntityWithHeading(moveStrafe, moveForward); } prevLimbSwingAmount = limbSwingAmount; final double d1 = posX - prevPosX; final double d0 = posZ - prevPosZ; float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F; if (f4 > 1.0F) { f4 = 1.0F; } limbSwingAmount += (f4 - limbSwingAmount) * 0.4F; limbSwing += limbSwingAmount; } else { stepHeight = 0.5F; jumpMovementFactor = 0.02F; super.moveEntityWithHeading(moveStrafe, moveForward); } }